45 votes

Omniauth Facebook Erreur - Faraday::Error::ConnectionFailed

(Pour information : Je suis en train de suivre l'Omniauth Twitter de Railscast #241. J'ai utilisé Twitter avec succès, maintenant je passe à Facebook)

Dès que je me suis connecté à Facebook en utilisant Omniauth, j'ai obtenu cette erreur :

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

Qu'est-ce que cela signifie ?

Voici mon code

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, '', ''
end

En réalité, il n'y a pas grand-chose dans mon code, tout ce que j'ai c'est dans le sessionController que je veux utiliser to_yaml pour voir ce qu'il y a dans request.env

class SessionsController < ApplicationController
    def create
        raise request.env["omniauth.auth"].to_yaml
    end
end

Comment résoudre l'erreur Faraday ?

63voto

Andrei Radulescu Points 1087

J'ai corrigé cela sur Mac OS X Lion 10.7.4 avec cette solution :

$ rvm remove 1.9.3 (ou n'importe quelle version de ruby que vous utilisez)
$ rvm pkg install openssl
$ rvm install 1.9.3 --with-openssl-dir=$rvm_path/usr

après cela, vous devrez télécharger le fichier manquant cacert.pem :

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

29voto

Neil Hoff Points 876

Vous obtenez cette erreur car Ruby ne peut pas trouver un certificat racine de confiance.

Correctif pour Windows: https://gist.github.com/867550

Correctif pour Apple/Linux: http://martinottenwaelter.fr/2010/12/ruby19-and-the-ssl-error/ <--Ce site est maintenant fermé.

Voici la correction pour Apple/Linux selon le site ci-dessus :

La solution consiste à installer le port curl-ca-bundle qui contient les mêmes certificats racines utilisés par Firefox :

sudo port install curl-ca-bundle

et indiquer à votre objet https de l'utiliser :

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

Notez que si vous voulez que votre code fonctionne sur Ubuntu, vous devez définir l'attribut ca_path avec l'emplacement par défaut des certificats /etc/ssl/certs.

En fin de compte, voici ce qui fonctionnera à la fois sur Mac OS X et Ubuntu :

require 'net/https'
https = Net::HTTP.new('encrypted.google.com', 443)
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_PEER
https.ca_path = '/etc/ssl/certs' if File.exists?('/etc/ssl/certs') # Ubuntu
https.ca_file = '/opt/local/share/curl/curl-ca-bundle.crt' if File.exists('/opt/local/share/curl/curl-ca-bundle.crt') # Mac OS X
https.request_get('/')

21voto

jtblin Points 1681

La réponse d'Andrei ne fonctionnait pas pour moi sur Mac OSX 10.8.3. J'avais réinstallé openssl pour installer ruby 2.0 il y a quelque temps et depuis j'ai toujours eu cette erreur. Je l'ai résolue grâce à la réponse d'Andrei et aux instructions du projet Rails.

J'ai exécuté :

$ rvm -v
$ rvm get head
# Installation de la dernière version de rvm...
$ rvm -v
# rvm 1.19.5 (master)
$ rvm osx-ssl-certs status all
# Certificats pour /usr/local/etc/openssl/cert.pem: Anciens.
# Certificats pour /Users/mpapis/.sm/pkg/versions/openssl/0.9.8x/ssl/cert.pem: Anciens.
$ sudo rvm osx-ssl-certs update all
# Mise à jour des certificats...

Ensuite, j'ai vérifié si les certificats avaient été correctement mis à jour en exécutant à nouveau rvm osx-ssl-certs status all, mais /usr/local/etc/openssl/cert.pem n'avait toujours pas été mis à jour. Je ne sais pas si c'était nécessaire, mais j'ai fait ce qui suit :

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

Après cela, le problème était résolu. J'espère que cela aidera quelqu'un d'autre qui rencontre le même problème.

8voto

levinalex Points 2580

Ceci a fonctionné pour moi (sur Mac OS X) :

$ brew install curl-ca-bundle
$ export SSL_CERT_FILE=/usr/local/opt/curl-ca-bundle/share/ca-bundle.crt

3voto

scalopus Points 937

Solution alternative :

[Je suis un utilisateur de Win7 avec une installation manuelle de Ruby et Ruby on Rails]

J'ai eu le même problème mais je n'ai pas pu le résoudre avec la réponse donnée à cette question. En fin de compte, j'ai résolu le problème en suivant l'URL suivante

Facebook Redirect url in ruby on rails open ssl error https://github.com/technoweenie/faraday/wiki/Setting-up-SSL-certificates

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X