rails google developers ruby-on-rails facebook omniauth omniauth-facebook

ruby-on-rails - google - rails devise omniauth facebook



Cómo deshacerse de OpenSSL:: SSL:: SSLError (7)

Estoy intentando autenticar usuarios con Facebook usando OmniAuth. Inicialmente, estaba funcionando, pero en el camino simplemente dejó de funcionar y comenzó a darme este mensaje de error:

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

El mismo código funciona bien para Twitter y no puedo entender por qué no funciona para Facebook. He buscado ayuda en línea, pero no he tenido éxito.

Este es el enlace al sitio web que estoy construyendo: http://www.bestizz.com/
Y esta url le daría el mensaje de error: http://www.bestizz.com/auth/facebook


Agregue el siguiente código a config / initializers / fix_ssl.rb

require ''open-uri'' require ''net/https'' module Net class HTTP alias_method :original_use_ssl=, :use_ssl= def use_ssl=(flag) self.ca_file = "/etc/pki/tls/certs/ca-bundle.crt" # for Centos/Redhat self.verify_mode = OpenSSL::SSL::VERIFY_PEER self.original_use_ssl = flag end end end

Nota:

Muchos sistemas operativos ya vienen con un paquete de certificados suministrado. Por ejemplo, en Red Hat Enterprise Linux y CentOS está instalado en:

/etc/pki/tls/certs/ca-bundle.crt

Para Ubuntu está en:

/etc/ssl/certs/ca-certificates.crt


Este enlace debería funcionar. https://gist.github.com/fnichol/867550 Solo sigue las instrucciones. Deberá descargar el instalador de Rails y ejecutar dos funciones de línea de comando.


Haga esto, obtendrá el error de certificado con openssl

sudo curl http://curl.haxx.se/ca/cacert.pem -o /opt/local/etc/openssl/cert.pem


He estado enfrentando el mismo problema después de actualizar Ruby ejecutando en Yosemite, pero al intentar autenticar con Google.

Después de esto: https://toadle.me/2015/04/16/fixing-failing-ssl-verification-with-rvm.html pareció resolver mi problema.

Por el bien de la historia citaré:

Entonces, el ruby ​​instalado por el rvm busca en el directorio incorrecto los certificados, mientras que el OSX-ruby buscará en el correcto. En su caso, es un directorio de sistema OSX.

Entonces el rubí instalado por el rvm es el problema.

Esta discusión sobre Github finalmente dio la solución: de alguna manera, RVM viene con una versión precompilada de ruby ​​que está enlazada estáticamente contra un openssl que examina / etc / openssl para sus certificados.

Lo que quieres hacer es NO UTILIZAR ninguno de los rubíes precompilados y compilar Ruby en tu máquina local, así: rvm install 2.2.0 --disable-binary

Al final, tuve que correr:

rvm uninstall ruby-2.2.4 rvm install ruby-2.2.4 --disable-binary gem pristine --all

Espero que esto ayude


Parece que la verificación SSL está fallando para Facebook. No soy maestro de OpenSSL, pero creo que esto debería funcionar para ti.

Asumiendo que estás usando una versión actualizada de OmniAuth (> = 0.2.2, supongo que lo eres) y una versión de Faraday> = 0.6.1 (el seguimiento de la pila dice que eres), puedes pasar la ubicación de su paquete de certificados de CA. Modifique su configuración de OmniAuth para Facebook en consecuencia:

Rails.application.config.middleware.use OmniAuth::Builder do provider :facebook, ''appid'', ''appsecret'', {:scope => ''publish_stream,email'', :client_options => {:ssl => {:ca_path => ''/etc/ssl/certs''}}} # other providers... end

y reemplace ''/etc/ssl/certs'' con la ruta a su paquete. Si necesita uno, creo que este archivo funcionará para usted; simplemente colóquelo en algún lugar, asígnele los permisos necesarios y apúntele su aplicación.

Gracias a Alex Kremer en esta respuesta SO por las instrucciones detalladas.


Ruby no puede encontrar ningún certificado raíz. Aquí hay una opción para propósitos de depuración . Ponga el siguiente código al comienzo de su script:

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


Una fea solución que acabo de hacer es anular la clase en Net :: HTTP y establecer la variable que le dice que no verifique los certificados SSL:

require ''net/http'' require ''openssl'' class Net::HTTP alias_method :origConnect, :connect def connect @ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE origConnect end end

Lo hice de esta manera porque no quiero ensuciar con el código fuente de la gema que llama a la gema que llama a la gema que llama a Net :: HTTP. Realmente debería volver y descubrir cómo empujarlo para mirar un archivo cacert.pem separado en su lugar. No puedo modificar el archivo cacert.pem del servidor, o esa sería la mejor ruta.