我在heroku上有个应用程序。我把它的版本从节点6升级到了节点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)
发布于 2020-10-28 08:43:02
首先,此错误发生在出站连接,而不是入站连接。发生这种情况是因为我的节点团队在发布版本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 =失效2无效^^)
以上信息来源https://github.com/nodejs/node/issues/28167
注意:除了节点之外,OpenSSL中没有任何变化。
节点团队已经为它添加了一个警告。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()`][]:
https://stackoverflow.com/questions/64225381
复制相似问题