ruby-on-rails ruby ruby-on-rails-3.1 openssl rvm

ruby on rails - Error de "verificación de certificado fallido" de OpenSSL al usar Ruby 1.9.3



ruby-on-rails ruby-on-rails-3.1 (7)

El directorio de certificación de Openssl es /usr/lib/ssl/ en Debian. Así que, siguiendo tres líneas fue suficiente para mí,

$ cd /usr/lib/ssl/ $ sudo curl -O http://curl.haxx.se/ca/cacert.pem $ sudo mv cacert.pem cert.pem

Estoy usando Ruby 1.9.3p0 en Mac OS 10.6.8 (instalado usando rvm). Cuando intento crear una nueva aplicación Rails utilizando una plantilla de aplicación alojada en GitHub , con esto (por ejemplo):

$ rails new myapp -m https://github.com/RailsApps/rails3-application-templates/raw/master/rails3-mongoid-devise-template.rb -T -O

Me sale este mensaje de error:

/Users/me/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/net/http.rb:799:in `connect'': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)

Entiendo que el intérprete de idiomas de Ruby está utilizando OpenSSL para conectarse a GitHub para solicitar el archivo de plantilla de la aplicación. GitHub requiere que todas las conexiones se realicen utilizando SSL. La conexión falló porque OpenSSL no pudo verificar el certificado del servidor.

Pude resolver el problema descargando un archivo de certificados:

$ cd /opt/local/etc/openssl $ sudo curl -O http://curl.haxx.se/ca/cacert.pem $ sudo mv cacert.pem cert.pem

No tuve ningún problema con Ruby 1.9.2. ¿Por qué recibí el problema de "verificación de certificado fallido" para Ruby 1.9.3? ¿Es este un error de Ruby 1.9.3? ¿Es específico para Mac OS 10.6.8? ¿Es mi solución la forma correcta de resolver esto?


Estaba teniendo el mismo problema.

La forma en que finalmente lo solucioné fue actualizando mi versión de OpenSSL que había instalado a través de MacPorts. Estaba ejecutando una versión de OpenSSL desde 2009, por lo que actualicé mi instalación de MacPorts y luego actualicé mi instalación de OpenSSL a través de la interfaz de la línea de comandos de los ports y el error desapareció.

Debe haber alguna integración entre Ruby / Rails y OpenSSL en las instalaciones basadas en Mac que no hace falta decir. En mi caso, tuve problemas para que el inicio de sesión con Facebook funcionara correctamente cuando Facebook enviaba el token de oAuth / inicio de sesión a mi aplicación. Devise & OmniAuth necesitaba un graph.facebook.com SSL válido para graph.facebook.com que no estaba en Mi versión anterior de OpenSSL.


Hay muchas partes móviles involucradas en la respuesta correcta. Depende de su sistema operativo, versión de Ruby, versión de OpenSSL, versión de Rubygems. Terminé escribiendo un artículo después de investigarlo. Mi artículo explica las razones del error, ofrece pasos para un diagnóstico adicional, muestra varias soluciones y sugiere posibles soluciones. Esto será útil:

Errores de OpenSSL y Rails - Fallo en la verificación del certificado

También hay enlaces a los compromisos y problemas relevantes en GitHub.


Para mí, esto ocurrió en OS X con homebrew después de actualizar a la última RVM (rvm 1.20.12) y luego instalar ruby-1.9.3-p429. Podría reproducir el problema simplemente ejecutando:

$ rvm use ruby-1.9.3-p429 $ irb 1.9.3p429 :001 > require ''open-uri''; open ''https://google.com'' OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed from /Users/lyahdav/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/net/http.rb:800:in `connect'' from /Users/lyahdav/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/net/http.rb:800:in `block in connect'' from /Users/lyahdav/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/timeout.rb:55:in `timeout'' from /Users/lyahdav/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/timeout.rb:100:in `timeout'' from /Users/lyahdav/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/net/http.rb:800:in `connect'' from /Users/lyahdav/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/net/http.rb:756:in `do_start'' from /Users/lyahdav/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/net/http.rb:745:in `start'' from /Users/lyahdav/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/open-uri.rb:306:in `open_http'' from /Users/lyahdav/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/open-uri.rb:775:in `buffer_open'' from /Users/lyahdav/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/open-uri.rb:203:in `block in open_loop'' from /Users/lyahdav/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/open-uri.rb:201:in `catch'' from /Users/lyahdav/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/open-uri.rb:201:in `open_loop'' from /Users/lyahdav/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/open-uri.rb:146:in `open_uri'' from /Users/lyahdav/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/open-uri.rb:677:in `open'' from /Users/lyahdav/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/open-uri.rb:33:in `open'' from (irb):1 from /Users/lyahdav/.rvm/rubies/ruby-1.9.3-p429/bin/irb:16:in `<main>''1.9.3p429 :002 >

La solución fue similar a la de la pregunta, pero el camino estaba equivocado. Ejecutando esto lo arreglé:

curl https://curl.haxx.se/ca/cacert.pem -o /usr/local/etc/openssl/cert.pem

La pista sobre la ruta correcta era que cuando estaba instalando ruby-1.9.3-p429 a través de RVM, esto se mostraba en la salida:

Certificates in ''/usr/local/etc/openssl/cert.pem'' already are up to date.

Tenía la ruta /usr/local/etc/openssl , pero no cert.pem archivo cert.pem en ese directorio, así que no estoy seguro de por qué RVM afirmó que los certificados estaban actualizados. Sería bueno saber por qué tuve que hacer esto en primer lugar, pero ahora no tengo tiempo para investigar.


Posiblemente podría ser debido a cómo construiste 1.9.2 y 1.9.3, tal vez la herramienta que utilizaste para construir cada cosa configurada de manera ligeramente diferente. O tal vez utilizan diferentes versiones de OpenSSL.

Aquí está el único cambio potencialmente relevante que pude ver en la Red: HTTP entre 1.9.2 y 1.9.3

require ''net/protocol'' -autoload :OpenSSL, ''openssl'' require ''uri'' +autoload :OpenSSL, ''openssl''

(Si quieres ver el dif ...)

git clone https://github.com/ruby/ruby.git cd ruby git diff origin/ruby_1_9_2 origin/ruby_1_9_3 -- http.rb


Tuve el mismo problema, después de haber compilado mi RVM Ruby contra una instalación RVM de OpenSSL. Moví el archivo cacerts.pem como fue descargado por el póster original en ~ / .rvm / usr / ssl / cert.pem para que el problema desaparezca.


Tuve un problema similar pero no en Rails, sino solo en Ruby en Windows. Lo resolví utilizando el certificado cacert.pem y configurando la ubicación del certificado a la variable de entorno "SSL_CERT_FILE"

Respuesta detallada aquí: https://.com/a/35429863/4747587