我已经为IOS推送通知生成了一个.cer文件,我希望将其与NodeJS HTTPS模块一起使用。
我找到的HTTPS模块的唯一示例可以与.pem和.sfx文件一起使用,而不是.cer:
var options = {
key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')
};
or
var options = {
pfx: fs.readFileSync('server.pfx')
}
https.createServer(options, function (req, res) {
res.writeHead(200);
res.end("hello world\n");
}).listen(8000);有什么解决方案吗?
发布于 2017-12-30 21:21:07
可以使用两种不同的格式对.cer文件进行编码:PEM和DER。
如果您的文件是使用PEM格式编码的,您可以像使用任何其他.pem文件一样使用它(有关这方面的更多信息,可以在Node.js documentation中找到):
const https = require("https");
const options = {
key: fs.readFileSync("key.pem", "utf8"),
cert: fs.readFileSync("cert.cer", "utf8")
};
https.createServer(options, (req, res) => {
res.writeHead(200);
res.end("Hello world");
}).listen(8000);如果您的文件是使用DER格式编码的,您首先需要使用OpenSSL将其转换为.pem文件(该命令取自here):
openssl x509 -inform der -in cert.cer -out cert.pem然后,可以使用上面的代码,cert文件名为cert.pem而不是cert.cer
const https = require("https");
const options = {
key: fs.readFileSync("key.pem", "utf8"),
cert: fs.readFileSync("cert.pem", "utf8")
};
https.createServer(options, (req, res) => {
res.writeHead(200);
res.end("Hello world");
}).listen(8000);如果您拥有与cert.cer文件匹配的证书颁发机构的密钥,则可以将其包括在https.createServer的options参数中,如下所示(代码示例假定文件名为ca.pem,并且使用PEM格式进行编码):
const https = require("https");
const options = {
ca: fs.readFileSync("ca.pem", "utf8"),
key: fs.readFileSync("key.pem", "utf8"),
cert: fs.readFileSync("cert.pem", "utf8")
};
https.createServer(options, (req, res) => {
res.writeHead(200);
res.end("Hello world");
}).listen(8000);有关https.createServer及其参数的更多信息,请查看documentation。
注意:上面的所有选项都假设您还有一个以PEM格式编码的名为key.pem的公钥,并且.cer文件名为cert.cer。如果您没有公钥,请评论或将其添加到问题本身,我将相应地更新我的答案。
如果你不确定你的文件是以哪种格式编码的,你可以尝试这两个选项,看看哪一个适合你。
发布于 2018-01-03 05:42:21
/TLS加密是不对称的,它由两部分组成:HTTPS公钥和HTTPS私钥。
上传证书签名请求(CSR)后,您从苹果推送通知服务(APNS)获得的.cer文件是签名的公钥。
私钥的位置取决于生成它的方式。
如果你在苹果电脑上使用苹果钥匙链应用程序,它有私钥。将.cer 公钥重新导入Keychain。然后使用导出选项获取一个受密码保护的.p12文件,该文件将同时包含私有和公钥。请参见链接[1]和[2]。
在node.js应用程序中,导出的.p12文件和密码可用作https.createServer的pfx和passphrase选项。
例如:
var options = {
pfx: fs.readFileSync('./exported-cert.p12'),
passphrase: 'password-that-was-set-on-export'
};
https.createServer(options, ...);发布于 2014-03-03 21:00:25
这是一个使用crt的例子,你可以将cer转换为crt,以防它不起作用:
var express = require('express');
var app = express();
var fs = require('fs');
var https = require('https');
var credentials = {
ca: fs.readFileSync(__dirname+"/ssl/certificate.ca-crt", 'utf8'), //certificate concatenation or intermediate certificates
key: fs.readFileSync(__dirname+"/ssl/mydomain.com.key", 'utf8'), //SSL key
cert: fs.readFileSync(__dirname+"/ssl/certificate.crt", 'utf8') //the certificate
};
app.configure(function() {
// set up your express application
});
var httpsServer = https.createServer(credentials, app);
httpsServer.listen(443);摘自此处(西班牙语):salvatorelab.es
您还可以查看这些文件的示例(crt、ca-crt...)包含或者看起来像。
https://stackoverflow.com/questions/22146355
复制相似问题