【问题标题】:Error connecting to remote server via https from nodejs?从 nodejs 通过 https 连接到远程服务器时出错?
【发布时间】:2015-07-23 18:53:18
【问题描述】:

我知道已经有针对此类问题的响应,但直到现在解决方案都对我不起作用。

我有一个像代理一样工作的 nodejs 服务器。我需要通过 https 连接到服务器。我使用带有以下选项的节点的 https 模块:

var openidmConnection = {
  hostname: 'remoteserver',
  port: 8443,
  path: 'path/to/resource',
  method: 'GET',
  headers: headersObject,
  key: private_pem_key,
  requestCert: connectionOptions.requestCert,
  rejectUnauthorized: false,
  agent: false,
  secureProtocol: 'SSLv3_method',
  secureOptions: 'SSL_OP_NO_SSLv3|SSL_OP_NO_SSLv2',
}

当我使用邮递员测试进行此调用的本地节点服务器时,我收到一条错误消息:

EPROTO 140482007910272:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number

我搜索了一下,发现SSL3_GET_RECORD:wrong version number的错误可能是因为我试图连接到错误的端口,或者主机不支持https,或者使用http模块而不是https。这些都不适用于我,因为我验证了主机支持https,端口是8443,模块是https。我正在使用节点 0.12.6

【问题讨论】:

  • 为什么投反对票?至少告诉我将来避免投票的原因。我是堆栈溢出的新手。

标签: node.js ssl


【解决方案1】:

您正在强制使用 SSLv3,而远程方不支持它。考虑到 SSLv3(和 SSLv2)存在的安全问题,这并不奇怪。尝试设置 secureProtocol: 'TLSv1_method' 来强制使用 TLSv1。

您也可以删除 requestCert,因为这是一个服务器端选项。

【讨论】:

  • 感谢您的回答,我将secureProtocol 更改为'TLSv1_method',现在我遇到错误socket hang up,代码为ECONNRESET。知道为什么或如何处理这个问题吗?
  • 你试过不设置key: private_pem_key吗?路径是否正确(通常以正斜杠开头)?你能用相同的设置成功地卷曲服务器吗?
  • 路径是对的,是/info/login,我也尝试不带key: private_pem_key和不带requestCertrejectUnauthorized选项,在ubuntu 14.04中使用openssl可以成功连接到服务器.该命令类似于openssl s_client -port 8443 -key private_pem_key -host remoteserver。我要注意的是,如果执行不带-key private_pem_key参数的命令,我也可以连接。
猜你喜欢
  • 2021-03-03
  • 2012-09-06
  • 2017-02-03
  • 2018-09-22
  • 2018-08-16
  • 1970-01-01
  • 2020-06-02
  • 2014-03-01
  • 2021-04-20
相关资源
最近更新 更多