gpt4 book ai didi

node.js - 错误 : self signed certificate Node 12 app on Heroku

转载 作者:行者123 更新时间:2023-12-03 12:11:43 26 4
gpt4 key购买 nike

我在heroku上有一个应用程序。我将其版本从 Node 6 升级到 Node 12。
在本地环境升级到 12 后,它开始给我跟随错误。

Error: self signed certificate
在本地环境中,我通过使用以下命令忽略了此错误。
NODE_TLS_REJECT_UNAUTHORIZED=0
但这不是我在生产环境中的选择。
我正在使用 heroku 自动化证书管理 满足我的 SSL 需求,它在 Node 版本 12 之前都可以完美运行。
理想情况下,它不应该出现该错误,因为在生产服务器上,我使用 设置了正确的证书。 heroku 自动化证书管理
我的证书有效,但我看到 自签名证书错误 在我的日志中。
感谢您的帮助。
错误的堆栈跟踪如下。
Error: self signed certificate (Most recent call first)
at TLSSocket.onConnectSecure (_tls_wrap.js line 1501 col 33)
at TLSSocket.emit (events.js line 315 col 19)
at TLSSocket.EventEmitter.emit (domain.js line 483 col 11)
at TLSSocket._finishInit (_tls_wrap.js line 936 col 7)
at TLSWrap.ssl.onhandshakedone (_tls_wrap.js line 710 col 11)
at Socket.ondata (internal/js_stream_socket.js line 72 col 21)
at Socket.emit (events.js line 315 col 19)
at Socket.EventEmitter.emit (domain.js line 483 col 11)
at addChunk (_stream_readable.js line 295 col 11)
at readableAddChunk (_stream_readable.js line 271 col 8)

最佳答案

首先,此错误发生在出站连接上,而不是入站连接上。
之所以发生这种情况,是因为我的 Node 团队在发布版本 12 时发生了代码更改。
11 版本的还好。让我分享一下细节。
问题是 Node.js(不再?)默认发送 SNI 记录。你可以像这样解决它:

const options = {
port: 993,
host: 'imap.gmail.com',
servername: 'imap.gmail.com', // SNI
};
tls.connect(options, () => { /* ... */ });
除非您通过 -servername imap.gmail.com,否则它不会验证。
(GMail 帮助发回了带有颁发者的证书:OU =“未提供 SNI;请修复您的客户端。”,CN = invalid2.invalid ^^)
以上信息来源
https://github.com/nodejs/node/issues/28167
注意:OpenSSL 中没有任何变化,但在 node.js 中没有任何变化。
Node 团队为它添加了警告。
https://github.com/nodejs/node/commit/b8ea47162d84ade96698cb45a0de5c0dd9959251
`tls.connect()` returns a [`tls.TLSSocket`][] object.

Unlike the `https` API, `tls.connect()` does not enable the
SNI (Server Name Indication) extension by default, which may cause some
servers to return an incorrect certificate or reject the connection
altogether. To enable SNI, set the `servername` option in addition
to `host`.

The following illustrates a client for the echo server example from
[`tls.createServer()`][]:

关于node.js - 错误 : self signed certificate Node 12 app on Heroku,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64225381/

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