ruby on rails - SSL_connect devuelto=1 errno=0 estado=SSLv3 certificado de servidor de lectura B: la verificación del certificado falló
ruby-on-rails authlogic (30)
Estoy utilizando Authlogic-Connect para inicios de sesión de terceros. Después de ejecutar las migraciones adecuadas, los inicios de sesión de Twitter / Google / yahoo parecen funcionar bien, pero el inicio de sesión en Facebook produce una excepción:
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
El registro de dev 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..
A one liner lo arregla para Windows en un mensaje de Admin.
choco install wget
(primero ver chocolatey.org )
wget http://curl.haxx.se/ca/cacert.pem -O C:/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/
El 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]
Agregar gem ''certified'', ''~> 1.0''
a mi Gemfile
y ejecutar el bundle
solucionó este problema para mí.
Aquí hay otra opción para propósitos de depuración.
Asegúrese de no utilizar nunca esto en ningún entorno de producción, ya que negará los beneficios de usar SSL en primer lugar. Solo es válido hacer esto en su entorno de desarrollo local.
require ''openssl''
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
Aquí le mostramos cómo puede solucionarlo en Windows: https://gist.github.com/867550 (creado por Fletcher Nichol)
Extracto:
El camino manual (aburrido)
Descargue el archivo
cacert.pem
desde http://curl.haxx.se/ca/cacert.pem . Guarde este archivo enC:/RailsInstaller/cacert.pem
.Ahora haga que ruby conozca su paquete de autoridad de certificados configurando
SSL_CERT_FILE
. Para establecer esto en su sesión actual del símbolo del sistema, escriba:
set SSL_CERT_FILE=C:/RailsInstaller/cacert.pem
Para que esto sea una configuración permanente, agregue esto en su panel de control .
Aunque sé que es una solución bastante poco convincente, sigo compartiendo esto porque parece que muy pocas personas que responden aquí usan Windows , y creo que algunos de los 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á su openssl buscando 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 propio (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, así que ... 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 coloque un archivo cert en él.
Lame como es, esto seguramente funcionará.
Bueno esto funciono para mi
rvm pkg install openssl
rvm reinstall 1.9.2 --with-openssl-dir=$rvm_path/usr
Algo está mal con la implementación openssl de mi ubuntu 12.04
El problema es que Ruby no puede encontrar un certificado raíz en el que confiar. A partir del 1.9 rubí comprueba esto. Deberá asegurarse de que tiene el certificado curl en su sistema en forma de un archivo pem. También deberá asegurarse de que el certificado se encuentre en la ubicación en la que Ruby espera que se encuentre. Puede obtener este certificado en ...
http://curl.haxx.se/ca/cacert.pem
Si usted es un usuario de RVM y OSX, la ubicación de su archivo de certificado variará según la versión de ruby que utilice. Establecer la ruta explícitamente con: ca_path es una mala idea ya que su código no será portátil cuando llegue a producción. Ahí quiere que le proporcione a ruby un certificado en la ubicación predeterminada (y suponga que sus desarrolladores saben lo que están haciendo). Puede usar dtruss para averiguar dónde está buscando el archivo de certificado el sistema.
En mi caso el sistema buscaba 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
En Mac OS X Lion con el último 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.
Entonces, como sugiere esta entrada de blog,
" Cómo curar Net :: El comportamiento HTTPS predeterminado de Risky de HTTP "
es posible que desee instalar la gema always_verify_ssl_certificates
que le permite establecer un valor predeterminado para ca_file
.
Esto es lo que hice que ayudó si tiene un problema específico con Leopard.
Mi certificado era viejo y necesitaba ser actualizado. Descargué esto:
http://curl.haxx.se/ca/cacert.pem
Luego reemplazé mi certificado que se encontró aquí en Leopard:
/usr/share/curl/curl-ca-bundle.crt
¡Recarga lo que tengas que esté accediendo y deberías estar listo!
Esto funcionó para mí. Si estás usando rvm y brew:
rvm remove 1.9.3
brew install openssl
rvm install 1.9.3 --with-openssl-dir=`brew --prefix openssl`
He intentado instalar curl-ca-bundle
con brew
, pero el paquete ya no está disponible:
$ brew install curl-ca-bundle
Error: No available formula for curl-ca-bundle
Searching formulae...
Searching taps...
La solución que me funcionó 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
La nueva gema certificada está diseñada para solucionar esto:
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 muy amplia al respecto en esta publicación del 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 precompilados, que buscan certificados en la ubicación incorrecta. Al obligar a RVM a descargar la fuente y compilar 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, sustituye tu versión rubí según sea necesario).
La respuesta más directa que me funcionó fue la siguiente.
sudo apt-get install openssl ca-certificates
¡¡¡Y voilá!!!
Me encontré con este problema y la correcció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 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
Me encontré con un problema similar al intentar usar el generador JQuery para Rails 3
Lo resolví así:
Obtenga el paquete de la Autoridad de Certificación (CA) CURL. Puedes hacer esto con:
-
sudo port install curl-ca-bundle
[si está usando MacPorts] - o simplemente
wget http://curl.haxx.se/ca/cacert.pem
directamentewget http://curl.haxx.se/ca/cacert.pem
-
Ejecute el código Ruby que intenta 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 recoja o agregar algo comoENV[''SSL_CERT_FILE''] = /path/to/your/new/cacert.pem
en su archivo environment.rb.
También puede instalar los archivos de CA (no he probado esto) en el sistema operativo. here hay instrucciones extensas. 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.
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
Ruby no puede encontrar ningún certificado raíz en el que confiar.
Eche un vistazo a esta publicación del blog para encontrar una solución: " Ruby 1.9 y el error 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, necesita establecer el atributo
ca_path
lugar, con la ubicación predeterminada de los certificados/etc/ssl/certs
.
Si está ejecutando su aplicación 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 puedes usar la aplicación sin ningún problema. Puedes llamarlo hack pero no es recomendable. Úsalo solo cuando necesites correr localmente
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 reinstalar Ruby desde la fuente para solucionar este problema. Aquí es cómo (reemplace 2.2.3
con su versión de Ruby):
rvm reinstall 2.2.3 --disable-binary
Crédito a https://.com/a/32363597/4353 y Ian Connor .
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)
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.
Solo agregue gema ''certificada'' en su gemfile y ejecute el paquete de instalación.
- gema '' certificado ''
- paquete de instalación
Solo porque las instrucciones fueron un poco diferentes para lo que me funcionó, pensé que agregué mis 2 centavos:
Estoy en OS X Lion y usando macports y rvm
Instalé curl-ca-bundle:
sudo port install curl-ca-bundle
Luego ajusté mi configuración de omniauth para ser 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
Solución OSX:
instalar la última versión estable de rvm
rvm get stable
Utilice el comando rvm para resolver los certificados automáticamente
rvm osx-ssl-certs update all
Solucioné este problema ejecutando esto en la terminal. El artículo completo está disponible http://toadle.me/2015/04/16/fixing-failing-ssl-verification-with-rvm.html
rvm install 2.2.0 --disable-binary
Tuve este mismo problema mientras trabajaba en un proyecto de Ruby. Estoy usando Windows 7 64bit.
Resolví esto por:
- Descargando el archivo cacert.pem desde http://curl.haxx.se/ca/cacert.pem .
- Guardé ese archivo en C: /RubyCertificates/cacert.pem
- Luego, configure mi variable de entorno "SSL_CERT_FILE" en "C: / RubyCertificates / cacert.pem"
Tuve problemas por varios días y estuve pirateando. railsapps.github.io/openssl-certificate-verify-failed.html resultó ser extremadamente útil para mí. Me ayudó a hacer una actualización exitosa de SSL en MAC OS X 9.
Tuve que reinstalar Ruby. Esto debería resolverlo si estás 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 más información, echa un vistazo a la Wiki rbenv sobre el tema.