gpt4 book ai didi

node.js - 如何将新的 SSL 证书和 key 注入(inject)正在运行的 Node http.Server?

转载 作者:太空宇宙 更新时间:2023-11-03 13:33:32 25 4
gpt4 key购买 nike

我正在为 TCP 服务运行一个安全的 websocket 代理。这使用标准的 http.Server 设置如下:

var webserver = http.createServer(                                                                          
{
key: fs.readFileSync(srv.ssl_key),
cert: fs.readFileSync(srv.ssl_cert),
},
function(request, response) {
response.writeHead(404);
response.end();
},
function(err) {
srv.log(err);
}
);

如您所见,我们已经在使用 hilariously undocumented facilities : http.createServer() 的选项和错误处理程序参数。

SSL key 和证书由 LetsEncrypt certbot 定期重新生成。发生这种情况时,我想将新 key 和证书注入(inject)网络服务器,而无需重新生成新 key 和证书或重新初始化我的网络套接字。

还有什么未记录的设施可以让我这样做?

最佳答案

使用SNICallback

实际上,您不应该提供 certkey 而是使用 SNICallback取而代之。

(HTTPS 实际上只是 HTTP 和 TLS 的包装器,因此最好直接查看 TLS 文档以了解任何处理证书的信息)

例如:

function getCerts(servername, cb) {
cb(null, tls.createSecureContext({
key: '...' // privkey.pem
, cert: '...' // cert.pem + '\\r\\n' + chain.pem
}));
}

http.createServer({ SNICallback: getCerts });

重要的是要注意错误被吞没并导致浏览器 tls 连接错误。如果您遇到错误情况,我强烈建议您在 cb(err) 之前使用 console.error(err),因为无法捕获它或知道是什么类型的它是错误的。这是 Node 团队有意做出的决定。

Greenlock会为你做的

这正是我对我编写的 ssl 证书管理器所做的,Greenlock.jsGreenlock for Express.js ,这将:

  • 自动提供 SSL
  • 动态地针对您允许的任何域
  • 自动更新过期证书
  • 热加载较新的证书
  • 存储插件可以处理自定义逻辑,因为它在发行或更新之前运行

它通过 ACME/Let's Encrypt 自动颁发证书,但是,如果您需要更自定义的解决方案,您可以覆盖默认存储插件以始终返回证书,然后它甚至永远不会访问 ACME API。

关于node.js - 如何将新的 SSL 证书和 key 注入(inject)正在运行的 Node http.Server?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47402924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com