Ruby SSL\u connect SYSCALL返回=5 errno=0 state=SSLv3读取服务器hello A(OpenSSL::SSL::SSLError)

Ruby SSL\u connect SYSCALL返回=5 errno=0 state=SSLv3读取服务器hello A(OpenSSL::SSL::SSLError),ruby,Ruby,我已经研究了许多类似于这个关于堆栈溢出的问题,现在我正在向ruby gods寻求帮助 通过ruby发出HTTP请求时,我会得到此堆栈跟踪: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/net/http.rb:918:in `connect': SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read server hello A (Open

我已经研究了许多类似于这个关于堆栈溢出的问题,现在我正在向ruby gods寻求帮助

通过ruby发出HTTP请求时,我会得到此堆栈跟踪:

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/net/http.rb:918:in `connect': SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read server hello A (OpenSSL::SSL::SSLError)
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/net/http.rb:918:in `block in connect'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/timeout.rb:66:in `timeout'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/net/http.rb:918:in `connect'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/net/http.rb:862:in `do_start'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/net/http.rb:851:in `start'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/net/http.rb:1367:in `request'
需要注意的一些事项:

我已经尝试在http对象上设置这些属性:

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.ssl_version = :TLSv1
http.ciphers = ['RC4-SHA']
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
我已经试过了

   require 'openssl'
   OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
最后,这个错误只发生在我的一台机器上。我的猜测是,我有一个不同版本的openssl或可能正在使用的一些gem,这是一个不同的版本。两者都是Mac OSX Yosemite 10.10.5

这是机器工作的环境:

*** LOCAL GEMS ***

activesupport (4.2.4, 3.2.22)
addressable (2.3.8)
autoparse (0.3.3)
bigdecimal (1.2.4)
bluecloth (2.2.0)
builder (3.2.2)
bundler (1.6.2)
bundler-unload (1.0.2)
curb (0.8.8)
executable-hooks (1.3.2)
extlib (0.9.16)
faraday (0.9.2)
gem-wrappers (1.2.4)
google-api-client (0.8.4)
google_drive (1.0.1)
googleauth (0.4.2)
hurley (0.2)
i18n (0.7.0)
io-console (0.4.2)
jenkins_api_client (1.4.1)
json (1.8.1)
jwt (1.5.1)
launchy (2.4.3)
little-plugger (1.1.4)
logging (2.0.0)
macaddr (1.7.1)
maruku (0.7.2)
memoist (0.12.0)
mime-types (2.3)
mini_magick (4.2.7)
mini_portile (0.7.0.rc4)
minitest (5.8.1, 4.7.5)
mixlib-shellout (2.2.1)
multi_json (1.11.2)
multi_xml (0.5.5)
multipart-post (2.0.0)
netrc (0.7.7)
nokogiri (1.6.7.rc3)
oauth (0.4.7)
oauth2 (1.0.0)
plist (3.1.0)
polyglot (0.3.5)
psych (2.0.5)
rack (1.6.4)
rake (10.3.2, 10.1.0)
rdoc (4.1.0)
representable (2.3.0)
rest-client (1.7.2)
retriable (2.1.0, 1.4.1)
rubygems-bundler (1.4.4)
rvm (1.11.3.9)
signet (0.6.1)
sqlite3 (1.3.9)
systemu (2.6.4)
terminal-table (1.5.2)
test-unit (2.1.2.0)
thor (0.19.1)
thread_safe (0.3.5)
treetop (1.5.3)
tzinfo (1.2.2)
uber (0.0.15)
unicode (0.4.4.1)
uuid (2.3.7)

here is my version of openssl:

OpenSSL 0.9.8zg 14 July 2015
*** LOCAL GEMS ***

