(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?
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('/')
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
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.
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
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.
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
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.
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.
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