l'installation du bundle échoue avec une erreur de vérification du certificat SSL

264

Lorsque bundle installj'exécute mon projet Rails 3 sur Centos 5.5, il échoue avec une erreur:

Gem::RemoteFetcher::FetchError: SSL_connect returned=1 errno=0 state=SSLv3 
read server certificate B: certificate verify failed 
(https://bb-m.rubygems.org/gems/multi_json-1.3.2.gem)
An error occured while installing multi_json (1.3.2), and Bundler cannot continue.
Make sure that `gem install multi_json -v '1.3.2'` succeeds before bundling.

Lorsque j'essaie d'installer la gemme manuellement (par gem install multi_json -v '1.3.2'), cela fonctionne. Le même problème se produit avec plusieurs autres gemmes. J'utilise RVM (1.12.3), ruby ​​1.9.2, bundler 1.1.3.

Comment le réparer?

mrzasa
la source
Face au même problème. Mais avec un autre joyau: Gem :: RemoteFetcher :: FetchError: SSL_connect retourné = 1 errno = 0 état = SSLv3 lu le certificat du serveur B: la vérification du certificat a échoué ( bb-m.rubygems.org/gems/activeresource-3.2.3.gem )
Sathish
4
J'ai la même erreur dans les mêmes circonstances. Je soupçonne, compte tenu de ces autres réponses, qu'il s'agit d'un problème côté serveur.
asfallows
J'ai rencontré un problème similaire dans Rails 5. Il a été résolu en ajoutant source "https://rubygems.org''le Gemfile et en exécutant «gem update --system». Vous pouvez trouver plus d'informations ici .
Nesha Zoric
Nesha, ce correctif a fonctionné pour moi. Je vous remercie!
Martin Marino

Réponses:

310

Mettre à jour

Maintenant que j'ai du karma qui est suffisamment extrait de cette réponse, tout le monde devrait savoir que cela aurait dû être corrigé.

re: via Ownatik à nouveau, l' installation du bundle échoue avec une erreur de vérification du certificat SSL

gem update --system

Ma réponse est toujours correcte et laissée ci-dessous pour référence si cela ne fonctionne pas pour vous.


Honnêtement, la meilleure solution temporaire est de

[...] utilisez la version non ssl de rubygems dans votre gemfile comme solution de contournement temporaire.

via l'utilisateur Ownatik

ce qu'ils signifient est en haut du Gemfilechangement de répertoire d'application dans vos rails

source 'https://rubygems.org'

à

source 'http://rubygems.org'

notez que la deuxième version est http au lieu de http s

Volonté
la source
1
J'accepte cette réponse, car c'est ce que j'ai fait au début. Plus tard, j'ai changé ma stratégie de déploiement. Maintenant, je lance l'application sur un autre serveur et je la copie (avec des gemmes dans le vendorrépertoire) sur le serveur dont j'ai parlé dans la question.
mrzasa
6
Ça n'a pas marché pour moi. Le lien fourni par @fbernier ci-dessous l'a corrigé pour moi.
Scott Fister du
5
Ça ne marche pas. L'exécution de ceci fournit simplement la sortie de Latest version currently installed. Aborting. Autres idées?
Matt Huggins
1
En termes de changement de source, pour les personnes plus récentes comme moi. Je préciserais que ce fichier se trouve dans votre répertoire d'application. Je le cherchais dans le répertoire railsinstaller. Quoi qu'il en soit, j'ai changé la source et ça a finalement fonctionné. Je reçois des erreurs de certificat lorsque j'essaie d'exécuter la mise à jour :(
Brian
2
gem update --systeméchoue avec exactement la même erreur de certificat: \
BlueRaja - Danny Pflughoeft
226

Remplacez la source gem ssl par non-ssl comme solution temporaire:

StuR
la source
8
OMG a fonctionné comme un charme! Je suis sous Windows 7 x64 derrière un proxy d'entreprise. Merci beaucoup!
Șerban Ghiță
14
Je suis surpris que ce ne soit pas classé plus haut, c'était la solution miracle la plus simple.
hwatkins
3
bonne solution temporaire ... tenez compte des éléments suivants: RubyGems a été configuré pour servir les gemmes via les URL suivantes à travers son historique: * gems.rubyforge.org (RubyGems 1.3.6 et versions antérieures) * rubygems.org (RubyGems 1.3. 7 à 1.8.25) * rubygems.org (RubyGems 2.0.1 et plus récent)
beauXjames
1
solution la plus rapide pour moi sur Windows 8
Tisch
3
À mon humble avis, cela ne devrait même pas être considéré comme une réponse valable, car cela ouvre votre système aux attaques de l'extérieur.
rubiii
160

La raison en est les vieux rubygèmes. Vous devez d'abord mettre à jour la partie système en utilisant une source non SSL:

gem update --system --source http://rubygems.org/ (mise à jour temporaire de la partie système à l'aide d'une connexion non SSL).

Vous êtes maintenant prêt à utiliser gem update.

Alexander.Iljushkin
la source
5
Solution vraiment simple qui est multiplateforme et permet à RubyGems de prendre soin des détails. Agréable.
zrisher
2
c'est celle qui devrait être acceptée, les réponses ci-dessus n'expliquent pas que vous devez d'abord supprimer les sources ssl
Ephraim
1
Merci - c'est le ticket. Si vous obtenez un message "pas dans le cache" lors de l'ajout ou de la suppression de sources, essayez-le avec ou sans barre oblique de fin. Il doit correspondre exactement.
Timothy Lee Russell
1
J'ai recherché de nombreuses solutions. C'est celui qui fonctionnait comme un charme. Je vous remercie! Cela devrait être choisi comme la vraie solution.
Berker Yüceer
1
Je vous remercie!! Je suis d'accord avec les autres que cela devrait être la réponse acceptée, car cela ne vous amène pas à récupérer des gemmes via HTTP simple.
Alexander
117

Si vous êtes sur un Mac et utilisez une version récente de RVM (~ 1.20), la commande suivante a fonctionné pour moi.

rvm osx-ssl-certs update
chaserx
la source
Je vous remercie! A travaillé pour moi sur Mac OSX 10.8.5
Matthew Blancarte
Merci, ça a marché pour moi aussi. J'essayais d'installer CocoaPods. rvm 1.22.15, OS X 10.8.5
Logan Moseley
1
Ceci est également signalé dans le message d'erreur "... voir bit.ly/ruby-ssl".
IAmNaN
Thankssssss !! A travaillé pour moi !! \ o /
Valter Júnior
55

Ce problème devrait maintenant être résolu. Mettez à jour rubygems ( gem update --system), assurez-vous que openssl est à la dernière version de votre système d'exploitation, ou essayez ces conseils qui ne fonctionnent toujours pas: http://railsapps.github.com/openssl-certificate-verify-failed.html

fbernier
la source
1
Nécessaire pour mettre à jour bundler aussi pour le faire fonctionner (rubygems 2.0.3 + bundler 1.3.2 + cygwin openssl 1.0.1e fonctionne pour moi sur winxp).
fakeleft
J'ai dû mettre à jour à partir de 1.3.0, maintenant je suis sur 1.3.4 et le https ne lance plus l'erreur: bundler-1.3.0 / lib / bundler / vendor / net / http / persistent / ssl_reuse.rb: 70: dans `connect ': SSL_connect retourné = 1 errno = 0 état = SSLv3 lu échange de clé du serveur B: mauvais ecpoint (OpenSSL :: SSL :: SSLError)
Jon Kern
3
Il n'est pas possible de mettre à jour rubygems si le certificat SSL n'est pas accepté! Courir en rond ici;)
kap
50

Solution temporaire (comme fait allusion à Ownatik):

Créez ou modifiez un fichier appelé .gemrc dans votre chemin d’accueil, y compris la ligne :ssl_verify_mode: 0

Cela empêchera le bundler de vérifier les certificats SSL des gemmes lorsqu'il essaie de les installer.

Pour les appareils * nix, 'home path' signifie ~/.gemrc. Vous pouvez également créer /etc/gemrcsi vous préférez. Pour Windows XP, «chemin d’accueil» signifie c:\Documents and Settings\All Users\Application Data\gemrc. Pour Windows 7,C:\ProgramData\gemrc

jachères
la source
3
%USERPROFILE%\.gemrcest également recherché par gemsur Windows.
Rômulo Ceccon
1
Emplacement de fichier recommandé pour Windows 8?
user1318135
6
La suppression de la vérification SSL est une solution temporaire qui ouvre une faille de sécurité. En savoir plus ici: github.com/rubygems/rubygems/commit/…
mrm
C'est utile dans mon cas; derrière un pare-feu d'entreprise qui restreint tous les fichiers compressés mais les autorise via https.
mydoghasworms
N'a pas essayé cette solution, mais dans mon cas a également fonctionné lorsque j'ai ajouté ce contenu à ~/.gemrc::sources: - http://rubygems.org
Artur Käpp
18

Sur windows7, vous pouvez télécharger le fichier cacert.pem à partir d' ici et définir la variable d'environnement SSL_CERT_FILE sur le chemin où vous stockez le certificat, par exemple

SET SSL_CERT_FILE="C:\users\<username>\cacert.pem"

ou vous pouvez définir la variable dans votre script comme ceci ENV['SSL_CERT_FILE']="C:/users/<username>/cacert.pem"

Remplacez <username> par votre propre nom d'utilisateur.

peter
la source
3
Je vous remercie. Le correctif permanent est ici. guides.rubygems.org/ssl-certificate-update
Maheshkumar
C'est la bonne solution permanente et évitez d'utiliser une source http non sécurisée.
Dio Phung
15

La vraie solution à ce problème, si vous utilisez RVM:

  1. Mettre à jour les rubygèmes: gem update --system
  2. Utilisez RVM pour actualiser les certificats SSL: rvm osx-ssl-certs update all

Astuce chapeau à cette astuce sur le projet RailsApps !

Alan H.
la source
1
rvm osx-ssl-certs update alla bien fonctionné pour moi. Je n'ai pas eu besoin de faire l'étape 1.
DMH
7

Pour ceux d'entre vous qui ont installé ruby ​​via RVM et qui veulent une solution rapide (préférant ne pas lire à la demande de Bruno), essayez ceci:

rvm remove 1.9.x (or whatever version of ruby you are using)
rvm pkg install openssl
rvm install 1.9.2 --with-openssl-dir=$rvm_path/usr

Pour plus de détails, voici le lien où j'ai trouvé la solution.

http://railsapps.github.com/openssl-certificate-verify-failed.html

BTW, je n'ai pas eu à toucher mes certificats sur Ubuntu.

Mieux encore, ce n'est pas une solution de contournement. Il téléchargera des gemmes via SSL et échouera s'il y a un problème comme un homme au milieu de l'attaque, ce qui est bien mieux que de simplement désactiver la sécurité.

danielrussie
la source
La page à laquelle vous liez a une "solution de contournement" (d'abord), puis des solutions appropriées. Ce serait mieux si votre réponse le disait un peu plus clairement. Néanmoins, l'utilisation de certificats CA (via cacert.pemou $rvm_path/usr/ssl) est en effet la bonne solution.
Bruno
1
Bruno, la solution sera probablement un peu différente selon la saveur d'Unix que la personne utilise. Il semble que la lecture du lien sera nécessaire.
danielrussia
Je parlais juste de la différence entre la "solution de contournement" sur la page ( :ssl_verify_mode: 0qui ouvre des problèmes), par opposition à l'une des 3 solutions ci-dessous, qui sont la bonne façon de résoudre ce problème.
Bruno
@Bruno, j'ai révisé mon article, veuillez ajouter des commentaires ou modifier le wiki si vous voyez des possibilités d'amélioration.
Daniel Kehoe
6

Cela a été corrigé

http://guides.rubygems.org/ssl-certificate-update/

Maintenant que RubyGems 2.6.x est sorti, vous pouvez mettre à jour manuellement vers cette version.

Téléchargez https://rubygems.org/downloads/rubygems-update-2.6.7.gem

Veuillez télécharger le fichier dans un répertoire que vous pourrez indiquer ultérieurement (par exemple, la racine de votre disque dur C :)

Maintenant, en utilisant votre invite de commande:

C:\>gem install --local C:\rubygems-update-2.6.7.gem
C:\>update_rubygems --no-ri --no-rdoc

Après cela, gem --version devrait signaler la nouvelle version de mise à jour.

Vous pouvez maintenant désinstaller en toute sécurité rubygems-update gem:

C:\>gem uninstall rubygems-update -x
Roffers
la source
5

Instruction de copier-coller simple donnée ici à propos du fichier .pem

https://gist.github.com/luislavena/f064211759ee0f806c88

Échec de la vérification du certificat

Si vous avez lu les sections précédentes, vous saurez ce que cela signifie (et honte> si vous ne l'avez pas fait).

Nous devons télécharger AddTrustExternalCARoot-2048.pem . Ouvrez une invite de commande et saisissez:

C:> gem qui rubygems C: /Ruby21/lib/ruby/2.1.0/rubygems.rb Maintenant, localisons ce répertoire. Dans la même fenêtre, entrez la partie du chemin jusqu'à l'extension de fichier, mais en utilisant des barres obliques inverses à la place:

C:> démarrer C: \ Ruby21 \ lib \ ruby ​​\ 2.1.0 \ rubygems Cela ouvrira une fenêtre Explorer dans le répertoire que nous avons indiqué.

Étape 3: copier un nouveau certificat de confiance

Maintenant, localisez le répertoire ssl_certs et copiez le fichier .pem obtenu à partir de l'étape précédente à l'intérieur.

Il sera répertorié avec d'autres fichiers comme GeoTrustGlobalCA.pem.

geniushkg
la source
4

même problème mais avec un bijou différent ici:

Gem::RemoteFetcher::FetchError: SSL_connect returned=1 errno=0 state=SSLv3 
read server certificate B: certificate verify failed 
(https://bb-m.rubygems.org/gems/builder-3.0.0.gem)
An error occured while installing builder (3.0.0), and Bundler cannot continue.
Make sure that `gem install builder -v '3.0.0'` succeeds before bundling.

solution temporaire: gem install builder -v '3.0.0'permet de continuerbundle install

Ludwig
la source
7
Vous pouvez également utiliser la version non ssl de rubygems dans votre gemfile comme solution de contournement temporaire.
fbernier
1
Je l'ai fait et ça marche. Pour l'instant, c'est une solution suffisante.
mrzasa
J'ai le même problème ici. Alors @Ownatik comment utiliser la version ssl de rubygems?
Zeck
4

La solution la plus simple:

rvm pkg install openssl
rvm reinstall all --force

Voila!

user2886774
la source
2
Qu'est-ce que cela fait réellement à mon système?
Bradley Flood
4

Ma solution permanente pour Windows:

  1. Télécharger le CACert , sauf que C:\ruby\ssl_certs\GlobalSignRootCA.pemde http://guides.rubygems.org/ssl-certificate-update/

  2. Créer une variable système nommée " SSL_CERT_FILE ", définie sur C:\ruby\ssl_certs\GlobalSignRootCA.pem.

  3. Réessayez gem install bundler::

C:\gem sources
*** CURRENT SOURCES ***
https://rubygems.org/

C:\gem install bundler
Fetching: bundler-1.13.5.gem (100%)
Successfully installed bundler-1.13.5
1 gem installed
Dio Phung
la source
3

Je reçois une erreur légèrement différente, bien que peut-être liée, sur Ubuntu 12.04:

Gem::RemoteFetcher::FetchError: SSL_connect returned=1 errno=0 state=unknown state: sslv3 alert handshake failure (https://d2chzxaqi4y7f8.cloudfront.net/gems/activesupport-3.2.3.gem)
An error occured while installing activesupport (3.2.3), and Bundler cannot continue.
Make sure that `gem install activesupport -v '3.2.3'` succeeds before bundling.

Ça arrive quand je cours bundle installavecsource 'https://rubygems.org' un Gemfile.

Il s'agit d'un problème avec OpenSSL sur Ubuntu 12.04. Voir le numéro 319 de Rubygems .

Pour résoudre ce problème, exécutez apt-get update && apt-get upgradesur Ubuntu 12.04 pour mettre à niveau votre OpenSSL.

Jo Liss
la source
3

J'ai pu retracer cela au fait que les binaires qui rvm téléchargements ne jouent pas bien avec OpenSSL d'OS X, qui est ancien et n'est plus utilisé par le système d'exploitation.

La solution pour moi était de forcer la compilation lors de l'installation de Ruby via rvm:

rvm reinstall --disable-binary 2.2
Schrockwell
la source
Cela a fonctionné pour moi. Vous devez remplacer "2.2" par la version rubis que vous utilisez
Josh
3

Merci à @ Alexander.Iljushkin pour:

gem update --system --source http://rubygems.org/

Après l'échec de ce bundler, la solution était:

gem install bundler

Sebastian Axe
la source
2

J'obtenais une erreur similaire. Voici comment j'ai résolu ceci: dans votre répertoire de chemin, recherchez Gemfile. Modifiez la source dans le gemfile sur http au lieu de https et enregistrez-la. Cela pourrait installer le bundler sans le problème de certificat SSL.l

ecksor5
la source
2

Pour la machine Windows, vérifiez votre version gem avec

gem --version

Ensuite, mettez à jour votre gem comme suit:

Veuillez télécharger le fichier dans un répertoire que vous pourrez indiquer ultérieurement (par exemple, la racine de votre disque dur C :)

Maintenant, en utilisant votre invite de commande:

C:\>gem install --local C:\rubygems-update-1.8.30.gem
C:\>update_rubygems --no-ri --no-rdoc

Maintenant, l'installation du bundle réussira sans erreur de vérification du certificat SSL.

Des instructions plus détaillées sont ici

KBIIX
la source
1

Cela a fonctionné pour moi:

  • téléchargez la dernière gemme sur https://rubygems.org/pages/download
  • installez la gemme avec gem install --local [path to downloaded gem file]
  • mettre à jour les gemmes avec update_rubygems
  • vérifiez que vous êtes sur la dernière version de gem avec gem --version
Guy Chauliac
la source
1

J'ai dû réinstaller openssl:

brew uninstall --force openssl
brew install openssl
gabeodess
la source
1

J'ai récemment été confronté à ce problème et j'ai suivi les étapes décrites ici . Il est possible que vous ne pointiez pas vers le bon certificat OpenSSL. Après l'exécution:

rvm osx-ssl-certs status all
rvm osx-ssl-certs update all

et

export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt

le bundle complet a couru!

jshaf
la source
1

Télécharger rubygems-update-2.6.7.gem .

Maintenant, en utilisant votre invite de commande:

C:\>gem install --local C:\rubygems-update-2.6.7.gem
C:\>update_rubygems --no-ri --no-rdoc

Après cela, gem --versiondevrait signaler la nouvelle version de mise à jour.

Vous pouvez maintenant désinstaller en toute sécurité rubygems-update gem:

C:\>gem uninstall rubygems-update -x
Removing update_rubygems
Successfully uninstalled rubygems-update-2.6.7
Aswathy
la source
1

Pour noter, si vous récupérez des gemmes d'une source à laquelle le certificat SSL est approuvé par une autorité de certification interne (ou si vous vous connectez à une source externe via un proxy Web d'entreprise avec inspection SSL), pointez votre variable env SSL_CERT_FILE vers votre chaîne de certificats . Cela nécessite probablement d'exporter votre certificat racine de votre magasin de certificats (trousseau système sur macOS) vers un emplacement accessible à partir de votre shell, à savoir:

export SSL_CERT_FILE=~/RootCert.pem
mostlikelee
la source
0

Si vous utilisez rails-assets

Si vous utilisiez https://rails-assets.org/pour gérer vos actifs, aucune réponse ne vous aidera. Même la conversion en httpn'aidera pas.

La solution la plus simple utilise à la place de cette source, http://insecure.rails-assets.org. Cela a été mentionné dans leur page d'accueil .

Anwar
la source
0

La seule chose qui a fonctionné pour moi sur le système Windows hérité et la version Ruby 1.9 est le téléchargement du fichier cacert depuis http://guides.rubygems.org/ssl-certificate-update/

Et puis exécuter la commande ci-dessous avant d'exécuter l'installation du bundle

bundle config --global ssl_ca_cert /path/to/file.pem
Aleksandar Pavić
la source