Как обойти проверку сертификата 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
Ответы
Ответ 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, или если этот хак нужен только в определенных средах, то в их отдельных файлах конфигурации.