Помилка сертифіката Curl при використанні RVM для встановлення Ruby 1.9.2


90

RVM стикається з помилкою сертифіката під час спроби завантажити Ruby 1.9.2. Схоже curl, у вас проблема із сертифікатом, але я не знаю, як його обійти. Я вказав точну інформацію про помилку нижче.

$ 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.

Як я можу вирішити або уникнути цієї помилки?


Ви встановили всі попередні залежності, щоб скомпілювати цю версію Ruby?
eveevans

Вся проблема та запропоноване рішення вказані в дуже тривалому повідомленні про помилку. Я не думаю, що повторення цього тексту у відповіді тут дуже допоможе. Для початку прочитайте згадані URL-адреси.
Даніель Стенберг,

2
@daniel За винятком того, що звичайний спосіб змусити curl припинити скаржитися на поганий SSL-сертифікат, -k, тут не можна використовувати, оскільки curl керується rvm. До речі, вам слід добре подумати над тим, чи справді ви хочете дозволити curl ігнорувати погані сертифікати SSL. Одна річ , ви можете спробувати, щоб дати локон на нову CA згорток . Відповідь @ dorothy нижче має спрацювати.
Dan Barowy

@dan: так що прочитайте повідомлення про помилку ще раз. Це не особливо рекомендує вам ігнорувати погані сертифікати (я написав це повідомлення про помилку), воно чітко пояснює, що ви можете зробити, і надає URL-адресу з повним описом, включаючи детальну інформацію про те, як отримати оновлені сертифікати ЦС.
Даніель Стенберг

1
@daniel: справа в тому, що повідомлення про помилку стосується curl, а не rvm! Ви можете прочитати запропоноване рішення curl все, що завгодно, але якщо ви не можете змінити виклик curl у rvm, ви застрягли. Я сам спробував оновити пакет SSL curl (встановивши CURL_CA_BUNDLE), і це не спрацювало - насправді щось не так із віддаленим сертифікатом SSL, в якому розміщується tarball yaml, а не просто застарілий пакет CA curl. Розповідаючи користувач RTFM добре , якщо читання виведення дійсно робить виправити цю проблему, але це НЕ той випадок. Знову ж, див. Відповідь нижче, яка насправді вирішує проблему.
Dan Barowy

Відповіді:


125

Якщо хтось ще стикається з цим під час спроби оновлення до 1.9.3 (хоча версія, ймовірно, не має значення), перевірте, яку версію rvm у вас є. Здається, Уейн перейшов з rvm.beginrescueend.com на rvm.io. Термін дії сертифіката безпеки старого сайту закінчився, тому відповідь curl правильна.

Оновлення rvm з нового сайту вирішило цю проблему і дозволило рухатися вперед.

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

Оновлення : Як згадував @rodgerdpack, команда змінюється, і я оновив вищезазначене. Загалом, останні новини див. На https://rvm.io/ .


1
Я би хотів, щоб спочатку побачив цю відповідь. Встановлення 1.9.3 на Mac OS X з RVM не спрацювало навіть із запропонованими вище рішеннями. Однак оновлення RVM зробило свою справу.
chris_radcliff

Це зробило це для мене теж (оновлення з 1.9.2 до 1.9.3) завдяки @jwadsack
Anna Billstrom

в ці дні працює на команду , яку ви згадуєте дає повідомлення , яке говорить «ви працюєте старий і зламаний пакет Ubuntu, см stackoverflow.com/questions/9056008 / ... для того, як це виправити»
rogerdpack

40

Якщо ви не хочете змінювати сценарій І ви не хочете додавати сертифікат "назавжди" до набору сертифікатів. Є дуже приємне і швидке рішення:

#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

Потім запустіть свій сценарій. Щоб скинути змінну середовища (для наступних викликів скриптів, які не повинні використовувати цей сертифікат), повторно увійдіть до системи або скасуйте змінну середовища:

export CURL_CA_BUNDLE=

