![](/img/trans.png)
[英]OpenSSL::SSL::SSLError in UsersController#create (SSL_connect returned=1 errno=0 state=unknown state: unknown protocol)
[英]OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=unknown state: unknown protocol
关于这个问题,我已经关注过很多帖子,而且他们没有帮助。 我正在尝试使用最简单的irb命令进行连接:
require 'open-uri'
open ('https://aristo4stu3.bgu.ac.il')
奇怪的是,对于我尝试的任何其他https uri,它工作正常(即https://google.com )。
出于调试目的,我甚至尝试使用以下方法禁用SSL验证:
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
这似乎也没有帮助。
我的设置是(在AWS上):
$ rvm -v
rvm 1.21.3 (stable) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]
$ ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 13.04
Release: 13.04
Codename: raring
完整日志:
2.0.0-p247 :001 > require 'open-uri'
=> true
2.0.0-p247 :002 > open('https://aristo4stu3.bgu.ac.il')
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=unknown state: (null)
from /home/ubuntu/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:918:in `connect'
from /home/ubuntu/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:918:in `block in connect'
from /home/ubuntu/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/timeout.rb:52:in `timeout'
from /home/ubuntu/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:918:in `connect'
from /home/ubuntu/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:862:in `do_start'
from /home/ubuntu/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:851:in `start'
from /home/ubuntu/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/open-uri.rb:313:in `open_http'
from /home/ubuntu/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/open-uri.rb:708:in `buffer_open'
from /home/ubuntu/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/open-uri.rb:210:in `block in open_loop'
from /home/ubuntu/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/open-uri.rb:208:in `catch'
from /home/ubuntu/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/open-uri.rb:208:in `open_loop'
from /home/ubuntu/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/open-uri.rb:149:in `open_uri'
from /home/ubuntu/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/open-uri.rb:688:in `open'
from /home/ubuntu/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/open-uri.rb:34:in `open'
from (irb):2
from /home/ubuntu/.rvm/rubies/ruby-2.0.0-p247/bin/irb:16:in `<main>'
问题似乎是您的目标站点aristo4stu3.bgu.ac.il
对SSL / TLS握手很挑剔。 使用以下OpenSSL命令和不同版本的OpenSSL得到两个不同的结果:
openssl s_client -connect aristo4stu3.bgu.ac.il:443
这确实与OS X 10.7.5上的OpenSSL 0.9.8x版本相关联。 但是,它不连接使用OpenSSL 1.0.1e -在这种情况下,服务器只需关闭连接(通过发送关闭通知警告)收到客户机问候之后。
我使用Wireshark捕获数据包,这两个版本发送的差异是0.9.8x通过TLS 1.0发送SSLv2客户端Hello广告支持,而1.0.1e通过TLS 1.2发送TLSv1客户端Hello广告支持。
如果我告诉1.0.1e不要使用TLS:
openssl s_client -connect aristo4stu3.bgu.ac.il:443 -no_tls1
这通过SSL 3.0成功连接到SSLv3客户端Hello广告支持。
顺便说一句,我的本地ruby确实与open-uri
成功连接到您的站点:
$ irb
>> require 'open-uri'
=> true
>> open('https://aristo4stu3.bgu.ac.il')
=> #<StringIO:0x10271fa90>
>> require 'openssl'
=> false
>> OpenSSL::OPENSSL_VERSION
=> "OpenSSL 0.9.8r 8 Feb 2011"
>>
所以指出的方法似乎是:
open-uri
模块似乎没有选项来设置用于通信的SSL / TLS版本。 如果您无法修改服务器,则可能需要使用其他模块或库来建立连接,或者可能找到修补openssl
模块的方法,以便它使用不同的Client Hello。
如果你在Mac上并且它是OSX证书问题(我的情况就是这样),你可以通过运行来修复它:
rvm osx-ssl-certs update all
我在这里找到了一个很好的问题解决方案和解决方案。 http://blog.55minutes.com/2012/05/tls-error-with-ruby-client-and-tomcat-server/
解决问题的TLDR代码段。
http = Net::HTTP.new(host, port)
http.use_ssl = true
http.ssl_version = :SSLv3
http.start { ... }
我收到了相同的消息,结果发现我在非SSL连接上设置了http.use_ssl = true
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.