web-dev-qa-db-fra.com

Erreur Facebook Omniauth - Faraday :: Error :: ConnectionFailed

(Pour info: je suis le Twitter Omniauth de railscast # 241. J'ai utilisé Twitter avec succès, maintenant sur Facebook)

Dès que je me suis connecté à Facebook avec Omniauth, j'obtiens cette erreur:

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

Qu'est-ce que ça veut dire?

C'est mon code

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, '<key from fb>', '<another key from fb>'
end

Il n'y a en réalité que peu de choses dans mon code, tout ce que j'ai est dans le contrôleur de session que je veux utiliser avec to_yaml pour voir le contenu de la requête.env

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

Comment résoudre l'erreur Faraday?

45
user1372829

Vous obtenez cette erreur car Ruby ne peut pas trouver de certificat racine à qui faire 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 en panne.

Voici le correctif Apple/Linux selon le site ci-dessus:

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

Sudo port install curl-ca-bundle

et dites à 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 soit exécuté sur Ubuntu, vous devez plutôt définir l'attribut ca_path, avec l'emplacement par défaut des certificats/etc/ssl/certs.

En fin de compte, c’est ce qui fonctionnera sous 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('/')
29
Neil Hoff

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

$ rvm remove 1.9.3 (or whatever version of Ruby you are using)
$ 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 cacert.pem manquant:

$ cd $rvm_path/usr/ssl
$ Sudo curl -O http://curl.haxx.se/ca/cacert.pem
$ Sudo mv cacert.pem cert.pem
63
Andrei Radulescu

La réponse d'Andrei n'a pas fonctionné pour moi sous Mac OSX 10.8.3. J'avais réinstallé openssl pour installer Ruby 2.0 il y a quelque temps et depuis lors, j'ai toujours eu cette erreur. Je l'ai corrigé grâce à la réponse d'Andrei et à instructions du projet Rails

Iran:

$ rvm -v
$ rvm get head
# Installation of latest version of rvm...
$ rvm -v
# rvm 1.19.5 (master)
$ rvm osx-ssl-certs status all
# Certificates for /usr/local/etc/openssl/cert.pem: Old.
# Certificates for /Users/mpapis/.sm/pkg/versions/openssl/0.9.8x/ssl/cert.pem: Old.
$ Sudo rvm osx-ssl-certs update all
# Updating certificates...

Ensuite, j'ai vérifié si les certificats étaient correctement mis à jour en exécutant à nouveau rvm osx-ssl-certs status all mais /usr/local/etc/openssl/cert.pem n'était toujours pas 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 a été corrigé. J'espère que cela aidera quelqu'un d'autre qui rencontre le même problème.

21
jtblin

cela 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
8
levinalex

Le site Web RVM suggère d’exécuter rvm osx-ssl-certs update all

RVM Website: Comment réparer les certificats cassés dans votre système d'exploitation.

3
BoosterStage

Solution alternative:

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

J'ai le même problème mais je ne peux pas résoudre par la réponse donnée par cette question. Au fait, enfin, j'ai résolu le problème en suivant l'URL

Facebook Redirect url dans Ruby on Rails open ssl errorhttps://github.com/technoweenie/faraday/wiki/Setting-up-SSL-certificates

3
scalopus

Pour Windows 7: le lien de solution ci-dessus de Neil Hoff (correctif pour Windows: https://Gist.github.com/867550 ) ne fonctionnait pas pour moi.

Voici ce qui fonctionne:

Utilisation de cmd.exe:

curl -o c:\cacert.pem http://curl.haxx.se/ca/cacert.pem
set SSL_CERT_FILE=c:\cacert.pem

en utilisant msysgit bash:

curl -o /c/cacert.pem http://curl.haxx.se/ca/cacert.pem
export SSL_CERT_FILE=/c/cacert.pem

Si vous n'avez pas curl sur votre ligne de commande Windows 7, procurez-vous-le ici: http://www.confusedbycode.com/curl/#downloads

la solution originale vient d’ici - crédit à: https://github.com/chef/chef-dk/issues/106

Dunn.

1
Dung

La réponse d'Andrei a fonctionné pour moi, mais j'ai rencontré un énorme obstacle en essayant de réinstaller Ruby 1.9.3. Comme j'avais installé une nouvelle version de Xcode depuis l'installation de la version 1.9.3, je ne pouvais pas le réinstaller avant d'ouvrir les préférences de Xcode et d'installer les outils de ligne de commande à partir de l'onglet Téléchargements.

0
sean_j_roberts

Départ certifié gem. La description:

Assurez-vous que net/https utilise OpenSSL :: SSL :: VERIFY_PEER pour vérifier SSL certificats et fournit un ensemble de certificats au cas où OpenSSL ne pourrait pas en trouver un

0
phil pirozhkov