【问题标题】:SSL Error in nodejsnodejs中的SSL错误
【发布时间】:2012-06-18 22:26:02
【问题描述】:

我正在尝试通过节点 https.request() 获取网页。这样做会导致我的代码记录错误。使用节点请求模块的结果是一样的:

请求问题:140398870042432:error:140773F2:SSL 例程:SSL23_GET_SERVER_HELLO:sslv3 警报意外消息:s23_clnt.c:658:

以下表示使用了错误的 SSL 版本,但我找不到更改版本的方法:curl error: "sslv3 alert unexpected message"。从我的终端使用 curl 会返回响应,就像在我的浏览器中点击 URL(它是一个登录页面)一样。我的代码如下。

var request = require('request')
request.get("https://icmserver.wit.ie/balance", function(err, res, body) {
    if (err) {
        return console.log(err)
    }
    return body;
});

有人知道这里会发生什么吗?

【问题讨论】:

  • 您能告诉我们您使用的确切代码吗?如果我们能重现这个问题会有所帮助。
  • 谢谢 Len,这是我的代码: var request = require('request') request.get("icmserver.wit.ie/balance", function(err, res, body){ if(err){ return console.log(err) } 返回正文; });它不断记录 SSL 错误。
  • 我注意到,当我在 Chrome 中访问该站点时,我得到:“必须使用 SSL 3.0 重试连接。这通常意味着服务器正在使用非常旧的软件并且可能有其他安全问题。”可能 Node 的内置 SSL 不支持 SSL 3。
  • 我也是这么想的。花了很长时间寻找更改节点 SSL 版本的方法,但没有运气。感谢您的帮助:)

标签: node.js ssl request


【解决方案1】:

尝试在您提出的请求中使用options = { secureProtocol: 'SSLv3_method' }

【讨论】:

  • 感谢 SuperSharabi 成功,请求现在正在返回数据!
  • 澄清:secureProtocol 选项进入新的 https.Agent。
  • 澄清一下,SSLv3坏了,千万不要用。
【解决方案2】:

我们遇到了同样的问题。默认情况下,请求使用 https.globalAgent。所以我们在脚本顶部附近添加了代码。

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

突然间一切正常。

【讨论】:

  • 我没想到这会起作用,因为我认为在不同的地方需要 https 因此不会有相同的 globalAgent,但可惜它已经起作用了。谢谢!
  • 我得到了错误 SSL23_GET_SERVER_HELLO:unknown protocol 并用谷歌搜索了我的手指血腥,直到我终于找到了这个解决方案。希望重新索引此内容,以便其他人更快地获取信息。
  • 我不知道为什么这个答案有更多的选票。全局设置协议可能很危险。如果接受的答案对您不起作用,而不是全局设置协议,请仔细阅读文档以了解如何设置:nodejs.org/api/https.html#https_https_request_options_callback
  • 我认为允许 nodeJS 使用 SSLv2 进行通信更危险。
【解决方案3】:

如果网站使用ECDH 曲线,对我来说,只有添加此选项才能解决问题:

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

JFYI,也许这会对某人有所帮助。

【讨论】:

  • 这看起来不像答案,更多的是建议,您可以为此类解决方案提供 cmet。
猜你喜欢
  • 1970-01-01
  • 2020-05-18
  • 2015-09-06
  • 2020-02-09
  • 2021-09-03
  • 2020-06-23
  • 2023-04-07
  • 2011-03-18
  • 2017-09-03
相关资源
最近更新 更多