2016-07-07 9 views
4

Я пытаюсь попасть на внутренний сервер API тестирования, используя RestClient и Ruby v. 2.2.1.Ошибка возврата возвращаемого сертификата RestClient.get

Это, по существу код:

url = "https://10.10.0.10/thing/i/want/to/get" 
header = { 
     :content_type => "application/json", 
     :"x-auth-token" => "testingtoken" 
    } 
response = RestClient.get url, header 

Это сообщение об ошибке я получаю:

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (RestClient::SSLCertificateNotVerified) 

если Я читаю это право, это выглядит как Рубин не смог принять SSL сертификат безопасности. Этот вызов работает в приложении Postman для Chrome, но для его работы я должен нажать URL-адрес в самом Chrome и принять, что соединение не безопасно (но все равно), и ТОГДА оно будет работать в почтальоне.

Есть ли способ игнорировать сбой сертификата и продолжать все равно в Ruby?

+0

Возможный дубликат [SSL \ _connect возвращенного = 1 ERRNO = 0 состояние = SSLv3 чтения сертификата сервера B: сертификат проверить не удалось] (http://stackoverflow.com/questions/4528101/ssl-connect-returned- 1-errno-0-state-sslv3-read-server-certificate-b-certat) – user1875195

ответ

5

Попробуйте использовать #execute(&block) с verify_ssl, установленным на false.

:verify_ssl позволяет проводить проверку SSL, возможные значения константы из OpenSSL::SSL::VERIFY_*, по умолчанию OpenSSL::SSL::VERIFY_PEER

url = "https://10.10.0.10/thing/i/want/to/get" 
headers = { 
    :content_type => "application/json", 
    :"x-auth-token" => "testingtoken" 
} 

RestClient::Request.execute(
    :url => url, 
    :method => :get, 
    :headers => headers, 
    :verify_ssl => false 
) 

см: http://www.rubydoc.info/github/rest-client/rest-client/RestClient/Request#execute-instance_method


РВМ

Дополнительное решение для пользователей РВМ от: https://toadle.me/2015/04/16/fixing-failing-ssl-verification-with-rvm.html

Это discussion on Github наконец дал решение: Как-то РВМ приходит с скомпилированной версии рубин, который статически связан с в OpenSSL, который смотрит в /etc/openssl для его сертификаты.

Что вы хотите сделать это не использовать какой-либо из скомпилированных рубинов и охотнее рубин составлен на локальном компьютере, например, так: rvm install 2.2.0 --disable-binary

+1

Отлично! Спасибо за вашу помощь! – kroe761

+0

Ваше первое решение - это небезопасное обходное решение и не позволяет использовать сертификат SSL. –

0

rest-client проверить сертификаты с помощью системы CA магазин на всех платформах по умолчанию. Но возможно установить значение false для опции :verify_ssl или указать :ssl_ca_file или :ssl_ca_path или :ssl_cert_store для настройки принимаемых сертификатов.

См documentation

Так что вы можете просто установить :verify_ssl ложь:

url = "https://10.10.0.10/thing/i/want/to/get" 
header = { 
     :content_type => "application/json", 
     :"x-auth-token" => "testingtoken" 
} 
resource = RestClient::Resource.new(
    url, 
    headers: header, 
    verify_ssl: false 
) 

response = resource.get 

Можно попробовать сразу с хозяином, которые используют самоподписным аттестованный обеспечивается https://badssl.com/. Просто скопируйте фрагмент ниже в консоли irb.

response = RestClient::Resource.new(
'https://self-signed.badssl.com/', 
    :verify_ssl => false 
).get 
+0

Ваше решение является небезопасным обходным решением. –