【发布时间】:2016-12-20 15:26:35
【问题描述】:
是否可以在不重新启动 node.js 中的服务器的情况下换出证书(比如是否更新)?当前打开的任何连接都已经信任服务器,因此不需要断开连接,但任何新连接都需要查看新证书。我想应该可以进行这种热插拔。是否可以通过 API node.js 提供?
或者是否有任何节点 https 模块允许这样做?
【问题讨论】:
是否可以在不重新启动 node.js 中的服务器的情况下换出证书(比如是否更新)?当前打开的任何连接都已经信任服务器,因此不需要断开连接,但任何新连接都需要查看新证书。我想应该可以进行这种热插拔。是否可以通过 API node.js 提供?
或者是否有任何节点 https 模块允许这样做?
【问题讨论】:
看起来这可以通过称为 SNICallback 的东西实现:
https://github.com/nodejs/node/issues/10349#issuecomment-268157842
var certs = {
"safe.myDomain.com": {
key: fs.readFileSync('../SSL/safe/private/key.pem'),
cert: fs.readFileSync('../SSL/safe/certs/cert.pem')
},
"api.myDomain.com": {
key: fs.readFileSync('../SSL/api/private/key.pem'),
cert: fs.readFileSync('../SSL/api/certs/cert.pem')
}
}
var httpsOptions = {
SNICallback: function(hostname, cb) {
var ctx = tls.createSecureContext(certs[hostname])
cb(null, ctx])
}
}
https.createServer(httpsOptions).listen(1443, function() {
console.log('HTTPS server is listening on port 1443')
})
【讨论】: