2014-08-20 4 views
2

Я уверен, что я пробовал все под солнцем. Вот код, я пытаюсь запуститьПроверка сертификата Ruby и OpenSSL

require 'rubygems' 
require 'rest-client' 
require 'json' 

def vipr_session(viprurl, username, password) 
    vipr_session_link = RestClient::Resource.new(viprurl + '/login', username, password) 
    vipr_session_response = vipr_session_link.get 
    myvar = 'x_sds_auth_token' 
    @mysession = vipr_session_link.headers[myvar.to_sym] 
end 

@username = 'root' 
@password = 'mypw' 
@viprurl = 'https://192.168.50.141:4443' 

print " Logging into ViPR..." 
    vipr_session(@viprurl, @username, @password) 
print "Success! \n\n\n" 
puts @mysession 
storagesystems = JSON.parse(RestClient.get(@viprurl + '/vdc/storage-systems', :x_sds_auth_token => @mysession, :content_type => :json, :accept => :json)) 
puts storagesystems 

Здесь ошибка

kcoleman-mbp:vipr_scripts kcoleman$ ruby storage_systems.rb 
Logging into ViPR.../Users/kcoleman/.rvm/gems/ruby-2.1.2/gems/rest-client-1.7.2/lib/restclient/request.rb:445:in `rescue in transmit': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (RestClient::SSLCertificateNotVerified) 
    from /Users/kcoleman/.rvm/gems/ruby-2.1.2/gems/rest-client-1.7.2/lib/restclient/request.rb:350:in `transmit' 
    from /Users/kcoleman/.rvm/gems/ruby-2.1.2/gems/rest-client-1.7.2/lib/restclient/request.rb:176:in `execute' 
    from /Users/kcoleman/.rvm/gems/ruby-2.1.2/gems/rest-client-1.7.2/lib/restclient/request.rb:41:in `execute' 
    from /Users/kcoleman/.rvm/gems/ruby-2.1.2/gems/rest-client-1.7.2/lib/restclient/resource.rb:51:in `get' 
    from storage_systems.rb:8:in `vipr_session' 
    from storage_systems.rb:18:in `<main>' 

я могу сделать эту работу, установив verify_ssl: в RestClient ложной, но этот код работал раньше и внезапно это уже не так.

Вот что я сделал, чтобы попытаться исправить:

rvm osx-ssl-certs update all 
brew install openssl 
brew link openssl --force 
brew tap raggi/ale 
brew install openssl-osx-ca 
rvm pkg install openssl 
curl http://curl.haxx.se/ca/cacert.pem -o /usr/local/etc/openssl/cert.pem 

Вот мои текущие конфиги

kcoleman$ which openssl 
/usr/local/bin/openssl 
kcoleman$ openssl version 
OpenSSL 1.0.1i 6 Aug 2014 

Я побежал в эту статью SSLError and Rubyist, sitting in a tree и это выход врача. rb-скрипт.

kcoleman-mbp:ssl-tools kcoleman$ ruby doctor.rb 192.168.50.141:4443 
/Users/kcoleman/.rvm/rubies/ruby-2.1.2/bin/ruby (2.1.2-p95) 
OpenSSL 1.0.1g 7 Apr 2014: /etc/openssl 
SSL_CERT_DIR="" 
SSL_CERT_FILE="" 

HEAD https://192.168.50.141:4443 
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed 

The server presented a certificate that could not be verified: 
    subject: /CN=192.168.50.140 
    issuer: /CN=192.168.50.140 
    error code 18: self signed certificate 

Похоже, рубин использует другую версию OpenSSL, которая упакована с РВМ. Проверяется при запуске openssl install на rvm.

kcoleman-mbp:vipr_scripts kcoleman$ rvm pkg install openssl 

Beware, 'rvm pkg ...' is deprecated, read about the new autolibs feature: 'rvm help autolibs'. 

Checking requirements for osx. 
Certificates in '/usr/local/etc/openssl/cert.pem' are already up to date. 
Requirements installation successful. 
Fetching openssl-1.0.1g.tar.gz to /Users/kcoleman/.rvm/archives 
Extracting openssl to /Users/kcoleman/.rvm/src/openssl-1.0.1g.... 
Configuring openssl in /Users/kcoleman/.rvm/src/openssl-1.0.1g....................... 
Compiling openssl in /Users/kcoleman/.rvm/src/openssl-1.0.1g...........................................................................................- 
Installing openssl to /Users/kcoleman/.rvm/usr 

Если у вас есть какие-либо идеи о том, что попробовать, то это очень ценится.

+0

Я думаю, что Штеффен прибил его с несогласованным IP. Создайте новый самоподписанный сертификат. См. [Сертификат с расширенным использованием ключа работает только в Firefox] (http://stackoverflow.com/questions/25259867/certificate-with-extended-key-usage-only-works-in-firefox) для инструкций и пример файла конфигурации , – jww

ответ

2
 
HEAD https://192.168.50.141:4443 
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed 

The server presented a certificate that could not be verified: 
    subject: /CN=192.168.50.140 
    issuer: /CN=192.168.50.140 
    error code 18: self signed certificate 

Есть несколько вещей неправильно с вашим сертификатом, которые делают проверку FAIL:

  • Сертификат самоподписан и, таким образом, не могут быть проверены в отношении местного якоря доверия. Принятие такого сертификата эквивалентно принятию любого паспорта, созданного для себя, а не только паспортов, выданных доверенными правительствами.
  • Тема сертификата не соответствует имени, которое вы использовали для подключения к нему. Сертификат предназначен для 192.168.50.140, но вы получаете доступ к хосту как 192.168.50.141 (возможно, по-прежнему тем, что в сертификате имеется больше IP-адресов в качестве альтернативного имени субъекта, которые здесь не показаны). Не проверять имя в сертификате эквивалентно не проверять фотографию в паспорте у ведущего паспорта.
+0

Я думаю, проблема связана с тем, что можно увидеть на этом изображении [ViPR Setup Image] (http://theruddyduck.typepad.com/.a/6a01901e94bb15970b01a3fd2e64da970b-800wi). 192.168.50.140 - это IP-адрес сервера, а 141 - IP UI/REST. Я только что создал новый самозаверяющий сертификат, и firefox заставил меня принять новый самозаверяющий сертификат. Однако файл doctor.rb все еще показывает то же самое. –

+0

Поскольку у вашего сценария нет способа заставить вас принять самозаверяющий сертификат. Вы должны где-то указать, что этот сертификат доверен, как вы это делали после того, как Firefox представил вам предупреждение о сертификате. Я не знаком с рубином, но посмотрите на http://www.rubydoc.info/github/rest-client/rest-client/RestClient/Request 'SSLOptionList'' ca_file' и 'ca_path' - соответствующие настройки. –

+1

спасибо ... Мне просто нужно подключить ssl_verify: false к методам, и он исправляет сам. Я не знаю, как это работает раньше, но это исправление. Спасибо за помощь –

Смежные вопросы