我为我的代码添加了paypal ssl certificate for paypal 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);
那么正确的做法是什么?
答案 0 :(得分:2)
在同一服务器上使用不同的密钥由服务器名称指示(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提供不同的链。
答案 1 :(得分:1)
根据我的观点,正确的做法是为其他实例创建单独的服务器实例。 每个实例将用于单独的证书。
希望它会对您有所帮助。