2015-07-11 60 views
2

我一直在努力解决这个问题一段时间了。我正尝试使用Rest-Client ruby​​ gem来使用SSL证书来访问API端点。我确信服务器只响应TLSv_1_2和TLSv_1_1,但我似乎无法使其工作。 这是代码的片段:SYSCALL返回= 5 errno = 0状态= SSLv3读取服务器hello A与Ruby RESTful客户端

resource = RestClient::Resource.new(
       endpoint, 
       :ssl_client_cert => OpenSSL::X509::Certificate.new(File.read(config["cert"])), 
       :ssl_client_key => OpenSSL::PKey::RSA.new(File.read(config["key"])), 
       :ssl_version  => :TLSv1_2, 
       :verify_mode  => OpenSSL::SSL::VERIFY_PEER 
      ) 

response = resource.delete(:params => {:name => 'test'}) 

p endpoint + " | " + response.code.to_s 

这就是我得到:

/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:923:in `connect': SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read server hello A (OpenSSL::SSL::SSLError) 
from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:923:in `block in connect' 
from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/timeout.rb:74:in `timeout' 
from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:923:in `connect' 
from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:863:in `do_start' 
from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:852:in `start' 
from /usr/local/rvm/gems/ruby-2.2.1/gems/rest-client-1.8.0/lib/restclient/request.rb:413:in `transmit' 
from /usr/local/rvm/gems/ruby-2.2.1/gems/rest-client-1.8.0/lib/restclient/request.rb:176:in `execute' 
from /usr/local/rvm/gems/ruby-2.2.1/gems/rest-client-1.8.0/lib/restclient/request.rb:41:in `execute' 
from /usr/local/rvm/gems/ruby-2.2.1/gems/rest-client-1.8.0/lib/restclient 
from test.rb:47:in `<main>' 

我一直在看this了一段时间,但它并没有太大的帮助。

+0

您是否尝试过使用常规的'网/ http' STDLIB?我会尽力让它工作,然后将其切换到Rest-Client。 – Max

+0

是的,我做了,同样的结果很遗憾:( – Koopa

+0

你解决了这个问题吗? – Anatoly

回答

1

的顶层初始化强烈建议使用:

的conf /初始化/ tls_settings.rb

OpenSSL::SSL::SSLContext::DEFAULT_PARAMS[:ssl_version] = 'TLSv1_2' 
+0

谢谢! 虽然我没有使用Rails,但仍然相关吗? – Koopa

+0

是的,它是关于Ruby stdlib – Anatoly

相关问题