SYSCALL возвратил = 5 errno = 0 состояние = SSLv3 чтение сервера hello A с клиентом Ruby RESTful

Я уже некоторое время борюсь с этой проблемой. Я пытаюсь использовать рубиновый камень Rest-Client для доступа к конечной точке API с использованием сертификатов SSL. Я точно знаю, что сервер отвечает только на TLSv

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
2 и TLSv
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
1, однако я не могу заставить его работать. Это фрагмент кода:

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>'

Я просматривал это на какое-то время, но это не сильно помогло.


person Koopa    schedule 11.07.2015    source источник
comment
Вы пробовали использовать обычную net/http stdlib? Я бы попытался заставить это работать, а затем переключил его на Rest-Client.   -  person Max    schedule 11.07.2015
comment
Да, я сделал, тот же результат, к сожалению :(   -  person Koopa    schedule 11.07.2015
comment
Вы решили проблему?   -  person Anatoly    schedule 23.09.2015


Ответы (1)


Настоятельно рекомендуется использовать инициализатор верхнего уровня:

conf/initializer/tls_settings.rb

OpenSSL::SSL::SSLContext::DEFAULT_PARAMS[:ssl_version] = 'TLSv1_2'
person Anatoly    schedule 11.07.2015
comment
Спасибо! Однако я не использую Rails. Это все еще актуально? - person Koopa; 11.07.2015
comment
Да, речь идет о настройках для Ruby stdlib - person Anatoly; 11.07.2015