Це вирішило проблему з yaml, але у мене є окремі проблеми з якоюсь іншою частиною ускладнення.
Емерсон,

4
Тепер я можу отримати rvm для встановлення на CentOS.
Щиро

Нічого не робить на OSX Lion w / rvm 1.8.3.
Марк Річман,

Добре працює на Centos5.4. Дякую.
Йеджун Су

Працює як шарм на OSX Mountain Lion, щоб отримати рубін 2.0.0.
Аркан

21

Curl викликається в .rvm / scripts / fetch, який за замовчуванням буде у вашому домашньому каталозі.

Відредагуйте це за допомогою улюбленого текстового редактора: наприклад,

 nano ~/.rvm/scripts/fetch

У рядках 56 та 58 (звичайно, можуть відрізнятися залежно від інших версій RVM) ви побачите два рядки, які починаються

 fetch_command="curl ...

Просто додайте -k після скручування, збережіть і повторіть спробу.


9
У мене це не спрацювало, але я дотримався вашої ідеї та з’ясував таку альтернативу: Створіть файл „.curlrc“ у вашій домашній папці ('~ / .curlrc'). Відкрийте його в будь-якому редакторі та введіть у файл "небезпечно". Збережіть файл і сподівайтесь на краще.
Джуліан Ваймер

8
RVM ніколи не буде включати цю зміну, ми не рекомендуємо робити це таким чином, якщо вам потрібно використовувати небезпечний (-k), просто зателефонуйте echo insecure >> ~/.curlrcабо ще краще просто оновіть сертифікати відповідно до інструкцій
@dbikard

працював над стисканням debian. Навіть старіші публікації можуть заощадити багато часу;) thx!
23tux

@mpapis Я повністю згоден, але помилка, яка пояснює, наприклад, рішення user620965 у помилках встановлення RVM, була б чудовою
Хоуен

3
Це, швидше за все, через зміну URL-адреси на rvm.io, згадану у дописі нижче, і є правильним способом вирішення цієї проблеми. Вам не потрібно ігнорувати сертифікати SSL або поведінку скручування. Просто оновіть rvm із відповідної URL-адреси, видавши $ curl -L get.rvm.io | bash -s стабільний, як показано нижче
cclark

20

Вам потрібно завантажити сертифікат ca з http://curl.haxx.se/ca/cacert.pem і додати їх у файл curl-ca-bundle-new.crt.

Щоб знайти розташування цього файлу, використовуйте:

   $ curl-config --ca

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

Створіть резервну копію файлу curl-ca-bundle.crt:

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

Потім ви хочете об’єднати два файли за допомогою:

$ cat cacert.pem /usr/share/curl/curl-ca-bundle.crt >> curl-ca-bundle-new.crt

Дякую, ви заощадили мені трохи часу!
Tadas T

Це (могло б) заощадило мені ГОДИНИ на OpenIndiana 151. Якби я міг проголосувати більше одного разу, я б.
Ендрю Бернс,

Це працювало для мене на CentOS 5.8; Сертифікати знаходяться в / etc / pki / certs / для тих, кому потрібно знайти його на CentOS!
geedew

І що ви робите з отриманим curl-ca-bundle-new.crt?
Валеріо Скьявоні

Новий файл сертифіката повинен бути присутнім у каталозі, знайденому за допомогою 'curl-config --ca'.
Аніруд,

17

Можливо, всі ці складні рішення колись були необхідними, але тепер все, що вам потрібно зробити, це спочатку оновити RVM, і ваша проблема буде вирішена:

$ rvm get stable
$ rvm reload
$ rvm install ruby-1.9.3-p194

2
На жаль, якщо ваша версія RVM досить стара, функція "rvm get head" навіть не працює. Відповідь @ jwadsack пояснює, чому.
Alex D

так, це правда. Крім того, озираючись на мою відповідь, "rvm get head" теж не найкраща порада. Це справді має бути "rvm get stable". Я збираюся відредагувати свою відповідь, щоб відобразити це.
Нік Мессік