activesupport (3.2.22)
addressable (2.3.8)
autoparse (0.3.3)
bigdecimal (1.2.0)
bluecloth (2.2.0)
builder (3.2.2)
CFPropertyList (2.2.8)
curb (0.8.8)
extlib (0.9.16)
faraday (0.9.2)
google-api-client (0.8.4)
google_drive (1.0.1)
googleauth (0.4.2)
i18n (0.7.0)
io-console (0.4.2)
jenkins_api_client (1.4.1)
json (1.8.1, 1.7.7)
jwt (1.5.1)
launchy (2.4.3)
libxml-ruby (2.6.0)
little-plugger (1.1.4)
logging (2.0.0)
macaddr (1.7.1)
maruku (0.7.2)
memoist (0.12.0)
mime-types (2.3)
mini_portile (0.6.2)
minitest (5.8.1, 4.3.2)
mixlib-shellout (2.2.2)
multi_json (1.11.2)
multi_xml (0.5.5)
multipart-post (2.0.0)
netrc (0.7.7)
nokogiri (1.6.6.2, 1.5.6)
oauth (0.4.7)
oauth2 (1.0.0)
plist (3.1.0)
polyglot (0.3.5)
psych (2.0.0)
rack (1.6.4)
rake (10.3.2, 0.9.6)
rdoc (4.0.0)
rest-client (1.7.2)
retriable (1.4.1)
signet (0.6.1)
sqlite3 (1.3.9, 1.3.7)
systemu (2.6.4)
terminal-table (1.5.2)
test-unit (2.0.0.0)
thor (0.19.1)
thread_safe (0.3.5)
treetop (1.5.3)
tzinfo (1.2.2)
unicode (0.4.4.1)
uuid (2.3.7)

here is my version of openssl: (I tried upgrading to latest, that didnt work either)

OpenSSL 1.0.1g 7 Apr 2014
这是我为不工作的机器设置的环境:

*** LOCAL GEMS ***

activesupport (4.2.4, 3.2.22)
addressable (2.3.8)
autoparse (0.3.3)
bigdecimal (1.2.4)
bluecloth (2.2.0)
builder (3.2.2)
bundler (1.6.2)
bundler-unload (1.0.2)
curb (0.8.8)
executable-hooks (1.3.2)
extlib (0.9.16)
faraday (0.9.2)
gem-wrappers (1.2.4)
google-api-client (0.8.4)
google_drive (1.0.1)
googleauth (0.4.2)
hurley (0.2)
i18n (0.7.0)
io-console (0.4.2)
jenkins_api_client (1.4.1)
json (1.8.1)
jwt (1.5.1)
launchy (2.4.3)
little-plugger (1.1.4)
logging (2.0.0)
macaddr (1.7.1)
maruku (0.7.2)
memoist (0.12.0)
mime-types (2.3)
mini_magick (4.2.7)
mini_portile (0.7.0.rc4)
minitest (5.8.1, 4.7.5)
mixlib-shellout (2.2.1)
multi_json (1.11.2)
multi_xml (0.5.5)
multipart-post (2.0.0)
netrc (0.7.7)
nokogiri (1.6.7.rc3)
oauth (0.4.7)
oauth2 (1.0.0)
plist (3.1.0)
polyglot (0.3.5)
psych (2.0.5)
rack (1.6.4)
rake (10.3.2, 10.1.0)
rdoc (4.1.0)
representable (2.3.0)
rest-client (1.7.2)
retriable (2.1.0, 1.4.1)
rubygems-bundler (1.4.4)
rvm (1.11.3.9)
signet (0.6.1)
sqlite3 (1.3.9)
systemu (2.6.4)
terminal-table (1.5.2)
test-unit (2.1.2.0)
thor (0.19.1)
thread_safe (0.3.5)
treetop (1.5.3)
tzinfo (1.2.2)
uber (0.0.15)
unicode (0.4.4.1)
uuid (2.3.7)

here is my version of openssl:

OpenSSL 0.9.8zg 14 July 2015
*** LOCAL GEMS ***

