Как обойти проверку SSL-сертификата в open-uri? - PullRequest
48 голосов
/ 11 июля 2009

Я пытаюсь получить доступ к файлу с open-uri через соединение https. К сожалению, что-то не так с сертификатом, я получаю сертификат проверки не удалось ошибка. Я ничего не могу с этим поделать, поэтому я должен обойти проверку.

Я нашел этот ответ

Я не хочу / не могу изменить oen-uri.rb на сервере, и я использую Ruby 1.8.6.

Как изменить режим проверки? Или точнее где это поменять?

Где я могу это поставить?

if target.class == URI::HTTPS  
 require 'net/https'  
 http.use_ssl = true   
 http.verify_mode = OpenSSL::SSL::VERIFY_NONE  
 store = OpenSSL::X509::Store.new  
 store.set_default_paths  
 http.cert_store = store
end

или грязный хак: куда я могу это положить?

OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

Ответы [ 7 ]

72 голосов
/ 04 октября 2013

Предупреждение, не делайте этого в рабочей среде, вы полностью отключаете SSL таким образом.

Если вам действительно не нужна дополнительная безопасность при использовании проверки сертификата и вы можете перейти на Ruby 1.9.3p327 +, вы можете передать параметр ssl_verify_mode методу open. Вот, например, как я это делаю:

request_uri=URI.parse('myuri?that_has=params&encoded=in_it&optionally=1')

# The params incidentally are available as a String, via request_uri.query
output = open(request_uri, {ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE})
obj = JSON.parse output.readlines.join("")
40 голосов
/ 11 июля 2009

Теперь выяснил сам: я использовал грязный хак, который прекрасно работает для меня.

Я должен был поместить это в: yourrailsapp/initalizers/

Там я создал bypass_ssl_verification_for_open_uri.rb

И положить:

OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
13 голосов
/ 01 мая 2011

хорошо (может появиться uninitialized constant OpenSSL (NameError)) ставить require 'openssl' перед этой строкой, поэтому

app / config / initializers / bypass_ssl_verification_for_open_uri.rb (имя файла инициализатора не имеет значения)

require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

12 голосов
/ 16 июня 2014

Как вы упомянули сами, это грязный хак . Очевидно, что отключение проверки SSL-сертификата не очень хорошая идея.

Существует очень полезная статья Мислава Маронича, в которой подробно рассказывается, почему это плохо, и как правильно ее решить.

Таким образом, в большинстве случаев вы получаете ошибку проверки SSL, если:

  1. сертификат действителен, но ваша система не имеет необходимого корневого сертификата для проверки.
  2. сертификат самоподписан, например, в вашей компании, и вы должны доверять ей
  3. вы подвергаетесь атаке "человек посередине" 1017 *

Для меня первый случай применен, и простое обновление пакета ca-Certificates в моей системе Ubuntu добилось цели.

Отличным инструментом для отслеживания вашей ошибки SSL является ssl doctor script .

4 голосов
/ 18 ноября 2015

Это ваш звонок, но установка VERIFY_PEER на NONE в основном эквивалентна полностью отключить TLS и подключиться по незашифрованному HTTP. Это делает человек посередине атакует банально и не пройдет проверку PCI.

3 голосов
/ 06 февраля 2012

Слабый, но контролируемый путь

class XMLRPC::Client
 # WEAK: Enrich the Client with a method for disabling SSL VERIFICATION
 # See /usr/lib/ruby/1.9.1/xmlrpc/client.rb:324
 # Bad hack but it works
 def disableSSLVerification
   @http.verify_mode = OpenSSL::SSL::VERIFY_NONE
   warn "Proxyman SSL Verification disabled"
 end
end

Тогда вы просто позвоните

client.disableSSLVerification()
1 голос
/ 13 июля 2009

Похоже, что хороший кандидат для включения в environment.rb, или если этот взлом необходим только в определенных средах, то в их отдельных конфигурационных файлах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...