290 votes

SSL_connect retourné=1 errno=0=SSLv3 lire certificat de serveur B: certificat de vérifier échoué

Je suis à l'aide de Authlogic-Connectez pour la troisième partie de connexions. Après l'exécution appropriée des migrations, Twitter/Google/yahoo connexions semblent fonctionner très bien, mais le facebook login throws exception:

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

Le dev du journal des spectacles

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'

S'il vous plaît suggérer..

139voto

Erik G. Points 1029

J'ai rencontré un problème similaire lors de l'utilisation de JQuery générateur pour Rails 3

Je l'ai résolu comme ceci:

  1. Obtenir le CURL Autorité de certification (CA) bundle. Vous pouvez le faire avec:

    • sudo port install curl-ca-bundle [si vous utilisez MacPorts]
    • ou juste de le tirer vers le bas directement wget http://curl.haxx.se/ca/cacert.pem
  2. Exécuter le code ruby qui tente de vérifier la certification SSL: SSL_CERT_FILE=/opt/local/etc/certs/cacert.pem rails generate jquery:install. Dans votre cas, vous souhaitez définir cela comme une variable d'environnement, quelque part, le serveur récupère ou ajouter quelque chose comme ENV['SSL_CERT_FILE'] = /path/to/your/new/cacert.pem dans votre environnement.rb fichier.

Vous pouvez aussi installer le CA des fichiers (je n'ai pas essayé) de l'OS -- il y a de longues instructions ici -- cela doit fonctionner dans un mode similaire, mais je n'ai pas essayé personnellement.

Fondamentalement, la question vous est frappant, c'est que certains de service web est de répondre avec un certificat signé à l'encontre d'une autorité de certification qui OpenSSL ne peut pas vérifier.

139voto

htanata Points 11200

Si vous utilisez RVM sur OS X, vous avez probablement besoin d'exécuter ce:

rvm osx-ssl-certs update all

Plus d'informations ici: http://rvm.io/support/fixing-broken-ssl-certificates

Et voici l'explication: https://github.com/wayneeseguin/rvm/blob/master/help/osx-ssl-certs.md

130voto

ryanjones Points 1899

Voici comment vous pouvez le fixer sur Windows: https://gist.github.com/867550 (créé par Fletcher Nichol)

31voto

martoche Points 399

Ruby ne peut pas trouver tous les certificats racine de confiance.

Jetez un oeil à ce billet de blog pour une solution: "Ruby 1.9 et l'erreur SSL".

La solution est d'installer l' curl-ca-bundle port qui contient la même racine certificats utilisés par Firefox:

sudo port install curl-ca-bundle

et dites à votre https objet pour l'utiliser:

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

Notez que si vous voulez que votre code à exécuter sur Ubuntu, vous devez définir l' ca_path attribut au lieu de cela, avec les certificats par défaut emplacement /etc/ssl/certs.

20voto

Stewart Points 446

Le problème est que ruby ne pouvez pas trouver un certificat racine de confiance. Que de 1,9 ruby vérifie ce. Vous devrez vous assurer que vous avez le curl certificat sur votre système sous la forme d'un fichier pem. Vous devrez également vous assurer que le certificat est dans l'emplacement que ruby s'attend à le trouver. Vous pouvez obtenir ce certificat à la...

http://curl.haxx.se/ca/cacert.pem

Si votre un RVM et OSX utilisateur, puis le fichier de votre certificat de localisation varie en fonction de la version de ruby votre aide. Définir le chemin d'accès de manière explicite avec :ca_path est une MAUVAISE idée que votre code ne sera pas portable quand il arrive à la production. Il y a pour vous souhaitez fournir ruby avec un certificat dans l'emplacement par défaut(et d'assumer votre dev ops les gars savent ce qu'ils font). Vous pouvez utiliser dtruss de travail où le système est à la recherche pour le fichier de certificat.

Dans mon cas, le système a été à la recherche pour le cert fichier dans

/Users/stewart.matheson/.rvm/usr/ssl/cert.pem

cependant MACOSX système pourrait s'attendre à un certificat en

/System/Library/OpenSSL/cert.pem

J'ai copié le fichier téléchargé cert de ce chemin, et cela a fonctionné. HTH

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