Ответ 1
Версия OpenSSL (библиотека, используемая для установления защищенных соединений с Net::HTTPS
), не может правильно найти цепочку сертификатов на вашем компьютере.
К нашему плохому, OpenSSL никогда не мог использовать установленное Windows хранилище сертификатов для проверки удаленных серверов, поэтому из-за этого не удается.
В вашем примере вы можете:
a.agent.http.verify_mode = OpenSSL::SSL::VERIFY_NONE
Чтобы избежать проверки, однако это далеко не идеально (из-за явных проблем с безопасностью)
Я рекомендую вам скачать несколько комплектов сертификатов (например, из curl):
И измените свой код на что-то вроде этого:
require "rbconfig"
require "mechanize"
a = Mechanize.new
# conditionally set certificate under Windows
# http://blog.emptyway.com/2009/11/03/proper-way-to-detect-windows-platform-in-ruby/
if RbConfig::CONFIG["host_os"] =~ /mingw|mswin/
# http://curl.haxx.se/ca
ca_path = File.expand_path "~/Tools/bin/curl-ca-bundle.crt"
a.agent.http.ca_file = ca_path
end
page = a.get "https://github.com/"
Кажется, что это работает, Ruby 1.9.3-p0 (i386-mingw32), Windows 7 x64 и mechanize 2.1.pre.1
Надеюсь, что это поможет.