【问题标题】:node.js can i use multiple ssl certificates and keys for same project and how?node.js 我可以为同一个项目使用多个 ssl 证书和密钥吗?如何?
【发布时间】:2019-08-17 20:05:21
【问题描述】:

我有我的paypal ssl certificate 为我的代码添加的贝宝 ipn,它可以正常工作

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 证书和密钥,但现在我不知道如何将它添加到贝宝 ipn 证书和 httpsOptions 上的密钥

我发现的唯一类似的东西是来自github issues的代码

var options = {
    key: [key1, key2],
    cert: [cert1, cert2],
    ca: caCert
};
var server = https.createServer(options);

那么正确的做法是什么?

【问题讨论】:

    标签: node.js express ssl


    【解决方案1】:

    在同一台服务器上使用不同的密钥由服务器名称指示 (SNI) 处理,并且需要为不同的服务器使用不同的域名。 This question 展示了如何使用 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。

    【讨论】:

    • 这正是我想要的。谢谢分享!
    猜你喜欢
    • 2011-09-16
    • 2016-10-24
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多