Błąd certyfikatu Curl podczas używania RVM do instalacji Rubiego 1.9.2

90

Podczas próby pobrania Ruby 1.9.2 program RVM wyświetla błąd certyfikatu. Wygląda na curlto, że występuje problem z certyfikatem, ale nie wiem, jak go ominąć. Poniżej zamieściłem dokładne informacje o błędzie.

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

Jak mogę rozwiązać lub uniknąć tego błędu?

Will Dennis
źródło
czy zainstalowałeś wszystkie poprzednie zależności, aby skompilować tę wersję Rubiego?
eveevans
Cały problem i sugerowane rozwiązanie jest opisane w bardzo obszernym komunikacie o błędzie. Nie sądzę, żeby powtórzenie tego tekstu w odpowiedzi bardzo pomogło. Zacznij od przeczytania podanych adresów URL.
Daniel Stenberg
2
@daniel Z wyjątkiem tego, że normalny sposób, aby curl przestał narzekać na zły certyfikat SSL, -k, nie może być tutaj użyty, ponieważ curl jest sterowany przez rvm. Przy okazji, powinieneś dokładnie przemyśleć, czy naprawdę chcesz pozwolić curl na ignorowanie złych certyfikatów SSL. Jedną z rzeczy, można spróbować jest dać curl do nowszej CA zawiniątko . Odpowiedź @ dorothy poniżej powinna działać.
Dan Barowy
@dan: więc przeczytaj ponownie komunikat o błędzie. Nie sugeruje szczególnie ignorowania złych certyfikatów (napisałem ten komunikat o błędzie), jasno wyjaśnia, co możesz zrobić, i zapewnia adres URL z pełnym opisem, w tym szczegółami, jak uzyskać zaktualizowane certyfikaty CA.
Daniel Stenberg,
1
@daniel: chodzi o to, że komunikat o błędzie dotyczy curl, a nie rvm! Możesz przeczytać sugerowane rozwiązanie curl, ile chcesz, ale jeśli nie możesz zmodyfikować wywołania curl przez rvm, utkniesz. Sam próbowałem zaktualizować pakiet SSL curl (ustawienie CURL_CA_BUNDLE) i to nie zadziałało - w rzeczywistości jest coś nie tak ze zdalnym certyfikatem SSL, który obsługuje archiwum yaml, a nie tylko nieaktualny pakiet curl CA. Informując użytkownika do RTFM jest w porządku, jeśli czyta wyjście naprawdę nie rozwiązuje problemu, ale to nie w tym przypadku. Ponownie zobacz odpowiedź poniżej, która faktycznie rozwiązuje problem.
Dan Barowy

Odpowiedzi:

125

W przypadku, gdy ktoś napotka to podczas próby aktualizacji do 1.9.3 (chociaż wersja prawdopodobnie nie ma znaczenia), sprawdź wersję rvm, którą masz. Wygląda na to, że Wayne przeniósł się z rvm.beginrescueend.com do rvm.io. Certyfikat bezpieczeństwa starej witryny wygasł, więc odpowiedź curl jest poprawna.

Aktualizacja rvm z nowej strony rozwiązała ten problem i pozwoliła mi przejść dalej.

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

Aktualizacja : jak wspomniał @rodgerdpack, polecenie się zmienia i zaktualizowałem powyższe. Ogólnie, najnowsze informacje można znaleźć na stronie https://rvm.io/ .

jwadsack
źródło
1
Żałuję, że najpierw nie zobaczyłem tej odpowiedzi. Instalacja 1.9.3 na Mac OS X z RVM nie działała, nawet z rozwiązaniami zaproponowanymi powyżej. Jednak aktualizacja RVM załatwiła sprawę.
chris_radcliff
To właśnie zrobiło to dla mnie (aktualizacja z 1.9.2 do 1.9.3) dzięki @jwadsack
Anna Billstrom.
w dzisiejszych czasach uruchomienie polecenia, o którym wspomniałeś, powoduje wyświetlenie komunikatu „masz stary i zepsuty pakiet ubuntu, zobacz stackoverflow.com/questions/9056008/… aby dowiedzieć się, jak to naprawić”
rogerdpack
40

Jeśli nie chcesz zmieniać skryptu ORAZ nie chcesz dodawać certyfikatu „na zawsze” do pakietu certyfikatów. Jest bardzo ładne i szybkie rozwiązanie:

#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

Następnie uruchom skrypt. Aby zresetować zmienną środowiskową (dla kolejnych wywołań skryptów, które nie powinny używać tego certyfikatu), zaloguj się ponownie do systemu lub usuń ustawienie zmiennej środowiskowej:

export CURL_CA_BUNDLE=
DanielaWaranie
źródło
To rozwiązało problem z yamlem, ale mam osobne problemy z inną częścią komplikacji.
Emerson
4
Teraz mogę zainstalować rvm na CentOS. Dziękuję bardzo
channa ly
Nie działa na OSX Lion w / rvm 1.8.3.
Mark Richman,
Działa dobrze na Centos 5.4. Dziękuję Ci.
Yejun Su,
Działa jak urok na OSX Mountain Lion, aby uzyskać Ruby 2.0.0.
Arkan
21

Curl jest wywoływany w .rvm / scripts / fetch, który domyślnie będzie w twoim katalogu domowym.

Edytuj to za pomocą swojego ulubionego edytora tekstu: na przykład

 nano ~/.rvm/scripts/fetch

W wierszach 56 i 58 (mogą się oczywiście różnić w innych wersjach RVM) zobaczysz rozpoczynające się dwa wiersze

 fetch_command="curl ...

Po prostu dodaj -k po curl, zapisz i spróbuj ponownie.

Richard Fairhurst
źródło
9
To nie zadziałało, ale poszedłem za twoim pomysłem i znalazłem następującą alternatywę: Utwórz plik ".curlrc" w swoim katalogu domowym ('~ / .curlrc'). Otwórz go w dowolnym edytorze i wpisz „niezabezpieczone” do pliku. Zapisz plik i miej nadzieję na najlepsze.
Julian Weimer,
8
RVM nigdy nie uwzględni tej zmiany, odradzamy robienie tego w ten sposób, jeśli potrzebujesz użyć niezabezpieczonego (-k), po prostu zadzwoń echo insecure >> ~/.curlrclub nawet lepiej zaktualizuj certyfikaty zgodnie z instrukcjami
@dbikard
pracował nad debian squeeze. Nawet starsze posty mogą zaoszczędzić sporo czasu;) thx!
23tux
@mpapis Całkowicie się zgadzam, ale błąd wyjaśniający np. rozwiązanie user620965 w błędach instalacji RVM byłby świetny
Houen
3
Jest to najprawdopodobniej spowodowane zmianą adresu URL na rvm.io wymienioną w poniższym poście i jest to właściwy sposób rozwiązania tego problemu. Nie musisz ignorować certyfikatów SSL ani zawijać. Po prostu zaktualizuj rvm z właściwego adresu URL, wydając $ curl -L get.rvm.io | bash -s stabilny, jak pokazano poniżej
cclark,
20

Musisz pobrać certyfikat ca z http://curl.haxx.se/ca/cacert.pem i dodać go do swojego pliku curl-ca-bundle-new.crt.

Aby znaleźć lokalizację tego pliku, użyj:

   $ curl-config --ca

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

Utwórz kopię zapasową pliku curl-ca-bundle.crt:

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

Następnie chcesz połączyć dwa pliki za pomocą:

$ cat cacert.pem /usr/share/curl/curl-ca-bundle.crt >> curl-ca-bundle-new.crt
dbikard
źródło
Dzięki, zaoszczędziłeś mi trochę czasu!
Tadas T
Oszczędziłoby mi to GODZINY na OpenIndiana 151. Gdybym mógł głosować za więcej niż raz, zrobiłbym to.
Andrew Burns
To działało dla mnie na CentOS 5.8; Certyfikaty znajdują się w / etc / pki / certs / dla tych, którzy muszą je znaleźć w CentOS!
geedew
A co robisz z powstałym curl-ca-bundle-new.crt?
Valerio Schiavoni
Nowy plik certyfikatu powinien znajdować się w katalogu znalezionym za pomocą „curl-config --ca”.
Anirudh
17

Być może wszystkie te skomplikowane rozwiązania były kiedyś konieczne, ale teraz wszystko, co musisz zrobić, to najpierw zaktualizować RVM, a problem zostanie rozwiązany:

$ rvm get stable
$ rvm reload
$ rvm install ruby-1.9.3-p194
Nick Messick
źródło
2
Niestety, jeśli twoja wersja RVM jest wystarczająco stara, "rvm get head" nawet nie działa. Odpowiedź @ jwadsack wyjaśnia dlaczego.
Alex D
tak to prawda. Patrząc wstecz na moją odpowiedź, „rvm get head” też nie jest najlepszą radą. Naprawdę powinno być "rvm get stabilny". Zamierzam zmienić moją odpowiedź, aby to odzwierciedlić.
Nick Messick,
14

Jeśli nie masz nic przeciwko wyłączeniu sprawdzania certyfikatu w curl (ja nie mam):

echo insecure > ~/.curlrc
Vojto
źródło
11

Na Centos 5.6 (Final) miałem problem z instalacją rvm 1.9.2 Błąd był taki:

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.

Oto lista działań, które pomogły mi rozwiązać problem

$ 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

Wersja Btw curl to curl 7.18.0 (aby sprawdzić '$ curl -V')

Serge Seletskyy
źródło
1
Dobre rozwiązanie, w moim przypadku miałem ten błąd podczas wykonywania polecenia „rvm get head”. I uważaj w Linuksie na nazwę pliku curl-ca-bundle.crt! jest inaczej
Albert Català,
3

Próbowałem zainstalować ruby-1.9.2-p290i napotkałem ten sam problem. Po uruchomieniu which curli zdaniu sobie sprawy, że wystąpienie curl pochodziło z instalacji MAMP w moim systemie (OS X Snow Leopard), ponownie skonfigurowałem moją PATHzmienną, aby używała domyślnej wartości systemu /usr/bin/curl. Korzystając z tej wersji, curl 7.19.7nie miałem problemu z zainstalowaniem najnowszej wersji Ruby z RVM.

jerikl
źródło
2

Miałem problem z instalacją 1.9.2 przy użyciu RVM, oto moje rozwiązanie:

Nadal otrzymuję błąd „Nie znaleziono pliku”, ale instalacja przebiegła pomyślnie

[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 (dziecko): /Users//.rvm/archives/yaml-0.1.3.tar.gz: nie można otworzyć: nie ma takiego pliku lub katalogu tar (dziecko): błędu nie można naprawić: zamykam teraz tar: dziecko zwróciło status 2 tar : Wyjście błędu opóźnione z powodu poprzednich błędów

dorothy Dorothy
źródło
1
Zrobiłem coś podobnego i wyszło dobrze: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
Tylko to rozwiązanie działało u mnie na Mac Osx Lion. Wielkie dzięki!
Christian Treppo,
1

Dziękuję Dorothy - ten przepis zadziałał dla mnie z następującymi drobnymi modyfikacjami dla środowiska Win7:

Dla innych z tym problemem -

  1. Doceń dyskusję na temat aktualizacji pakietu CA_Bundle - dobrze, ale to nie pomogło w tym problemie - certyfikat witryny pyyaml ​​nadal będzie powodować wyświetlanie błędu przez CURL, a ponieważ CURL jest uruchamiany w instalatorze, nie ma możliwości dodania opcji -k .

  2. Ruby 1.9.2-p290 próbuje zainstalować YAML 0.1.4, więc Google dla serwera lustrzanego i pobierz tę wersję - YAML-0.1.3 nie będzie miało wpływu na ominięcie problemów.

  3. Musisz zrobić odpowiednik systemu Windows CHMOD 777 - w folderze rvm / src do rozpakowanych plików. Zmień zabezpieczenia, aby każdy miał prawo własności / wszystkie uprawnienia i wyłącz atrybut tylko do odczytu dla wszystkich plików i folderów.

Instalator nadal będzie zgłaszał błędy podczas próby pobrania (błąd CURL), ale wznowi działanie, próbując wyodrębnić. Rozpakowanie zwróci błędy, ponieważ archiwum zostało już rozpakowane do folderu src. Następny krok konfiguracji YAML powinien działać bez błędów, jeśli uprawnienia w kroku 3 zostały ustawione poprawnie, a instalacja powinna zakończyć się bez dalszych problemów. (Jeśli instalujesz przez cygwin / bash, będziesz musiał dodać kompilator C, taki jak `` gcc '' i dodać `` ncurses '' (polecenie tput) i `` make '' do domyślnych podstawowych opcji konfiguracji cygwin.)

Duke3D
źródło
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
źródło