Erreur de certificat Curl lors de l'utilisation de RVM pour installer Ruby 1.9.2

90

RVM rencontre une erreur de certificat lors de la tentative de téléchargement de Ruby 1.9.2. Il semble curlavoir un problème de certificat, mais je ne sais pas comment le contourner. J'ai inclus les informations d'erreur exactes ci-dessous.

$ rvm install 1.9.2
Installing Ruby from source to: /Users/willdennis/.rvm/rubies/ruby-1.9.2-p180, this may take a while depending on your cpu(s)...

ruby-1.9.2-p180 - #fetching 
ERROR: Error running 'bunzip2 '/Users/willdennis/.rvm/archives/ruby-1.9.2-p180.tar.bz2'', please read /Users/willdennis/.rvm/log/ruby-1.9.2-p180/extract.log
ruby-1.9.2-p180 - #extracting ruby-1.9.2-p180 to /Users/willdennis/.rvm/src/ruby-1.9.2-p180
ruby-1.9.2-p180 - #extracted to /Users/willdennis/.rvm/src/ruby-1.9.2-p180
Fetching yaml-0.1.3.tar.gz to /Users/willdennis/.rvm/archives

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). The default
 bundle is named curl-ca-bundle.crt; you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.
ERROR: There was an error, please check /Users/willdennis/.rvm/log/ruby-1.9.2-p180/*.log. Next we'll try to fetch via http.
Trying http:// URL instead.

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). The default
 bundle is named curl-ca-bundle.crt; you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.
ERROR: There was an error, please check /Users/willdennis/.rvm/log/ruby-1.9.2-p180/*.log
Extracting yaml-0.1.3.tar.gz to /Users/willdennis/.rvm/src
ERROR: Error running 'tar zxf /Users/willdennis/.rvm/archives/yaml-0.1.3.tar.gz -C /Users/willdennis/.rvm/src --no-same-owner', please read /Users/willdennis/.rvm/log/ruby-1.9.2-p180/yaml/extract.log
/Users/willdennis/.rvm/scripts/functions/packages: line 55: cd: /Users/willdennis/.rvm/src/yaml-0.1.3: No such file or directory
Configuring yaml in /Users/willdennis/.rvm/src/yaml-0.1.3.
ERROR: Error running ' ./configure --prefix="/Users/willdennis/.rvm/usr"  ', please read /Users/willdennis/.rvm/log/ruby-1.9.2-p180/yaml/configure.log
Compiling yaml in /Users/willdennis/.rvm/src/yaml-0.1.3.
ERROR: Error running '/usr/bin/make ', please read /Users/willdennis/.rvm/log/ruby-1.9.2-p180/yaml/make.log
Installing yaml to /Users/willdennis/.rvm/usr
ERROR: Error running '/usr/bin/make install', please read /Users/willdennis/.rvm/log/ruby-1.9.2-p180/yaml/make.install.log
ruby-1.9.2-p180 - #configuring 
ERROR: Error running ' ./configure --prefix=/Users/willdennis/.rvm/rubies/ruby-1.9.2-p180 --enable-shared --disable-install-doc --with-libyaml-dir=/Users/willdennis/.rvm/usr ', please read /Users/willdennis/.rvm/log/ruby-1.9.2-p180/configure.log
ERROR: There has been an error while running configure. Halting the installation.

Comment puis-je résoudre ou éviter cette erreur?

Will Dennis
la source
aviez-vous installé toutes les dépendances précédentes afin de compiler cette version de Ruby?
eveevans
L'ensemble du problème et la solution suggérée sont indiqués dans le très long message d'erreur. Je ne pense pas que répéter ce texte dans une réponse ici aidera beaucoup. Commencez par lire les URL mentionnées.
Daniel Stenberg
2
@daniel Sauf que la manière normale de faire cesser curl de se plaindre d'un mauvais certificat SSL, -k, ne peut pas être utilisé ici, car curl est piloté par rvm. BTW, vous devriez réfléchir soigneusement à la question de savoir si vous voulez vraiment autoriser curl à ignorer les mauvais certificats SSL. Une chose que vous pouvez essayer est de donner boucle un paquet plus récent de CA . La réponse de @ dorothy ci-dessous devrait fonctionner.
Dan Barowy
@dan: alors relisez le message d'erreur. Il ne vous suggère pas particulièrement d'ignorer les mauvais certificats (j'ai écrit ce message d'erreur), il explique clairement ce que vous pouvez faire et il fournit une URL avec une description complète, y compris des détails sur la façon d'obtenir des certificats CA mis à jour.
Daniel Stenberg
1
@daniel: le fait est que le message d'erreur est pour curl, pas pour rvm! Vous pouvez lire la solution suggérée par curl autant que vous le souhaitez, mais si vous ne pouvez pas modifier l'invocation de curl par rvm, vous êtes bloqué. J'ai moi-même essayé de mettre à jour le bundle SSL de curl (paramètre CURL_CA_BUNDLE) et cela n'a pas fonctionné - il y a en fait quelque chose qui ne va pas avec le certificat SSL distant qui héberge l'archive tar yaml, pas seulement un bundle curl CA obsolète. Informer un utilisateur de RTFM est très bien si la lecture de la sortie résout vraiment le problème, mais ce n'est pas le cas ici. Encore une fois, voyez la réponse ci-dessous qui résout réellement le problème.
Dan Barowy

Réponses:

125

Au cas où quelqu'un d'autre rencontrerait cela en essayant de mettre à jour vers la 1.9.3 (bien que la version n'ait probablement pas d'importance), vérifiez la version de rvm que vous avez. Wayne semble être passé de rvm.beginrescueend.com à rvm.io. Le certificat de sécurité de l'ancien site a expiré, la réponse de curl est donc correcte.

La mise à jour de rvm depuis le nouveau site a résolu ce problème et m'a permis d'avancer.

$ \curl -L https://get.rvm.io | bash -s stable --rails --autolibs=enabled

Mise à jour : comme @rodgerdpack l'a mentionné, la commande change et j'ai mis à jour ce qui précède. En général, voir https://rvm.io/ pour la dernière.

jwadsack
la source
1
J'aurais aimé voir cette réponse en premier. L'installation de 1.9.3 sur Mac OS X avec RVM ne fonctionnait pas, même avec les solutions proposées ci-dessus. La mise à jour de RVM a cependant fait l'affaire.
chris_radcliff
C'est ce qui l'a fait pour moi aussi (mise à niveau de 1.9.2 à 1.9.3) merci @jwadsack
Anna Billstrom
ces jours-ci, l'exécution de la commande que vous mentionnez donne un message qui dit "vous exécutez un paquet ubuntu ancien et cassé, voir stackoverflow.com/questions/9056008/... pour savoir comment le réparer"
rogerdpack
40

Si vous ne souhaitez pas modifier le script ET que vous ne souhaitez pas ajouter un certificat "pour toujours" au bundle de certificats. Il existe une solution très agréable et rapide:

#to download the cert
wget http://curl.haxx.se/ca/cacert.pem
#to let curl use it for the next calls
export CURL_CA_BUNDLE=~/cacert.pem

Ensuite, exécutez votre script. Pour réinitialiser la variable d'environnement (pour les appels de script ultérieurs qui ne devraient pas utiliser ce certificat), reconnectez-vous à votre système ou désactivez la variable d'environnement:

export CURL_CA_BUNDLE=
DanielaWaranie
la source
Cela a résolu un problème avec yaml, mais j'ai des problèmes séparés avec une autre partie de la complication.
Emerson
4
Maintenant, je peux installer rvm sur CentOS. Merci beaucoup
channa ly
Ne fait rien sur OSX Lion w / rvm 1.8.3.
Mark Richman
Fonctionne bien sur Centos5.4. Je vous remercie.
Yejun Su
Fonctionne comme un charme sur OSX Mountain Lion afin d'obtenir ruby ​​2.0.0.
Arkan
21

Curl est appelé dans .rvm / scripts / fetch, qui par défaut sera dans votre répertoire personnel.

Modifiez-le à l'aide de votre éditeur de texte préféré: par exemple,

 nano ~/.rvm/scripts/fetch

Aux lignes 56 et 58 (peut varier avec d'autres versions de RVM, bien sûr), vous verrez deux lignes qui commencent

 fetch_command="curl ...

Ajoutez simplement -k après curl, enregistrez et réessayez.

Richard Fairhurst
la source
9
Cela n'a pas fonctionné pour moi, mais j'ai suivi votre idée et j'ai trouvé cette alternative: Créez un fichier ".curlrc" dans votre dossier personnel ('~ / .curlrc'). Ouvrez-le dans n'importe quel éditeur et tapez «non sécurisé» dans le fichier. Enregistrez le fichier et espérez le meilleur.
Julian Weimer
8
RVM n'inclura jamais ce changement, nous déconseillons de le faire de cette façon, si vous avez besoin d'utiliser non sécurisé (-k), appelez simplement echo insecure >> ~/.curlrcou mieux, mettez simplement à jour les certificats selon les instructions
@dbikard
travaillé sur debian squeeze. Même les messages plus anciens peuvent gagner beaucoup de temps;) thx!
23tux
@mpapis Je suis tout à fait d'accord, mais une erreur expliquant par exemple la solution de user620965 dans les erreurs d'installation RVM serait géniale
Houen
3
Cela est probablement dû au changement d'URL de rvm.io mentionné dans l'article ci-dessous et c'est la bonne façon de résoudre ce problème. Vous n'avez pas besoin d'ignorer les certificats SSL ou le comportement de curl. Mettez simplement à jour rvm à partir de l'URL appropriée en émettant $ curl -L get.rvm.io | bash -s stable comme indiqué ci-dessous
cclark
20

Vous devez télécharger le certificat ca depuis http://curl.haxx.se/ca/cacert.pem et les ajouter à votre fichier curl-ca-bundle-new.crt.

Pour trouver l'emplacement de ce fichier, utilisez:

   $ curl-config --ca

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

Sauvegardez votre fichier curl-ca-bundle.crt:

$ cp /usr/share/curl/curl-ca-bundle.crt /usr/share/curl/curl-ca-bundle.crt.old

Ensuite, vous souhaitez concaténer les deux fichiers en utilisant:

$ cat cacert.pem /usr/share/curl/curl-ca-bundle.crt >> curl-ca-bundle-new.crt
dbikard
la source
Merci, tu m'as fait gagner du temps!
Tadas T du
Cela (m'aurait) sauvé des HEURES sur OpenIndiana 151. Si je pouvais voter plus d'une fois, je le ferais.
Andrew Burns
Cela a fonctionné pour moi sur CentOS 5.8; Les certificats sont situés dans / etc / pki / certs / pour ceux qui ont besoin de les trouver sur CentOS!
geedew
Et que faites-vous avec le curl-ca-bundle-new.crt résultant?
Valerio Schiavoni
Le nouveau fichier de certificat doit être présent dans le répertoire trouvé à l'aide de 'curl-config --ca'.
Anirudh
17

Peut-être que toutes ces solutions compliquées étaient autrefois nécessaires, mais il ne vous reste plus qu'à mettre à niveau RVM et votre problème sera résolu:

$ rvm get stable
$ rvm reload
$ rvm install ruby-1.9.3-p194
Nick Messick
la source
2
Malheureusement, si votre version de RVM est suffisamment ancienne, "rvm get head" ne fonctionne même pas. La réponse de @ jwadsack explique pourquoi.
Alex D
Ouais c'est vrai. De plus, en regardant ma réponse, "rvm get head" n'est pas non plus le meilleur conseil. Cela devrait vraiment être "rvm get stable". Je vais modifier ma réponse pour refléter cela.
Nick Messick
14

Si cela ne vous dérange pas de désactiver la vérification des certificats dans curl (je ne le fais pas):

echo insecure > ~/.curlrc
Vojto
la source
11

Sur Centos 5.6 (Final), j'ai eu un problème avec l'installation de rvm 1.9.2 L'erreur était:

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). The default
 bundle is named curl-ca-bundle.crt; you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.
ERROR: There was an error, please check /usr/local/rvm/log/ruby-1.9.2-p290/*.log. Next we'll try to fetch via http.
Trying http:// URL instead.

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). The default
 bundle is named curl-ca-bundle.crt; you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.
ERROR: There was an error, please check /usr/local/rvm/log/ruby-1.9.2-p290/*.log
ERROR: There has been an error while trying to fetch the source.  
Halting the installation.
ERROR: There has been an error fetching the ruby interpreter. Halting the installation.

Voici une liste d'actions qui m'ont aidé à résoudre le problème

$ curl-config --ca # show path to the certificate
/usr/local/share/curl/curl-ca-bundle.crt
$ cd /usr/local/share/curl/ # go to that path
$ cp curl-ca-bundle.crt curl-ca-bundle.crt.bak # backup certificate
$ curl http://curl.haxx.se/ca/cacert.pem -o curl-ca-bundle.crt # download new
$ rvm install 1.9.2 # bingo it works

La version btw curl est curl 7.18.0 (pour vérifier '$ curl -V')

Serge Seletskyy
la source
1
Bonne solution, dans mon cas, j'ai eu cette erreur lors de l'exécution de "rvm get head". Et soyez prudent sous linux avec le nom de fichier curl-ca-bundle.crt! est différent
Albert Català
3

J'essayais d'installer ruby-1.9.2-p290et suis tombé sur le même problème. Après avoir exécuté which curlet réalisé que l'instance curl provenait d'une installation de MAMP sur mon système (OS X Snow Leopard), j'ai reconfiguré ma PATHvariable pour utiliser la valeur par défaut du système à /usr/bin/curl. En utilisant cette version, curl 7.19.7je n'ai eu aucun problème à installer la dernière version de Ruby avec RVM.

Jerikl
la source
2

J'ai eu du mal à installer 1.9.2 en utilisant RVM, voici ma solution:

J'ai toujours l'erreur de fichier introuvable mais l'installation a réussi

[2011-07-05 14:24:07] tar zxf /Users//.rvm/archives/yaml-0.1.3.tar.gz -C /Users//.rvm/src - tar sans même propriétaire (enfant): /Users//.rvm/archives/yaml-0.1.3.tar.gz: impossible d'ouvrir: aucun fichier ou répertoire de ce type tar (enfant): l'erreur ne peut pas être récupérée: quitter maintenant tar: l'enfant a renvoyé l'état 2 tar : Sortie d'erreur retardée par rapport aux erreurs précédentes

Dorothy Dorothy
la source
1
J'ai fait quelque chose de similaire et j'ai très bien fonctionné:wget http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz; cp yaml-0.1.4.tar.gz /Users/yourname/.rvm/archives; rvm install default
Wei
Seule cette solution a fonctionné pour moi sur Mac Osx Lion. Merci beaucoup!
Christian Treppo
1

Merci Dorothy - cette recette a fonctionné pour moi avec les modifications mineures suivantes pour un environnement Win7:

Pour les autres avec ce problème -

  1. J'apprécie la discussion sur la mise à jour de CA_Bundle - C'est bien à faire mais cela n'a pas aidé avec ce problème - le certificat de site Web pyyaml ​​provoquera toujours une erreur de CURL et comme CURL est lancé dans le programme d'installation, aucun moyen d'ajouter une option -k .

  2. Ruby 1.9.2-p290 essaie d'installer YAML 0.1.4 donc Google pour un miroir et télécharger cette version - YAML-0.1.3 n'aura aucun effet pour contourner les problèmes.

  3. Vous devez faire l'équivalent Windows de CHMOD 777 - dans le dossier rvm / src pour les fichiers extraits. Modifiez la sécurité de sorte que tout le monde ait la propriété / tous les privilèges et désactivez l'attribut en lecture seule pour tous les fichiers et dossiers.

Le programme d'installation lancera toujours des erreurs lorsqu'il essaiera de télécharger (erreur CURL), mais reprendra en essayant d'extraire. L'extraction lancera des erreurs car l'archive tar est déjà extraite dans le dossier src. L'étape suivante de configuration de YAML devrait fonctionner sans erreur si les autorisations de l'étape 3 ont été définies correctement et l'installation doit se terminer sans autres problèmes. (Si vous installez via cygwin / bash, vous devrez ajouter un compilateur C comme 'gcc' et ajouter 'ncurses' (commande tput) et 'make' aux options de configuration de cygwin par défaut.)

Duke3D
la source
0
$ sudo apt-get install curl

$ curl -L https://get.rvm.io | bash -s stable --ruby   with ruby

$ curl -L https://get.rvm.io | bash -s stable --rails   with rails
Uladz Kha
la source