activesupport (3.2.22)
addressable (2.3.8)
autoparse (0.3.3)
bigdecimal (1.2.0)
bluecloth (2.2.0)
builder (3.2.2)
CFPropertyList (2.2.8)
curb (0.8.8)
extlib (0.9.16)
faraday (0.9.2)
google-api-client (0.8.4)
google_drive (1.0.1)
googleauth (0.4.2)
i18n (0.7.0)
io-console (0.4.2)
jenkins_api_client (1.4.1)
json (1.8.1, 1.7.7)
jwt (1.5.1)
launchy (2.4.3)
libxml-ruby (2.6.0)
little-plugger (1.1.4)
logging (2.0.0)
macaddr (1.7.1)
maruku (0.7.2)
memoist (0.12.0)
mime-types (2.3)
mini_portile (0.6.2)
minitest (5.8.1, 4.3.2)
mixlib-shellout (2.2.2)
multi_json (1.11.2)
multi_xml (0.5.5)
multipart-post (2.0.0)
netrc (0.7.7)
nokogiri (1.6.6.2, 1.5.6)
oauth (0.4.7)
oauth2 (1.0.0)
plist (3.1.0)
polyglot (0.3.5)
psych (2.0.0)
rack (1.6.4)
rake (10.3.2, 0.9.6)
rdoc (4.0.0)
rest-client (1.7.2)
retriable (1.4.1)
signet (0.6.1)
sqlite3 (1.3.9, 1.3.7)
systemu (2.6.4)
terminal-table (1.5.2)
test-unit (2.0.0.0)
thor (0.19.1)
thread_safe (0.3.5)
treetop (1.5.3)
tzinfo (1.2.2)
unicode (0.4.4.1)
uuid (2.3.7)

here is my version of openssl: (I tried upgrading to latest, that didnt work either)

OpenSSL 1.0.1g 7 Apr 2014
OpenSSL 0.9.8zg 2015年7月14日

不要被OpenSSL版本中最近的日期所蒙蔽。 Mac附带了一个陈旧的OpenSSL版本,该版本无法执行TLS 1.1和TLS 1.2,并且不支持任何更新的密码,但它对这个旧版本应用了安全修复。鉴于您的问题缺乏再现问题的详细信息,我猜测服务器只需要一个新的TLS版本或一些较新的密码


您可以检查公共https服务器的行为,其中还显示服务器支持的SSL协议版本和密码。它还显示了各种客户端是否会出现问题,包括您使用的OpenSSL版本0.9.8。

解决了这个问题。我有一个旧版本的ruby(2.0.0),我升级到了2.1.2,工作起来很神奇。不确定ruby 2.0.0有什么导致openssl抛出该错误。在我看来,这是非常无用的错误消息。

这可能是由超时错误引起的吗?我在想,在我的ruby堆栈跟踪中,我看到了这个错误,它通过了timeout.rb文件,只是一个猜测

error=SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read finished A
/Users/Ben/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/net/http.rb:920:in `connect'
/Users/Ben/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/net/http.rb:920:in `block in connect'
/Users/Ben/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/timeout.rb:76:in `timeout'
/Users/Ben/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/net/http.rb:920:in `connect'
/Users/Ben/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/net/http.rb:863:in `do_start'
/Users/Ben/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/net/http.rb:852:in `start'
/Users/Ben/.rvm/gems/ruby-2.1.5@caredox/gems/rest-client-1.8.0/lib/restclient/request.rb:413:in `transmit'
/Users/Ben/.rvm/gems/ruby-2.1.5@caredox/gems/rest-client-1.8.0/lib/restclient/request.rb:176:in `execute'
/Users/Ben/.rvm/gems/ruby-2.1.5@caredox/gems/rest-client-1.8.0/lib/restclient/request.rb:41:in `execute'
/Users/Ben/.rvm/gems/ruby-2.1.5@caredox/gems/rest-client-1.8.0/lib/restclient.rb:65:in `get'
您可以尝试使用RestClient lib为我调整超时设置

RestClient::Request.execute(method: :get, url: url,
                            timeout: 30,
                            headers: {:accept => :json,
                                       :Authorization =>access_token_header()}

在这种情况下,
OpenSSL::SSL::VERIFY_PEER
是一个常量,因此无法分配给。相反,一个值得尝试的选项是
http.verify\u mode=OpenSSL::SSL::verify\u NONE
,在
Net::http.new
后面的行中,实际上我也尝试过。让我更新我的问题。