加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby:SSL_connect SYSCALL返回= 5 errno = 0 state =未知状态(O

发布时间:2020-12-16 20:50:04 所属栏目:百科 来源:网络整理
导读:这个错误的变种已经发布到各地,但没有一个解决方案似乎适合我. 我正在运行ruby 2.2.2p95(2015-04-13修订版50295)[x86_64-linux]和 OpenSSL 1.0.1k 2015年1月8日. 运行以下内容: require 'net/http'require 'openssl'url = 'https://ntpnow.com/'uri = URI.p
这个错误的变种已经发布到各地,但没有一个解决方案似乎适合我.

我正在运行ruby 2.2.2p95(2015-04-13修订版50295)[x86_64-linux]和
OpenSSL 1.0.1k 2015年1月8日.

运行以下内容:

require 'net/http'
require 'openssl'

url = 'https://ntpnow.com/'
uri   = URI.parse(url)
http = Net::HTTP.new(uri.host,uri.port)
http.use_ssl = true
http.ssl_version = :TLSv1
http.get(uri.path)

转储此跟踪:

/usr/local/lib/ruby/2.2.0/net/http.rb:923:in `connect': SSL_connect SYSCALL returned=5 errno=0 state=unknown state (OpenSSL::SSL::SSLError)
    from /usr/local/lib/ruby/2.2.0/net/http.rb:923:in `block in connect'
    from /usr/local/lib/ruby/2.2.0/timeout.rb:74:in `timeout'
    from /usr/local/lib/ruby/2.2.0/net/http.rb:923:in `connect'
    from /usr/local/lib/ruby/2.2.0/net/http.rb:863:in `do_start'
    from /usr/local/lib/ruby/2.2.0/net/http.rb:852:in `start'
    from /usr/local/lib/ruby/2.2.0/net/http.rb:1375:in `request'
    from /usr/local/lib/ruby/2.2.0/net/http.rb:1133:in `get'
    from bin/ntpnow_test.rb:9:in `<main>'

从浏览器导航到该站点显示证书似乎没问题. Curl也不会产生任何错误.

另外,当我尝试使用Ruby 1.9.3时,似乎可行.但是,如果我能找到解决方案,我不会倾向于降级Ruby版本.

你能告诉我导致这个问题究竟发生了什么变化吗?

更新:

斯蒂芬的回答和解释如下.供将来参考,以下是诊断此问题的方法.

>首先确定服务器支持哪些密码.运行命令nmap –script ssl-enum-ciphers ntpnow.com.找到列出支持的密码的部分.
>确定您必须作为http.ciphers的一部分传递的密钥.运行openssl密码.这将吐出一个:分隔的密码列表.找到与步骤1中的结果匹配的那个.

解决方法

这看起来像我在 https://stackoverflow.com/a/29611892/3081018中回答的完全相同的问题.同样的问题:服务器只能执行TLS 1.0并且仅支持DES-CBC3-SHA作为密码.在最近的ruby版本中,默认情况下不再启用此密码.要连接此密码,请尝试在代码中明确指定密码:
http.ssl_version = :TLSv1
http.ciphers = ['DES-CBC3-SHA']

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读