node.js - node.js 我可以为同一个项目使用多个 ssl 证书和密钥吗?如何?
问题描述
我为我的代码添加了paypal ipn的paypal ssl证书,并且它可以正常工作
var httpsOptions = {
key: fs.readFileSync('./app/certsandkeys/my-prvkey.pem'),
cert: fs.readFileSync('./app/certsandkeys/my-pubcert.pem'),
requestCert: true
//pfx: fs.readFileSync('./app/certsandkeys/ssl/crt.pfx'),
//passphrase:"password"
}
https.createServer(httpsOptions, app).listen(443,function (req,res) {
console.log("server listening on port " + 443);
});
但我现在需要的是验证我的整个站点,所以我使用 openssl(server.crt 和 server.csr 和 server.key)创建了一个 ssl 证书和密钥,但现在我不知道如何将它添加到 paypal ipn 证书旁边并键入 httpsOptions
我发现的唯一一件事就是来自github 问题的代码
var options = {
key: [key1, key2],
cert: [cert1, cert2],
ca: caCert
};
var server = https.createServer(options);
那么这样做的正确方法是什么?
解决方案
在同一台服务器上使用不同的密钥由服务器名称指示 (SNI) 处理,并且需要为不同的服务器使用不同的域名。这个问题展示了如何使用 SNI 为第二个域名创建不同的安全上下文。
在默认上下文中更改键的代码应如下所示:
const secondContext = tls.createSecureContext({
key: [key2],
cert: [cert2]
});
const options = {
key: [key1],
cert: [cert1],
SNICallback: function (domain, cb) {
if (domain === 'key2domain.example.com') {
cb(null, secondContext);
} else {
cb();
}
}
}
从您提到的贝宝文档中不清楚贝宝是否让您为此 IPN 服务 URL 设置备用域。相反,看起来他们的流程接受 CSR 来处理仅供 IPN 使用的自签名证书,并提供付费签名以将其用于用户可见按钮,即他们提供自己的 CA 服务?
您可以在同一个密钥上提交多个 CSR,因此您可以尝试依赖单个私钥并保留来自普通 CA 的证书链。但是,如果他们强制使用自己的证书链,那么您可能需要为此使用创建一个单独的(子)域,以便为不同的链提供 SNI。
推荐阅读
- javascript - 如何在 JavaScript 中展平模板字符串
- rascal - Rascal 中的列表理解错误“set [Declaration] 不支持下标”
- classpath - 如何识别infinispan配置xml文件的路径
- image-processing - 将栅格转换为矩阵
- titanium - Titanium Appcelerator **构建失败**
- gitlab - 如何通过命令行在 .gitattributes 文件中设置文件属性
- ios - 知道另一个应用程序的捆绑 ID,可以破解钥匙串访问权限吗?
- excel - 如果从 vba 中的另一个表复制和粘贴新值,则无法展开表
- php - 如何在php中隐藏gettext信息
- kendo-ui - 单元格值更改后的剑道网格更新字段摘要