我想在不重新启动的情况下在node.js http2服务器上更新ssl证书(以避免停机)。我也不想使用任何第三方模块来完成这项工作。仅纯nodejs。 有可能吗?
现在,当证书即将到期时,我只是重新启动了脚本。
const https = require('http2');
const server = https.createSecureServer({
ca: fs.readFileSync('chain.pem'),
cert: fs.readFileSync('cert.pem', 'utf8'),//fullchain
key: fs.readFileSync('privkey.pem', 'utf8'),
allowHTTP1: true,
},
我希望能够监视证书文件是否已更新(例如,使用fs.watch()),以及即时更新http2服务器中的证书...
答案 0 :(得分:1)
是的,您只能使用sniCallBack():
const https = require('http2');
const server = https.createSecureServer({
ca: fs.readFileSync('chain.pem'),
cert: fs.readFileSync('cert.pem', 'utf8'),//fullchain
key: fs.readFileSync('privkey.pem', 'utf8'),
allowHTTP1: true,
SNICallback: (servername, cb) => {
// here you can even change up the `SecureContext`
// based on `servername` if you want
cb(null, server);
}
},
这可能有点过时,所以请尝试一下,问我是否有任何问题,因为我发现here的解决方案源代码有些不同。
答案 1 :(得分:0)
正如Jake所提到的,setSecureContext()发挥了神奇作用。 似乎可以在不断开当前连接的情况下更新证书。 像这样:
setTimeout(function () {server.setSecureContext({
ca: fs.readFileSync('chain.pem'),
cert: fs.readFileSync('cert.pem', 'utf8'),//fullchain
key: fs.readFileSync('privkey.pem', 'utf8')
})},86400000)