Ошибка сертификата 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-адресов.
Daniel Stenberg
2
@daniel За исключением того, что обычный способ заставить curl перестать жаловаться на плохой сертификат SSL, -k, здесь не может быть использован, потому что curl управляется rvm. Кстати, вам следует тщательно подумать, действительно ли вы хотите, чтобы curl игнорировал плохие сертификаты SSL. Одна вещь , вы можете попробовать, чтобы дать локон на новую CA сверток . Ответ @dorothy ниже должен работать.
Дэн Бароуи 07
@dan: так что прочтите сообщение об ошибке еще раз. Он не особо предлагает вам игнорировать плохие сертификаты (я написал это сообщение об ошибке), он четко объясняет, что вы можете сделать, и предоставляет URL-адрес с полным описанием, включая подробности о том, как получить обновленные сертификаты CA.
Дэниел Стенберг
1
@daniel: дело в том, что сообщение об ошибке предназначено для curl, а не для rvm! Вы можете читать предлагаемое решение curl все, что хотите, но если вы не можете изменить вызов curl rvm, вы застряли. Я сам пробовал обновить пакет SSL curl (установка CURL_CA_BUNDLE), и это не сработало - на самом деле что-то не так с удаленным сертификатом SSL, на котором размещен архив yaml, а не просто устаревший пакет CA curl. Рассказывая пользователь RTFM хорошо , если чтение вывода действительно делает исправить эту проблему, но это не тот случай. Опять же, см. Ответ ниже, который действительно решает проблему.
Дэн Бароуи 08

Ответы:

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

jwadsack
источник
1
Хотел бы я сначала увидеть этот ответ. Установка 1.9.3 в Mac OS X с RVM не работала даже с решениями, предложенными выше. Однако обновление RVM помогло.
chris_radcliff
Это было то, что помогло мне (обновление с 1.9.2 до 1.9.3), спасибо @jwadsack
Анна Биллстром
в эти дни при выполнении указанной команды появляется сообщение, в котором говорится: «Вы используете старый и сломанный пакет 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, но у меня есть отдельные проблемы с другой частью усложнения.
Emerson
4
Теперь я могу установить rvm на CentOS. Большое спасибо
channa ly
Ничего не делает в OSX Lion w / rvm 1.8.3.
Марк Ричман
Хорошо работает на Centos5.4. Спасибо.
Yejun Su 04
Работает как шарм на OSX Mountain Lion, чтобы получить ruby ​​2.0.0.
Arkan
21

Curl вызывается в .rvm / scripts / fetch, который по умолчанию находится в вашем домашнем каталоге.

Отредактируйте это с помощью вашего любимого текстового редактора: например,

 nano ~/.rvm/scripts/fetch

В строках 56 и 58 (конечно, могут отличаться от других версий RVM) вы увидите две строки, которые начинаются

 fetch_command="curl ...

Просто добавьте -k после curl, сохраните и попробуйте снова.

Ричард Фэрхерст
источник
9
У меня это не сработало, но я последовал вашей идее и нашел альтернативу: создайте файл ".curlrc" в своей домашней папке ('~ / .curlrc'). Откройте его в любом редакторе и введите "небезопасный" в файл. Сохраните файл и надейтесь на лучшее.
Джулиан Веймер
8
RVM никогда не будет включать это изменение, мы не рекомендуем делать это таким образом, если вам нужно использовать небезопасный (-k), просто вызовите echo insecure >> ~/.curlrcили, что еще лучше, просто обновите сертификаты в соответствии с инструкциями
@dbikard
работал над debian squeeze. Даже более старые сообщения могут сэкономить много времени;) thx!
23tux
@mpapis Я полностью согласен, но ошибка, объясняющая, например, решение user620965 в ошибках установки RVM, была бы замечательной
Houen
3
Скорее всего, это связано с изменением URL-адреса на rvm.io, упомянутым в сообщении ниже, и это правильный способ решить эту проблему. Вам не нужно игнорировать сертификаты SSL или поведение curl. Просто обновите rvm с правильного URL, введя $ curl -L get.rvm.io | bash -s stable, как показано ниже
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.
Anirudh
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.

jerikl
источник
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. Вам нужно сделать Windows-эквивалент CHMOD 777 - в папке rvm / src для извлеченных файлов. Измените безопасность, чтобы у всех были права собственности / все права, и отключите атрибут только для чтения для всех файлов и папок.

Программа установки по-прежнему будет выдавать ошибки при попытке загрузки (ошибка CURL), но продолжит работу, пытаясь извлечь. Извлечение вызовет ошибки, потому что tarball уже извлечен в папку src. Следующий шаг настройки YAML должен работать без ошибок, если разрешения на шаге 3 были установлены правильно и установка должна завершиться без дальнейших проблем. (При установке через cygwin / bash вам нужно будет добавить компилятор C, например 'gcc', и добавить 'ncurses' (команда tput) и 'make' к параметрам настройки ядра cygwin по умолчанию.)

Duke3D
источник
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
Владимир Ха
источник