SSL_connect returned = 1 errno = 0 state = SSLv3 read server certificate B: certificate verify failed

Estoy usando Authlogic-Connect para los inicios de sesión de terceros. Después de ejecutar las migraciones apropiadas, los inicios de sesión de Twitter / Google / yahoo funcionan bien, pero el inicio de sesión de Facebook arroja una excepción:

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed 

El registro de desarrollo muestra

 OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed): app/controllers/users_controller.rb:37:in `update' 

Por favor recomiende..

Me encontré con un problema similar al tratar de usar el generador JQuery para Rails 3

Lo solucioné así:

  1. Obtenga el paquete CURL Certificate Authority (CA). Puedes hacer esto con:

    • sudo port install curl-ca-bundle [si está utilizando MacPorts]
    • o simplemente sáquelo directamente wget http://curl.haxx.se/ca/cacert.pem
  2. Ejecute el código Ruby que está intentando verificar la certificación SSL: SSL_CERT_FILE=/opt/local/etc/certs/cacert.pem rails generate jquery:install . En su caso, desea establecer esto como una variable de entorno en algún lugar donde el servidor lo recoge o agregar algo como ENV['SSL_CERT_FILE'] = /path/to/your/new/cacert.pem en su archivo environment.rb.

También puede instalar los archivos CA (no lo he probado) en el sistema operativo (aquí hay instrucciones detalladas) , esto debería funcionar de manera similar, pero no lo he intentado personalmente.

Básicamente, el problema que está afectando es que algún servicio web está respondiendo con un certificado firmado contra una CA que OpenSSL no puede verificar.

Si está utilizando RVM en OS X, probablemente necesite ejecutar esto:

 rvm osx-ssl-certs update all 

Más información aquí: http://rvm.io/support/fixing-broken-ssl-certificates

Y aquí está la explicación completa: https://github.com/wayneeseguin/rvm/blob/master/help/osx-ssl-certs.md


Actualizar

En Ruby 2.2, es posible que tengas que volver a instalar Ruby de la fuente para solucionarlo. Así es como (reemplace 2.2.3 con su versión de Ruby):

 rvm reinstall 2.2.3 --disable-binary 

Crédito a https://stackoverflow.com/a/32363597/4353 e Ian Connor .

Así es cómo puedes solucionarlo en Windows: https://gist.github.com/867550 (creado por Fletcher Nichol)

Extracto:

El modo manual (aburrido)

Descargue el archivo cacert.pem de http://curl.haxx.se/ca/cacert.pem . Guarde este archivo en C:\RailsInstaller\cacert.pem .

Ahora hazle saber a Ruby sobre tu paquete de autoridad certificadora configurando SSL_CERT_FILE . Para configurar esto en su sesión de símbolo del sistema actual, escriba:

 set SSL_CERT_FILE=C:\RailsInstaller\cacert.pem 

Para hacer de esto una configuración permanente, agréguela a su panel de control .

Ruby no puede encontrar ningún certificado raíz para confiar.

Echa un vistazo a esta publicación de blog para encontrar una solución: ” Ruby 1.9 y el error de SSL “.

La solución es instalar el puerto curl-ca-bundle que contiene los mismos certificados raíz utilizados por Firefox:

 sudo port install curl-ca-bundle 

y dile a tu objeto https que lo use:

 https.ca_file = '/opt/local/share/curl/curl-ca-bundle.crt' 

Tenga en cuenta que si desea que su código se ejecute en Ubuntu, debe establecer el atributo ca_path lugar, con la ubicación de certificados predeterminada /etc/ssl/certs .

La razón por la que obtienes este error en OSX es el ruby ​​instalado por rvm.

Si se encuentra con este problema en OSX, puede encontrar una explicación realmente amplia en esta publicación de blog:

http://toadle.me/2015/04/16/fixing-failing-ssl-verification-with-rvm.html

La versión corta es que, para algunas versiones de Ruby, RVM descarga binarios precomstackdos, que buscan certificados en la ubicación incorrecta. Al forzar a RVM a descargar la fuente y comstackr en su propia máquina, se asegura de que la configuración de la ubicación del certificado sea correcta.

El comando para hacer esto es:

 rvm install 2.2.0 --disable-binary 

Si ya tiene la versión en cuestión, puede volver a instalarla con:

 rvm reinstall 2.2.0 --disable-binary 

(obviamente, sustituya su versión ruby ​​según sea necesario).

El problema es que Ruby no puede encontrar un certificado raíz para confiar. A partir de 1.9 ruby ​​comprueba esto. Deberá asegurarse de tener el certificado curl en su sistema en forma de archivo pem. También deberá asegurarse de que el certificado se encuentre en la ubicación que Ruby espera que sea. Puede obtener este certificado en …

 http://curl.haxx.se/ca/cacert.pem 

Si eres un usuario de RVM y OSX, la ubicación de tu archivo de certificado variará según la versión de ruby ​​que uses. Establecer la ruta explícitamente con: ca_path es una idea MALA ya que su código no será portátil cuando llegue a la producción. Ahí tienes que proporcionar ruby ​​con un certificado en la ubicación predeterminada (y asumir que tus desarrolladores saben lo que están haciendo). Puede usar dtruss para determinar dónde busca el sistema el archivo de certificado.

En mi caso, el sistema estaba buscando el archivo cert en

 /Users/stewart.matheson/.rvm/usr/ssl/cert.pem 

sin embargo, el sistema MACOSX esperaría un certificado en

 /System/Library/OpenSSL/cert.pem 

Copié el certificado descargado a esta ruta y funcionó. HTH

La nueva gem certificada está diseñada para solucionar esto:

https://github.com/stevegraham/certified

En Mac OS X Lion con la última macport:

 sudo port install curl-ca-bundle export SSL_CERT_FILE=/opt/local/share/curl/curl-ca-bundle.crt 

Luego, vuelva a ejecutar el trabajo fallido.

Tenga en cuenta que la ubicación del archivo cert parece haber cambiado desde que Eric G respondió el 12 de mayo.

Simplemente agregue la gem ‘certificada’ en su gemfile y ejecute la instalación del paquete.

  1. gem ‘ certificada
  2. paquete de instalación

Un trazador de líneas lo arregla para Windows en una solicitud de administrador

choco install wget (primero vea chocolatey.org )

 wget http://curl.haxx.se/ca/cacert.pem -OC:\cacert.pem && setx /M SSL_CERT_FILE "C:\cacert.pem" 

O simplemente haz esto:

 gem sources -r https://rubygems.org/ gem sources -a http://rubygems.org/ 

Método de Milanio:

 gem sources -r https://rubygems.org gem sources -a http://rubygems.org gem update --system gem sources -r http://rubygems.org gem sources -a https://rubygems.org gem install [NAME_OF_GEM] 

Bueno, esto funcionó para mí

 rvm pkg install openssl rvm reinstall 1.9.2 --with-openssl-dir=$rvm_path/usr 

Algo está mal con la implementación de openssl de mi ubuntu 12.04

Intenté instalar curl-ca-bundle con brew , pero el paquete no está disponible más:

 $ brew install curl-ca-bundle Error: No available formula for curl-ca-bundle Searching formulae... Searching taps... 

La solución que funcionó para mí en Mac fue:

  $ cd /usr/local/etc/openssl/certs/ $ sudo curl -O http://curl.haxx.se/ca/cacert.pem 

Agregue esta línea en su ~/.bash_profile (o ~/.zshrc para zsh):

 export SSL_CERT_FILE=/usr/local/etc/openssl/certs/cacert.pem 

Luego actualiza tu terminal:

 $ source ~/.bash_profile 

Aquí hay otra opción para propósitos de depuración.

Asegúrese de nunca utilizar esto en ningún entorno de producción, ya que negará los beneficios de usar SSL en primer lugar. Solo es válido hacerlo en su entorno de desarrollo local.

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

Aunque sé que es una solución poco convincente, todavía estoy compartiendo esto porque parece que muy pocas personas que responden aquí usan Windows , y creo que algunos usuarios de Windows (yo incluido) apreciarían un enfoque simple e intuitivo.

 require 'openssl' puts OpenSSL::X509::DEFAULT_CERT_FILE 

Eso indica dónde está buscando su openssl el archivo cert. Mi nombre no es Luis, pero el mío era C:/Users/Luis/Code/luislavena/knap-build/var/knapsack/software/x86-windows/openssl/1.0.0l/ssl/cert.pem . La ruta puede ser diferente dependiendo de cada entorno (por ejemplo, openknapsack lugar de luislavena ).

La ruta no cambió incluso después de set SSL_CERT_FILE=C:\foo\bar\baz\cert.pem través de la consola, entonces … set SSL_CERT_FILE=C:\foo\bar\baz\cert.pem el directorio C:\Users\Luis\Code\luislavena\knap-build\var\knapsack\software\x86-windows\openssl\1.0.0l\ssl en mi disco local y poner un archivo cert en él.

Por malo que sea, esto seguramente funcionará.

Tuve este mismo problema mientras trabajaba en un proyecto de Ruby. Estoy usando Windows 7 64 bits.

Resolví esto por:

  1. Descargando el archivo cacert.pem desde http://curl.haxx.se/ca/cacert.pem .
  2. Guardado ese archivo en C: /RubyCertificates/cacert.pem
  3. Luego configure mi variable de entorno “SSL_CERT_FILE” en “C: \ RubyCertificates \ cacert.pem”

fuente: https://gist.github.com/fnichol/867550

La respuesta más directa que funcionó para mí fue esta

 sudo apt-get install openssl ca-certificates 

¡¡¡Y voilá!!!

OS X 10.8.x con Homebrew:

 brew install curl-ca-bundle brew list curl-ca-bundle cp /usr/local/Cellar/curl-ca-bundle/1.87/share/ca-bundle.crt /usr/local/etc/openssl/cert.pem 

Entonces, como sugiere esta publicación en el blog,

” Cómo curar la red :: Comportamiento HTTP HTTPS arriesgado por defecto ”

es posible que desee instalar la gem always_verify_ssl_certificates que le permite establecer un valor predeterminado para ca_file .

Esto funcionó para mí. Si usa rvm y elabora:

 rvm remove 1.9.3 brew install openssl rvm install 1.9.3 --with-openssl-dir=`brew --prefix openssl` 

Me encontré con este problema y la solución sugerida de la rvm osx-ssl-certs update all de rvm osx-ssl-certs update all no funcionó a pesar de que soy un usuario de RVM en OSX.

La solución que funcionó para mí fue volver a instalar la última versión de openssl:

 brew update brew remove openssl brew install openssl 

Solucioné este problema ejecutando esto en la terminal. La versión completa está disponible aquí

 rvm install 2.2.0 --disable-binary 

Solución OSX:

instalar la última versión estable de rvm

 rvm get stable 

use el comando rvm para resolver los certificados automáticamente

 rvm osx-ssl-certs update all 

Esto es lo que hice que ayudó si tienes un problema específico con Leopard.

Mi certificado era viejo y necesitaba ser actualizado. Descargué esto:

http://curl.haxx.se/ca/cacert.pem

Luego reemplacé mi certificado que se encontró aquí en Leopard:

 /usr/share/curl/curl-ca-bundle.crt 

Recarga lo que tengas que esté accediendo a él y ¡deberías estar listo!

El hecho de que las instrucciones fueran un poco diferentes para lo que funcionó para mí, pensé que agregué mis 2 centavos:

Estoy en OS X Lion y uso macports y rvm

Instalé curl-ca-bundle:

 sudo port install curl-ca-bundle 

Luego ajusté mi configuración de omniauth para que sea esto:

 Rails.application.config.middleware.use OmniAuth::Builder do provider :google_oauth2, APP_CONFIG['CONSUMER_KEY'], APP_CONFIG['CONSUMER_SECRET'], :scope => 'https://www.google.com/m8/feeds https://www.googleapis.com/auth/userinfo.profile', :ssl => {:ca_path => "/share/curl/curl-ca-bundle.crt"} end 

Si tiene un enlace simbólico en / usr / local / etc / openssl que apunta a cert.pem, intente hacer esto:

 ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE" (should be /usr/local/etc/openssl) cd /usr/local/etc/openssl wget http://curl.haxx.se/ca/cacert.pem ln -s cacert.pem 77ee3751.0 (77ee3751.0 is my symbolic link, should depend on the openssl version) 

Si está ejecutando su aplicación de Rails localmente, simplemente agregue esta línea en la parte inferior de application.rb.

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

Después de esto, puede usar la aplicación sin ningún problema. Puede llamarlo un truco, pero no es recomendable. Úselo solo cuando necesite ejecutar localmente

Tuve un problema por varios días y estaba hackeando. Este enlace resultó ser extremadamente útil para mí. Me ayudó a realizar una actualización exitosa de SSL en MAC OS X 9.

Agregar gem 'certified', '~> 1.0' a mi Gemfile y ejecutar bundle resolvió este problema para mí.

Simplemente ejecute el ejecutable de certified-update y este comando se asegurará de que todos sus certificados estén actualizados.

Esto funcionó para mi aplicación Ruby on Rails en Windows.

Tuve que reinstalar a Ruby. Esto debería resolverlo si está usando Ubuntu y rbenv:

 rbenv uninstall your_version # install dependencies sudo apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev # install ruby with patch curl -fsSL https://gist.github.com/mislav/055441129184a1512bb5.txt | \ rbenv install --patch your_version 

Para obtener más información, consulte la Wiki de rbenv sobre el tema.

Intereting Posts