RestClient.получить возвращаемый сертификат проверить не удалось
Я пытаюсь попасть на внутренний тестовый API-сервер, используя RestClient и Ruby V. 2.2.1.
Это, по сути, код:
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)
Если я правильно читаю, похоже, что Ruby не смог принять сертификат безопасности SSL. Этот вызов работает в приложении Chrome Postman, но для того, чтобы он работал, я должен нажать URL в самом Chrome и принять, что соединение не безопасно (но продолжайте в любом случае), и тогда он будет работать в почтальоне.
Есть ли способ игнорировать сбои сертификатов и продолжать работу в Ruby?
2 ответа:
Попробуйте использовать
#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
RVM
Дополнительное решение для пользователей RVM из: https://toadle.me/2015/04/16/fixing-failing-ssl-verification-with-rvm.html
Это обсуждение на Github наконец дало решение: каким-то образом RVM приходит с предварительно скомпилированной версией ruby, которая статически связана с openssl, который смотрит в
/etc/openssl
для его сертификатов.Что вы хотите сделать, так это не использовать ни один из предварительно скомпилированных рубинов и а у Руби составлен на локальном компьютере, так:
rvm install 2.2.0 --disable-binary
rest-client
проверка сертификатов с помощью системного хранилища CA на всех платформах по умолчанию. Но можно установить в false опцию:verify_ssl
или указать:ssl_ca_file
или:ssl_ca_path
или:ssl_cert_store
, чтобы настроить принятые центры сертификации.См. документация
Таким образом, вы можете просто установить
:verify_ssl
в false: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