ruby - servidor - ¿Por qué falla el acceso a un sitio SSL con Mechanize en Windows, pero en Mac funciona?
safari no pudo abrir la pagina porque el servidor no responde iphone (2)
Este es el código que estoy usando para conectarme al sitio SSL.
require ''mechanize''
a = Mechanize.new
page = a.get ''https://site.com''
Utilizo las dependencias de Ruby 1.9.3 y Mechanize 2.1pre1 +. En Mac, el código anterior funciona y devuelve la página. En Windows 7 con las mismas versiones, aparece el siguiente error:
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3
read server certificate B: certificate verify failed
Revertir a Mechanize 2.0.1 parece resolver este problema, pero luego me atormento con el too many connections reset by peer
problema too many connections reset by peer
. Así que eso no es una solución.
He intentado hacer a.verify_mode = false
, pero eso no hace nada. He leído que puedes desactivar la verificación SSL usando:
open(uri,:ssl_verify_mode => OpenSSL::SSL::VERIFY_NONE)
¿Cómo puedo apagarlo en mecanizar? ¿Por qué solo recibo este error en Windows?
La respuesta de Luis se ve bien, pero en general:
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
La versión de OpenSSL (la biblioteca utilizada para establecer conexiones seguras con Net::HTTPS
) no puede encontrar correctamente la cadena de certificados en su computadora.
Para nuestro mal, OpenSSL nunca pudo usar el almacenamiento de certificados instalado de Windows para validar servidores remotos, por lo que está fallando.
De tu ejemplo, puedes hacer:
a.agent.http.verify_mode = OpenSSL::SSL::VERIFY_NONE
Para evitar la verificación, sin embargo, eso dista mucho de ser ideal (debido a problemas de seguridad claros)
Te recomiendo que descargues algunos paquetes de certificados (como los de Curl):
Y modifique su código a algo como esto:
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/"
Eso parece funcionar, Ruby 1.9.3-p0 (i386-mingw32), Windows 7 x64 y mecanize 2.1.pre.1
Espero que ayude.