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..
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:
Obtenez le lot de l'autorité de certification CURL. Vous pouvez le faire avec:
Sudo port install curl-ca-bundle
[si vous utilisez MacPorts]wget http://curl.haxx.se/ca/cacert.pem
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.
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
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 .
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 dansC:\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 .
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
.
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).
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
Le nouveau bijou certifié est conçu pour résoudre ce problème:
Ajoutez simplement un joyau 'certifié' dans votre fichier gem et lancez l'installation en bundle.
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.
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]
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
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
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
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.
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:
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
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é !!!
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
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
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
.
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`
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
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
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)
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
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
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!
Le dernier rubygem-update-2.6.7 a résolu ce problème. http://guides.rubygems.org/ssl-certificate-update/
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.
L'ajout de gem 'certified', '~> 1.0'
à mon Gemfile
et l'exécution de bundle
résolvent ce problème pour moi.
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.
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.
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
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.
Ajoutez ceci à votre gemfile:
gem 'cliver', :git => 'git://github.com/yaauie/cliver', :ref => '5617ce'
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
L'installation du paquet suivant sur Ubuntu a résolu le problème pour moi.
Sudo apt-get install libssl-dev