2013-03-14 87 views
54

我使用node-request模块,定期向一组URL发送GET请求,并且有时会在某些站点上获取下面的错误。节点请求 - 获取错误“SSL23_GET_SERVER_HELLO:未知协议”

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

的问题是,我不总是或总是得到这个错误的一些网址,只是有时。另外,“strictSSL: false”不能忽略。

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

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

任何帮助表示赞赏。

+0

当你重试相同的URL几秒钟后会发生什么? – generalhenry 2013-03-14 23:10:42

+1

几秒钟后,我没有得到任何错误。这些错误有时只会返回。 – umutm 2013-03-15 08:54:54

回答

12

这完全是我的错。

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

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

+6

该错误看起来更像是将http请求发送到http端口? – 2013-05-24 12:10:26

+1

错误消息清楚地显示您正在使用HTTPS,即SSL,并且服务器向您发送了一个'未知协议'消息,同样也在SSL中。您不会对数据库说HTTP或HTTPS。答案没有意义。 – EJP 2016-10-14 20:28:06

4

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

+0

虽然错误听起来像这样,但不确定是否是这种情况,考虑到相同的URL有时会返回thiş错误。 顺便说一下,在节点请求中,有没有办法同时启用SSLv2和SSLv3?或者,我应该在Wİndow操作系统级别上执行此操作吗? – umutm 2013-03-15 08:56:12

+0

如果该网站是一个农场,并且在不同的元素中存在不同的SSL级别,那么可能会发生这种情况:这将是一个疯狂的设置,但如果SSLv2完全已经疯了。我无法为您提供关于node.js的建议,但它清楚地使用了OpenSSL,并且OpenSSL具有高度可配置性。尽管我会首先调查有问题的网站,但您不希望在没有真正理由的情况下启用SSLv2。 – EJP 2013-03-16 00:40:19

+1

仍然无法准确识别问题。完成后,我将更新此条目。 – umutm 2013-03-26 11:48:28

-3

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

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(); 
} 
88

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

+0

刚刚有这个问题与码头,在我的码头组成:端口: -“443:80” – IAmJulianAcosta 2016-10-09 03:55:16

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

并没有解决我的问题,但有用的信息tho – keinabel 2015-06-23 12:18:11

+0

SSLv3是危险的和过时的...而是使用secureProtocol:“TLSv1_method “ – 2016-09-09 16:53:09

2

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

0

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

它在工作之前,没有任何连接配置发生变化。 重新启动服务器解决了我的问题。

0

我有这个问题(每个软件包有403个错误),我发现在互联网上没有什么好的解决方案。 我的用户文件夹中的.nprmc文件错误且被误解。 我改变了这种npmrc线从

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

到:

proxy = XX.XX.XXX.XXX:XXXX 
相关问题