J'utilise Ruby 1.9.3p0 sur Mac OS 10.6.8 (installé à l'aide de rvm). Lorsque je tente de créer une nouvelle application Rails à l'aide d'un modèle d'application hébergé sur GitHub , avec ceci (par exemple):
$ Rails new myapp -m https://github.com/RailsApps/Rails3-application-templates/raw/master/Rails3-mongoid-devise-template.rb -T -O
Je reçois ce message d'erreur:
/Users/me/.rvm/rubies/Ruby-1.9.3-p0/lib/Ruby/1.9.1/net/http.rb:799:in `connect ': SSL_connect Retourné = 1 errno = 0 state = certificat de serveur de lecture SSLv3 B: échec de la vérification du certificat (OpenSSL :: SSL :: SSLError)
Je comprends que l’interprète de langage Ruby utilise OpenSSL pour se connecter à GitHub afin de demander le fichier de modèle d’application. GitHub exige que toutes les connexions soient établies en utilisant SSL. La connexion a échoué car OpenSSL n'a pas pu vérifier le certificat du serveur.
J'ai pu résoudre le problème en téléchargeant un fichier de certificats:
Sudo curl -O http://curl.haxx.se/ca/cacert.pem $ Sudo curl -O http://curl.haxx.se/ca/cacert.pem $ Sudo mv cacert.pem cert.pem
Je n'ai eu aucun problème en utilisant Ruby 1.9.2. Pourquoi ai-je eu le problème de "vérification du certificat a échoué" pour Ruby 1.9.3? Est-ce un bug de Ruby 1.9.3? Est-ce spécifique à Mac OS 10.6.8? Est-ce que ma solution est la bonne façon de résoudre ce problème?
Il y a beaucoup de pièces mobiles impliquées dans la bonne réponse. Dépend de votre système d'exploitation, version Ruby, version OpenSSL, version Rubygems. J'ai fini par écrire un article après une recherche. Mon article explique les raisons de l'erreur, propose des étapes pour un diagnostic plus approfondi, présente plusieurs solutions de contournement et suggère des solutions possibles. Ce sera utile:
Erreurs et Rails OpenSSL - Echec de la vérification du certificat
Il existe également des liens vers les commits et problèmes pertinents sur GitHub.
Pour moi, cela s'est produit sous OS X avec homebrew après la mise à jour vers la dernière version de RVM (résolution 1.20.12), puis l'installation de Ruby-1.9.3-p429. Je pourrais reproduire le problème simplement en lançant:
$ rvm use Ruby-1.9.3-p429
$ irb
1.9.3p429 :001 > require 'open-uri'; open 'https://google.com'
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
from /Users/lyahdav/.rvm/rubies/Ruby-1.9.3-p429/lib/Ruby/1.9.1/net/http.rb:800:in `connect'
from /Users/lyahdav/.rvm/rubies/Ruby-1.9.3-p429/lib/Ruby/1.9.1/net/http.rb:800:in `block in connect'
from /Users/lyahdav/.rvm/rubies/Ruby-1.9.3-p429/lib/Ruby/1.9.1/timeout.rb:55:in `timeout'
from /Users/lyahdav/.rvm/rubies/Ruby-1.9.3-p429/lib/Ruby/1.9.1/timeout.rb:100:in `timeout'
from /Users/lyahdav/.rvm/rubies/Ruby-1.9.3-p429/lib/Ruby/1.9.1/net/http.rb:800:in `connect'
from /Users/lyahdav/.rvm/rubies/Ruby-1.9.3-p429/lib/Ruby/1.9.1/net/http.rb:756:in `do_start'
from /Users/lyahdav/.rvm/rubies/Ruby-1.9.3-p429/lib/Ruby/1.9.1/net/http.rb:745:in `start'
from /Users/lyahdav/.rvm/rubies/Ruby-1.9.3-p429/lib/Ruby/1.9.1/open-uri.rb:306:in `open_http'
from /Users/lyahdav/.rvm/rubies/Ruby-1.9.3-p429/lib/Ruby/1.9.1/open-uri.rb:775:in `buffer_open'
from /Users/lyahdav/.rvm/rubies/Ruby-1.9.3-p429/lib/Ruby/1.9.1/open-uri.rb:203:in `block in open_loop'
from /Users/lyahdav/.rvm/rubies/Ruby-1.9.3-p429/lib/Ruby/1.9.1/open-uri.rb:201:in `catch'
from /Users/lyahdav/.rvm/rubies/Ruby-1.9.3-p429/lib/Ruby/1.9.1/open-uri.rb:201:in `open_loop'
from /Users/lyahdav/.rvm/rubies/Ruby-1.9.3-p429/lib/Ruby/1.9.1/open-uri.rb:146:in `open_uri'
from /Users/lyahdav/.rvm/rubies/Ruby-1.9.3-p429/lib/Ruby/1.9.1/open-uri.rb:677:in `open'
from /Users/lyahdav/.rvm/rubies/Ruby-1.9.3-p429/lib/Ruby/1.9.1/open-uri.rb:33:in `open'
from (irb):1
from /Users/lyahdav/.rvm/rubies/Ruby-1.9.3-p429/bin/irb:16:in `<main>'1.9.3p429 :002 >
La solution était semblable à celle de la question, mais le chemin était mauvais. Courir cela a corrigé:
curl https://curl.haxx.se/ca/cacert.pem -o /usr/local/etc/openssl/cert.pem
L’indice concernant le bon chemin était que lors de l’installation de Ruby-1.9.3-p429 via RVM, cela était indiqué dans la sortie:
Certificates in '/usr/local/etc/openssl/cert.pem' already are up to date.
J'avais le chemin /usr/local/etc/openssl
, mais aucun fichier cert.pem
dans ce répertoire, je ne sais donc pas pourquoi RVM a prétendu que les certificats étaient à jour. Ce serait bien de savoir pourquoi je devais le faire en premier lieu, mais je n'ai pas le temps d'enquêter pour le moment.
J'ai eu le même problème, ayant compilé mon RVM Ruby contre une installation RVM d'OpenSSL. J'ai déplacé le fichier cacerts.pem tel que téléchargé par l'affiche originale sous ~/.rvm/usr/ssl/cert.pem pour que le problème disparaisse.
J'avais le même problème.
J'ai finalement résolu le problème en mettant à niveau ma version d'OpenSSL que j'avais installée via MacPorts. J'utilisais une version d'OpenSSL à partir de 2009, j'ai donc mis à niveau mon installation MacPorts, puis mon installation OpenSSL via l'interface de ligne de commande ports
.
Il doit y avoir une certaine intégration entre Ruby/Rails et OpenSSL sur des installations Mac qui va sans dire. Dans mon cas, j'avais des problèmes pour obtenir le Connexion avec Facebook pour fonctionner correctement lorsque Facebook renvoyait le jeton oAuth/Login à mon application, Devise & OmniAuth devait avoir besoin d'un certificat SSL valide pour graph.facebook.com
qui n'était pas présent. mon ancienne version d'OpenSSL.
Le répertoire de certification Openssl est /usr/lib/ssl/
dans Debian. Donc, suivre trois lignes me suffisait,
$ cd /usr/lib/ssl/
$ Sudo curl -O http://curl.haxx.se/ca/cacert.pem
$ Sudo mv cacert.pem cert.pem
Cela pourrait être dû à la façon dont vous avez construit 1.9.2 et 1.9.3 - quel que soit l'outil que vous utilisiez pour construire chaque chose configurée de manière légèrement différente. Ou peut-être qu'ils utilisent différentes versions d'OpenSSL.
Voici le seul changement potentiellement pertinent que j'ai pu remarquer sur Net: HTTP entre 1.9.2 et 1.9.3
require 'net/protocol'
-autoload :OpenSSL, 'openssl'
require 'uri'
+autoload :OpenSSL, 'openssl'
(si vous voulez voir le diff ...)
clone git https://github.com/Ruby/ruby.git cd Ruby git diff Origine/Ruby_1_9_2 Origine/Ruby_1_9_3 - http.rb
J'ai eu un problème similaire, mais pas sur Rails, mais uniquement sur Ruby sous Windows. Je l'ai résolu en utilisant cacert.pem certificate et en définissant l'emplacement du certificat sur la variable d'environnement "SSL_CERT_FILE".
Réponse détaillée ici: https://stackoverflow.com/a/35429863/4747587