Javascript 节点请求-获取错误“;SSL23“获取”服务器“你好:未知协议”;

Javascript 节点请求-获取错误“;SSL23“获取”服务器“你好:未知协议”;,javascript,node.js,ssl,request,Javascript,Node.js,Ssl,Request,我正在使用这个模块,定期向一组URL发送GET请求,有时在某些站点上会出现下面的错误 Error:29472:Error:140770FC:SSL例程:SSL23\u GET\u SERVER\u HELLO:unknown protocol:openssl\SSL\s23\u clnt.c:683 问题是,我不总是或总是在一些URL上看到这个错误,只是有时候。此外,不能用“strictSSL:false”忽略它 我已经了解到这可能与我使用错误的协议(SSLv2、SSLv3、TLS…)发送SSL

我正在使用这个模块,定期向一组URL发送GET请求,有时在某些站点上会出现下面的错误

Error:29472:Error:140770FC:SSL例程:SSL23\u GET\u SERVER\u HELLO:unknown protocol:openssl\SSL\s23\u clnt.c:683

问题是,我不总是或总是在一些URL上看到这个错误,只是有时候。此外,不能用“
strictSSL:false
”忽略它

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

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


非常感谢您的帮助。

一些站点正在使用SSLv2,或者至少发送了一个SSLv2服务器hello,而您的客户端不使用或未配置为使用SSLv2。你需要在这里做出决策。SSLv2在几年前就应该从地球表面消失了,而仍然使用它的地点是不安全的。然而,如果你要和他们交谈,你只需要在你的终端启用它,如果可以的话。如果可以的话,我会向网站所有者投诉。

这完全是我的错

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


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

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

我之所以出现此错误,是因为我使用的是
require('https')
,而我本应使用
require('http')
我在连接到Amazon RDS时出现此错误。我检查了50%CPU使用率的服务器状态,当时它是一个开发服务器,没有人在使用它

var https = require('https');
https.globalAgent.options.secureProtocol = 'SSLv3_method';
它以前工作过,连接配置中没有任何更改。 重新启动服务器为我解决了这个问题。

我遇到了这个问题(每个软件包都有403个错误),但我在互联网上找不到什么好办法来解决它。 我的
.npmrc
文件在我的用户文件夹中有错误和误解。
我把这条npmrc线从

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

所以简而言之,

vi ~/.proxy_info

export http_proxy=<username>:<password>@<proxy>:8080
export https_proxy=<username>:<password>@<proxy>:8080

source ~/.proxy_info
vi~/.proxy\u信息
导出http_代理=:@:8080
导出https_proxy=:@:8080
来源~/.proxy_信息
希望这有助于匆忙中的人:)

在我的情况下(网站SSL使用ev曲线)通过添加此选项解决了SSL的问题ecdhCurve:“p-521:p-384:p-256”

request({ url, 
   agentOptions: { ecdhCurve: 'P-521:P-384:P-256', }
}, (err,res,body) => {
...

JFYI,也许这会帮助某人

我在rocketchat上使用它通过企业代理与我的gitlab通信时遇到了这个错误


因为,使用的是https://:8080,但实际上,它对http://:8080有效

几秒钟后重试相同的URL时会发生什么?几秒钟后,我没有收到任何错误。虽然错误听起来像这样,但考虑到相同的URL有时会返回此错误,不确定是否是这种情况。顺便问一下,在节点请求中,是否有一种方法可以同时启用SSLv2和SSLv3?或者,我应该在Wİndow OS级别上这样做吗?如果站点是一个服务器场,并且在不同的元素中有不同的SSL级别,那么可能会发生这种情况:这将是一种疯狂的设置,但是如果有SSLv2,那么它已经疯狂了。我不能就node.js向您提供建议,但它显然在幕后使用OpenSSL,而且OpenSSL是高度可配置的。不过,我会先调查有问题的站点,如果没有很好的理由,你不想在你的终端启用SSLv2。仍然无法准确地确定问题。完成后,我将更新此条目。@umutm 4年后,这仍然是一个问题。得到相同的错误。@Dojo从节点v4+开始,我建议使用节点的默认值(SSLv23_方法),因为它在我的经验中具有最大的兼容性。另外,Nodejs中会放弃对SSLv3的支持,因此,如果被请求的网站需要SSLv3,这可能就是问题所在。错误看起来更像是将https请求发送到http端口?错误消息清楚地显示您正在使用https,即SSL,并且服务器也在SSL中向您发送了“未知协议”消息。您对数据库既不说HTTP也不说HTTPS。答案没有意义。没有解决我的问题,但有用的信息认为Lv3是危险和过时的。。。相反,使用secureProtocol:“TLSv1_方法”刚刚与docker发生了这个问题,在我的docker中有:ports:-“443:80”非常感谢!我快疯了。这也是问题所在.net core(linux)(但在java中工作):export http_proxy=export https_proxy=这并不能解释该建议可以解决问题的原因。
request({ url, 
   agentOptions: { ecdhCurve: 'P-521:P-384:P-256', }
}, (err,res,body) => {
...