节点请求 - 出现错误“SSL23_GET_SERVER_HELLO:未知协议”

IT技术 javascript node.js ssl request
2021-02-01 01:10:32

我正在使用节点请求module,定期向一组 URL 发送 GET 请求,有时,在某些站点上会收到以下错误。

Error: 29472:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:openssl\ssl\s23_clnt.c:683

问题是我不会总是或总是在某些 URL 上收到此错误,只是有时。此外,它不能被“ strictSSL: false忽略

我读到这可能与我使用错误的协议(SSLv2、SSLv3、TLS ..)发送 SSL 请求有关。但这并不能解释为什么它会不规则地发生。

顺便说一句,我在 Win 2008 服务器上运行 nodejs。

任何帮助表示赞赏。

6个回答

当您通过错误的端口(例如 80)请求 HTTPS 资源时,您将收到此类错误消息。因此请确保您在请求选项中指定了正确的端口 443。

docker 刚遇到这个问题,在我的 docker-compose: 端口:-“443:80”
2021-03-25 01:10:32

这完全是我的错。

我在代码的一部分上使用了标准节点 http.request,该代码应该只向 http 地址发送请求。似乎 db 有一个 https 地址,该地址以随机间隔进行查询。

简单地说,我试图向 https 发送 http 请求。

该错误看起来更像是将 https 请求发送到 http 端口?
2021-03-25 01:10:32
错误消息清楚地表明您正在使用 HTTPS,即 SSL,并且服务器向您发送了一条“未知协议”消息,同样采用 SSL。您不会对数据库使用 HTTP 或 HTTPS。回答没有意义。
2021-04-07 01:10:32

我收到此错误是因为我require('https')在本应使用的地方使用require('http').

一些站点使用 SSLv2,或至少发送 SSLv2 服务器问候,而您的客户端不使用或未配置为使用 SSLv2。您需要在此处做出政策决定。SSLv2 早在几年前就应该从地球上消失了,仍然使用它的站点是不安全的。但是,如果您必须与他们交谈,则只需在最后启用它(如果可以)。如果可以的话,我会向网站所有者投​​诉。

@Dojo 从 Node v4+ 开始,我建议使用 Node 的默认值 (SSLv23_method),因为它在我的经验中具有最大的兼容性。此外,Nodejs 中不再支持 SSLv3,因此,如果被请求的网站需要 SSLv3,那可能就是问题所在。
2021-03-22 01:10:32
@umutm 4 年过去了,这仍然是一个问题。得到同样的错误。
2021-04-02 01:10:32
虽然错误听起来像这样,但不确定是否是这种情况,考虑到相同的 URL 有时会返回此错误。顺便说一句,在节点请求中,有没有办法同时启用 SSLv2 和 SSLv3?或者,我应该在 Wİndow 操作系统级别执行此操作吗?
2021-04-08 01:10:32
仍然无法准确识别问题。完成后,我将更新此条目。
2021-04-09 01:10:32
如果站点是一个农场并且在不同元素中有不同的 SSL 级别,则可能会发生这种情况:这将是一个疯狂的设置,但如果有 SSLv2,它已经很疯狂了。我无法为您提供有关 node.js 的建议,但它显然在幕后使用 OpenSSL,并且 OpenSSL 是高度可配置的。不过,我会先调查有问题的网站,您不希望在没有充分理由的情况下最终启用 SSLv2。
2021-04-12 01:10:32

我遇到了这个问题(每个包都有 403 错误),我在互联网上找不到什么好的解决方法。 我的.npmrc我的用户文件夹内的文件是错误和误解。 我改变了这个 npmrc 行

proxy=http://XX.XX.XXX.XXX:XXX/

到 :

proxy = XX.XX.XXX.XXX:XXXX
太感谢了!我快疯了。这也是 .net core 的问题(linux)(但适用于 java): export http_proxy= xxxx:8888 export https_proxy= xxxx:8888
2021-03-31 01:10:32