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 5

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