web-dev-qa-db-fra.com

SSL_connect return = 1 errno = 0 state = Certificat de serveur de lecture SSLv3 B: échec de la vérification du certificat

J'utilise Authlogic-Connect pour les connexions de tiers. Après avoir exécuté les migrations appropriées, les connexions Twitter/Google/Yahoo semblent fonctionner correctement, mais la connexion à Facebook lève une exception:

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

Le journal de dev montre

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'

Veuillez suggérer..

279
Vikash

J'ai rencontré un problème similaire lorsque j'essayais d'utiliser le générateur JQuery pour Rails 3

Je l'ai résolu comme ça:

  1. Obtenez le lot de l'autorité de certification CURL. Vous pouvez le faire avec:

    • Sudo port install curl-ca-bundle [si vous utilisez MacPorts]
    • ou simplement le tirer directement wget http://curl.haxx.se/ca/cacert.pem
  2. Exécutez 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 voulez définir cette variable comme une variable d’environnement quelque part où le serveur l’a récupérée ou ajouter un élément tel que ENV['SSL_CERT_FILE'] = /path/to/your/new/cacert.pem dans votre fichier environment.rb.

Vous pouvez aussi simplement installer les fichiers CA (je n'ai pas essayé cela) sur le système d'exploitation - il y a de longues instructions ici - cela devrait fonctionner de la même manière, mais je n'ai pas essayé personnellement. .

En gros, le problème que vous rencontrez est qu'un service Web répond avec un certificat signé par une autorité de certification qu'OpenSSL ne peut pas vérifier.

135
Erik G.

Si vous utilisez RVM sur OS X, vous devrez probablement exécuter ceci:

rvm osx-ssl-certs update all

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

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


Mise à jour

Sur Ruby 2.2, vous devrez peut-être réinstaller Ruby à partir du code source pour résoudre ce problème. Voici comment (remplacez 2.2.3 par votre version de Ruby):

rvm reinstall 2.2.3 --disable-binary

Crédit à https://stackoverflow.com/a/32363597/435 et Ian Connor .

134
htanata

Voici comment résoudre ce problème sous Windows: https://Gist.github.com/86755 (créé par Fletcher Nichol)

Extrait:

La voie manuelle (ennuyeux)

Téléchargez le fichier cacert.pem à partir de http://curl.haxx.se/ca/cacert.pem . Enregistrez ce fichier dans C:\RailsInstaller\cacert.pem.

Maintenant, informez Ruby de votre groupe d'autorités de certification en définissant SSL_CERT_FILE. Pour définir cela dans votre session d'invite de commande en cours, tapez:

set SSL_CERT_FILE=C:\RailsInstaller\cacert.pem

Pour en faire un paramètre permanent, ajoutez-le dans votre Panneau de configuration .

129
ryanjones

Ruby ne trouve aucun certificat racine à qui faire confiance.

Jetez un coup d’œil à ce billet de blog pour trouver une solution: " Ruby 1.9 et l’erreur SSL ".

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 définir l'attribut ca_path, avec l'emplacement par défaut des certificats /etc/ssl/certs.

31
martoche

La raison pour laquelle vous obtenez cette erreur sur OSX est Ruby installé par rvm.

Si vous rencontrez ce problème sous OSX, vous trouverez une explication très large dans ce billet de blog:

http://toadle.me/2015/04/16/fixing-failing-ssl-verification-with-rvm.html

La version courte est que, pour certaines versions de Ruby, RVM télécharge des fichiers binaires pré-compilés, qui recherchent des certificats au mauvais emplacement. En obligeant RVM à télécharger le code source et à le compiler sur votre propre ordinateur, vous vous assurez que la configuration de l'emplacement du certificat est correcte.

La commande à faire est la suivante:

rvm install 2.2.0 --disable-binary

si vous avez déjà la version en question, vous pouvez la réinstaller avec:

rvm reinstall 2.2.0 --disable-binary

(Évidemment, remplacez votre version de Ruby au besoin).

24
paulmorar

Le problème est que Ruby ne peut pas trouver de certificat racine à qui faire confiance. À partir de 1.9, Ruby vérifie ceci. Vous devrez vous assurer que le certificat Curl est installé sur votre système sous forme de fichier pem. Vous devrez également vous assurer que le certificat se trouve à l'emplacement prévu par Ruby. Vous pouvez obtenir ce certificat à ...

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

Si vous êtes un utilisateur RVM et OSX, l’emplacement de votre fichier de certificat variera en fonction de la version de Ruby que vous utilisez. Définir le chemin explicitement avec: ca_path est une mauvaise idée car votre code ne sera pas portable lorsqu'il sera en production. Là, vous voulez fournir à Ruby un certificat à l’emplacement par défaut (et supposez que vos développeurs savent ce qu’ils font). Vous pouvez utiliser dtruss pour déterminer où le système recherche le fichier de certificat.

Dans mon cas, le système recherchait le fichier de certification dans

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

cependant, le système MACOSX s’attend à ce qu’un certificat

/System/Library/OpenSSL/cert.pem

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

20
Stewart

Le nouveau bijou certifié est conçu pour résoudre ce problème:

https://github.com/stevegraham/certified

19
Kevin

Ajoutez simplement un joyau 'certifié' dans votre fichier gem et lancez l'installation en bundle.

  1. bijou 'certifié'
  2. installation groupée
18
Nitish Kumar

Sur Mac OS X Lion avec le dernier macport:

Sudo port install curl-ca-bundle  
export SSL_CERT_FILE=/opt/local/share/curl/curl-ca-bundle.crt  

Ensuite, réexécutez le travail ayant échoué.

Notez que l'emplacement du fichier de certification semble avoir changé depuis la réponse d'Eric G le 12 mai.

17
Mike

Un doublure le corrige pour Windows dans une invite de l'administrateur

choco install wget (voir d'abord chocolatey.org )

wget http://curl.haxx.se/ca/cacert.pem -O C:\cacert.pem && setx /M SSL_CERT_FILE "C:\cacert.pem"

Ou simplement faire ceci:

gem sources -r https://rubygems.org/
gem sources -a http://rubygems.org/

La méthode de Milanio:

gem sources -r https://rubygems.org
gem sources -a http://rubygems.org 
gem update --system
gem sources -r http://rubygems.org
gem sources -a https://rubygems.org

gem install [NAME_OF_GEM]
14
Jonathan

Eh bien cela a fonctionné pour moi

rvm pkg install openssl
rvm reinstall 1.9.2 --with-openssl-dir=$rvm_path/usr

Quelque chose ne va pas avec la mise en œuvre openssl de mon Ubuntu 12.04

13
ramasamy

J'ai essayé d'installer curl-ca-bundle avec brew, mais le paquet n'est plus disponible:

$ brew install curl-ca-bundle
Error: No available formula for curl-ca-bundle 
Searching formulae...
Searching taps...

La solution qui a fonctionné pour moi sur Mac était la suivante:

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

Ajoutez cette ligne dans votre ~/.bash_profile (ou ~/.zshrc pour zsh):

export SSL_CERT_FILE=/usr/local/etc/openssl/certs/cacert.pem

Puis mettez à jour votre terminal:

$ source ~/.bash_profile
12
monteirobrena

Voici une autre option à des fins de débogage.

Veillez à ne jamais l'utiliser dans un environnement de production, car cela annulerait les avantages de l'utilisation de SSL. Il est uniquement valable de le faire dans votre environnement de développement local.

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

Tout en sachant que c'est une solution boiteuse, je partage tout de même cela car il semble que très peu de personnes répondant ici utilisent Windows, et je pense que certains utilisateurs de Windows (moi inclus) apprécieraient une solution simple et intuitive approche.

require 'openssl'
puts OpenSSL::X509::DEFAULT_CERT_FILE

Cela indique où votre openssl recherche le fichier de certification. Mon nom n'est pas Luis, mais le mien était C:/Users/Luis/Code/luislavena/knap-build/var/knapsack/software/x86-windows/openssl/1.0.0l/ssl/cert.pem. Le chemin peut être différent en fonction de chaque environnement (par exemple, openknapsack au lieu de luislavena).

Le chemin n'a pas changé même après set SSL_CERT_FILE=C:\foo\bar\baz\cert.pem via la console, alors ... j'ai créé le répertoireC:\Users\Luis\Code\luislavena\knap-build\var\knapsack\software\x86-windows\openssl\1.0.0l\ssl sur mon disque local et y a placé un fichier de certificat.

Lame tel qu'il est, cela fonctionnera sûrement.

12
Quv

J'ai eu le même problème alors que je travaillais sur un projet Ruby. J'utilise Windows 7 64bit.

J'ai résolu ceci par:

  1. Téléchargement du fichier cacert.pem à partir de http://curl.haxx.se/ca/cacert.pem .
  2. Enregistré ce fichier dans C: /RubyCertificates/cacert.pem
  3. Puis définissez ma variable d'environnement "SSL_CERT_FILE" sur "C:\RubyCertificates\cacert.pem"

source: https://Gist.github.com/fnichol/86755

10
Henry

OS X 10.8.x avec Homebrew:

brew install curl-ca-bundle
brew list curl-ca-bundle
cp /usr/local/Cellar/curl-ca-bundle/1.87/share/ca-bundle.crt /usr/local/etc/openssl/cert.pem
7
Synthesis

La réponse la plus simple qui a fonctionné pour moi était la suivante:

Sudo apt-get install openssl ca-certificates

Et le tour est joué !!!

7
Pratik Bothra

J'ai rencontré ce problème et le correctif suggéré de rvm osx-ssl-certs update all ne fonctionnait pas malgré le fait que je sois un utilisateur RVM sous OSX.

Le correctif qui a fonctionné pour moi a été de réinstaller la dernière version d’openssl:

brew update
brew remove openssl
brew install openssl
4
Dave Brace

J'ai résolu ce problème en l'exécutant dans le terminal. Une description complète est disponible sur ici

rvm install 2.2.0 --disable-binary
4
Wraithseeker

Ensuite, comme le suggère ce billet de blog,

" Comment guérir le comportement HTTPS par défaut risqué de Net :: HTTP "

vous voudrez peut-être installer le always_verify_ssl_certificates gem qui vous permet de définir une valeur par défaut pour ca_file.

4
martoche

Cela a fonctionné pour moi. Si vous utilisez rvm et brasse:

rvm remove 1.9.3
brew install openssl
rvm install 1.9.3 --with-openssl-dir=`brew --prefix openssl`
4
Rahul

Si vous exécutez votre application Rails localement, ajoutez simplement cette ligne au bas de application.rb.

OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

Après cela, vous pouvez utiliser l'application sans aucun problème. Vous pouvez appeler ça un bidouillage, mais ce n'est pas recommandé. Utilisez uniquement lorsque vous devez exécuter localement

3
Tarun Rathi

Solution OSX:

installer la dernière version stable rvm

rvm get stable

utilisez la commande rvm pour résoudre les certificats automatiquement

rvm osx-ssl-certs update all
3
Alston

Si vous avez un lien symbolique dans/usr/local/etc/openssl pointant vers cert.pem, essayez ceci:

Ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE" (should be /usr/local/etc/openssl)
cd /usr/local/etc/openssl
wget http://curl.haxx.se/ca/cacert.pem
ln -s cacert.pem 77ee3751.0 (77ee3751.0 is my symbolic link, should depend on the openssl version)
2

Juste parce que les instructions étaient légèrement différentes pour ce qui a fonctionné pour moi, j'ai pensé ajouter mes 2 centimes:

Je suis sur OS X Lion et utilise macports et rvm

J'ai installé curl-ca-bundle:

Sudo port install curl-ca-bundle

Ensuite, j'ai ajusté ma configuration d'omniauth à ceci:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2, APP_CONFIG['CONSUMER_KEY'], APP_CONFIG['CONSUMER_SECRET'],
           :scope => 'https://www.google.com/m8/feeds https://www.googleapis.com/auth/userinfo.profile',
           :ssl => {:ca_path => "/share/curl/curl-ca-bundle.crt"}
end
2
Hortitude

Ce qui a fonctionné pour moi est une combinaison de réponses, à savoir:

# Reinstall OpenSSL
brew update
brew remove openssl
brew install openssl
# Download CURL CA bundle
cd /usr/local/etc/openssl/certs
wget http://curl.haxx.se/ca/cacert.pem
/usr/local/opt/openssl/bin/c_rehash
# Reinstall Ruby from source
rvm reinstall 2.2.3 --disable-binary
2
suda

Voici ce que j'ai fait qui a aidé si vous rencontrez spécifiquement un problème avec Leopard.

Mon certificat était vieux et devait être mis à jour. J'ai téléchargé ceci:

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

Puis remplacé mon certificat qui a été trouvé ici sur Leopard:

/usr/share/curl/curl-ca-bundle.crt

Rechargez tout ce que vous avez qui y a accès et vous devriez être prêt à partir!

2
Musicalmindz

Le dernier rubygem-update-2.6.7 a résolu ce problème. http://guides.rubygems.org/ssl-certificate-update/

1
singh2005

J'ai dû réinstaller Ruby. Cela devrait résoudre le problème si vous utilisez Ubuntu & rbenv:

rbenv uninstall your_version

# install dependencies
Sudo apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev

# install Ruby with patch
curl -fsSL https://Gist.github.com/mislav/055441129184a1512bb5.txt | \
  rbenv install --patch your_version

Pour plus d'informations, consultez le rbenv Wiki sur le sujet.

1
ndnenkov

L'ajout de gem 'certified', '~> 1.0' à mon Gemfile et l'exécution de bundle résolvent ce problème pour moi.

1
user2573222

Il suffit d'exécuter l'exécutable certified-update et cette commande garantira que tous vos certificats sont à jour.

Cela a fonctionné pour mon application Ruby sur Rails sous Windows.

1
Saurin Parikh

Avoir ce problème avec Ruby 2.3.4:

Je l'ai résolu en désinstallant OpenSSL et en le réinstallant. J'ai couru:

brew uninstall --ignore-dependencies openssl

ensuite

brew install openssl

Cela a fait le travail.

1
Jules Corb

Parfois, c'est pas toujours le problème de rvm sous MAC OSX, si vous supprimez toujours le problème .rvm (surtout lorsque vous sauvegardez des données depuis timemachine), vous pouvez essayer de cette façon.

1.brew update
2.brew install openssl
1
Albert.Qing

J'ai eu des problèmes pendant plusieurs jours et je me suis mis à bidouiller. Ce lien s'est avéré extrêmement utile pour moi. Cela m'a aidé à réussir la mise à niveau de SSL sur MAC OS X 9.

1
PackedUp

Ajoutez ceci à votre gemfile:

gem 'cliver', :git => 'git://github.com/yaauie/cliver', :ref => '5617ce'

0
Jesse Farmer

Cela peut être le problème des certificats SSL brisés/non valides. Sur mac, vous pouvez utiliser cette commande pour mettre à jour les certificats SSL:

rvm osx-ssl-certs update all
0
abcd_win

L'installation du paquet suivant sur Ubuntu a résolu le problème pour moi.

Sudo apt-get install libssl-dev

0
bruckerrlb