14

Якщо ви не проти вимкнути сертифікат, перевірте curl (я не):

echo insecure > ~/.curlrc

11

На Centos 5.6 (Final) у мене виникла проблема з встановленням rvm 1.9.2 Помилка:

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.

Ось перелік дій, які допомогли мені вирішити проблему

$ 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

До речі, версія curl - curl 7.18.0 (перевірити '$ curl -V')


1
Хороше рішення, у моєму випадку у мене була ця помилка при виконанні "rvm get head". І будьте обережні в linux з іменем файлу curl-ca-bundle.crt! відрізняється
Альберт Катала

3

Я намагався встановити ruby-1.9.2-p290і натрапив на ту ж проблему. Після запуску which curlта усвідомлення того, що екземпляр curl походить від інсталяції MAMP у моїй системі (OS X Snow Leopard), я переконфігурував свою PATHзмінну, щоб використовувати системну за замовчуванням /usr/bin/curl. Використовуючи цю версію, у curl 7.19.7мене не виникло проблем з установкою останньої версії Ruby з RVM.


2

У мене виникли проблеми з установкою 1.9.2 за допомогою RVM, ось моє рішення:

  • Завантажте yaml-0.1.3.tar.gz з http://www.filewatcher.com/m/yaml-0.1.3.tar.gz.466845.0.0.html
  • Збережіть його в /Users//.rvm/archives/yaml-0.1.3.tar.gz
  • Виконайте такі команди:

    chmod 777 yaml-0.1.3.tar.gz

    tar zxf /Users//.rvm/archives/yaml-0.1.3.tar.gz -C /Users//.rvm/src

Я все ще отримав помилку у файлі, який не знайшов, але встановлення продовжилося успішно

[2011-07-05 14:24:07] tar zxf /Users//.rvm/archives/yaml-0.1.3.tar.gz -C /Users//.rvm/src - no-same-owner tar (дочірній): /Users//.rvm/archives/yaml-0.1.3.tar.gz: Не вдається відкрити: Немає такого файлу або каталогу tar (дочірній): Помилка не відновлюється: вихід зараз tar: Дочірній статус повернено 2 tar : Вихід помилки затриманий із попередніх помилок


1
Я зробив щось подібне і дуже добре працював: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
Вей

Тільки це рішення працювало для мене на Mac Osx Lion. Дуже дякую!
Крістіан Треппо,

1

Дякую Дороті - цей рецепт для мене працював із наступними незначними модифікаціями для середовища Win7:

Для інших, хто має це питання -

  1. Цінуємо дискусію щодо оновлення CA_Bundle - це добре зробити, але це не допомогло з цією проблемою - сертифікат веб-сайту pyyaml ​​все одно змусить CURL видавати помилку, і оскільки CURL запускається в програмі встановлення, немає можливості додати параметр -k .

  2. Ruby 1.9.2-p290 намагається встановити YAML 0.1.4, тому Google для дзеркала і завантажить цю версію - YAML-0.1.3 не матиме ефекту в обхід проблем.

  3. Вам потрібно зробити вікно, еквівалентне CHMOD 777 - у папці rvm / src для вилучених файлів. Змініть захист, щоб кожен мав право власності / всі привілеї, і вимкніть атрибут лише для читання для всіх файлів і папок.

Інсталятор все одно видасть помилки під час спроби завантаження (помилка CURL), але продовжить роботу, спробувавши витягти. Витяг призведе до помилок, оскільки tarball вже витягнуто до папки src. Наступний крок налаштування YAML повинен працювати без помилок, якщо дозволи на кроці 3 були встановлені правильно, а інсталяція повинна завершитися без подальших проблем. (Якщо встановлюється за допомогою cygwin / bash, вам потрібно буде додати компілятор C, такий як 'gcc', та додати 'ncurses' (команда tput) та 'make' до основних параметрів налаштування cygwin за замовчуванням.)


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.