繁体   English   中英

是否可以在不重新启动服务器的情况下更新 ssl 证书?

[英]Is it posible to update ssl cert without server restarting?

我想在不重新启动的情况下更新 node.js http2 服务器上的 ssl 证书(以避免任何停机时间)。 此外,我不想在这项工作中使用任何 3rd 方模块。 只有纯 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 服务器中的证书......

正如 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)

是的,您可以只使用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);
  }
},

这可能有点过时,所以尝试一下并询问我是否有任何不起作用,因为我在这里找到的解决方案源代码有点不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM