Подтвердить что ты не робот

Как обойти проверку сертификата SSL в open-uri?

Я пытаюсь получить доступ к файлу с открытым 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
4b9b3361

Ответ 1

Если вам действительно не нужна дополнительная безопасность использования проверки сертификата и вы можете перейти на 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("")

Ответ 2

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

Мне пришлось поместить его в: yourrailsapp/initalizers/

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

И поставьте:

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

Ответ 3

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

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

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

Ответ 4

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

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

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

  • сертификат действителен, но ваша система не имеет необходимого корневого сертификата для проверки.
  • сертификат самоподписанный, например. в вашей компании, и вам нужно доверять ей.
  • вы подвергаетесь атаке человек в середине

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

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

Ответ 5

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

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()

Ответ 6

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

Ответ 7

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