Ruby:SSL_connect SYSCALL返回= 5 errno = 0 state =未知状态(OpenSSL :: SSL :: SSLError)
这个错误的变种已经发布到各地,但没有一个解决方案似乎适合我。
我正在运行ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]
和OpenSSL 1.0.1k 8 Jan 2015
。
运行以下内容:
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 `'
从浏览器导航到该站点显示证书似乎没问题。 Curl也不会产生任何错误。
另外,当我尝试使用Ruby 1.9.3时,似乎可行。 但是,如果我能找到解决方案,我不会倾向于降级Ruby版本。
你能告诉我导致这个问题究竟发生了什么变化吗?
更新:
斯蒂芬的回答和解释如下。 供将来参考,以下是诊断此问题的方法。
- 首先确定服务器支持哪些密码。 运行命令
nmap --script ssl-enum-ciphers ntpnow.com
。 找到列出支持的密码的部分。 - 确定您必须作为
http.ciphers
一部分传递的http.ciphers
。 运行openssl ciphers
。 这将吐出一个:
分隔的密码列表。 找到与步骤1中的结果匹配的那个。
这看起来与我在https://stackoverflow.com/a/29611892/3081018中回答的问题完全相同。 同样的问题:服务器只能执行TLS 1.0,并且只支持DES-CBC3-SHA作为密码。 在最近的ruby版本中,默认情况下不再启用此密码。 要连接此密码,请尝试在代码中明确指定密码:
http.ssl_version = :TLSv1 http.ciphers = ['DES-CBC3-SHA']
我使用Mechanize,我正在寻找补丁而不是http客户端实例的配置。 这就是我设法做到的方式:
OpenSSL::SSL::SSLContext::DEFAULT_PARAMS[:ciphers] += ':DES-CBC3-SHA'
- SSL_connect SYSCALL返回= 5 errno = 0 state = SSLv2 / v3读取服务器hello A.
- OpenSSL,RVM,Brew,冲突错误
- 使用rubygem访问Shopify API时出现SSL_connect错误
- 来自模数和指数的SSH SubjectPublicKeyInfo
- Net :: HTTP中的服务器名称指示支持?
- 在Windows 7 x86上使用Ruby安装OpenSSL for eventmachine
- 错误:执行gem时…(OpenSSL :: X509 :: StoreError)
- 无法安装gem,因为“未定义的方法`invoke_with_build_args’代表nil:NilClass”
- 无法在OSX上运行带有RVM的Ruby 2.2.3