首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误: Heroku上的自签名证书节点12应用程序

错误: Heroku上的自签名证书节点12应用程序
EN

Stack Overflow用户
提问于 2020-10-06 11:59:33
回答 1查看 518关注 0票数 6

我在heroku上有个应用程序。我把它的版本从节点6升级到了节点12。在本地环境升级到12之后,它开始给我带来跟随错误。

代码语言:javascript
运行
复制
Error: self signed certificate

在本地环境中,我使用以下命令忽略了此错误。

代码语言:javascript
运行
复制
NODE_TLS_REJECT_UNAUTHORIZED=0

但在生产环境方面,这对我来说不是一种选择。我正在使用heroku自动证书管理来满足我的SSL需求,它在Node 12之前运行得很好。

理想情况下,它不应该给出这个错误,因为在生产服务器上,我通过使用heroku自动证书管理进行了正确的证书设置。

我的证书是有效的,但是我在日志中看到了自签名证书错误。谢谢你的帮助。

错误的堆栈跟踪如下。

代码语言:javascript
运行
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2020-10-28 08:43:02

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

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
`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()`][]:
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64225381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档