节点请求 – 获取错误“SSL23_GET_SERVER_HELLO:未知协议”

我正在使用节点请求模块,定期向一组URL发送GET请求,有时在某些站点上获取下面的错误。

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

问题是,我不总是或总是在一些url,只是有时候得到这个错误。 而且,“ strictSSL: false ”也不能忽略。

我读过,这可能与我发送SSL请求与错误的协议(SSLv2,SSLv3,TLS ..)。 但这并不能解释为什么它不规律地发生。

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

任何帮助表示赞赏。

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

这完全是我的错。

我正在使用标准节点http.request的一部分代码应该只发送请求到http地址。 看起来像db有一个单一的https地址,这是随机查询的时间间隔。

简单地说,我试图发送一个http请求到https。

有些站点正在讲SSLv2,或者至less发送一个SSLv2服务器 – 你好,而你的客户端不会说话,或者没有configuration为说话,SSLv2。 你需要在这里做一个决策。 几年前,SSLv2应该从地球表面消失,而仍然使用SSLv2的站点是不安全的。 但是,如果你需要和他们交谈,只要你愿意,你只需要在你的最后启用它。 如果可以的话,我会向网站所有者抱怨。

 var https = require('https'); https.globalAgent.options.secureProtocol = 'SSLv3_method'; 

我得到这个错误,因为我正在使用require('https') ,我应该使用require('http')

连接到Amazon RDS时出现此错误。 我检查了服务器状态50%的CPU使用率,而它是一个开发服务器,没有人使用它。

它在以前工作,连接configuration没有任何改变。 重新启动服务器解决了我的问题。

这听起来像你只需要有一些重试逻辑,所以间歇性的错误不会挂断你。

 function faultTolerantRequest (url, trys, retryTime, cb) { var attempts = 0; function requestFinished (err, res, body) { if (err) { if (attempts < trys) { return setTimeout(tryRequest, retryTime); } return cb(err); } return cb(err, res, body); } function tryRequest () { attempts++; return request(url, requestFinished); } return tryRequest(); }