instalacja pakietu kończy się niepowodzeniem z błędem weryfikacji certyfikatu SSL

264

Kiedy uruchamiam bundle installmój projekt Rails 3 na Centos 5.5, kończy się to błędem:

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.

Kiedy próbuję zainstalować klej ręcznie (przez gem install multi_json -v '1.3.2'), działa. Ten sam problem występuje z kilkoma innymi klejnotami. Używam RVM (1.12.3), ruby ​​1.9.2, bundler 1.1.3.

Jak to naprawić?

Mrzasa
źródło
W obliczu tego samego problemu. Ale z innym klejnotem: Gem :: RemoteFetcher :: FetchError: Zwrócono SSL_connect = 1 errno = 0 stan = SSLv3 odczyt certyfikatu serwera B: weryfikacja certyfikatu nie powiodła się ( bb-m.rubygems.org/gems/activeresource-3.2.3.gem )
Sathish,
4
Mam ten sam błąd w tych samych okolicznościach. Podejrzewam, biorąc pod uwagę te inne odpowiedzi, że jest to problem po stronie serwera.
lotem lotniczym
Miałem podobny problem w Rails 5. source "https://rubygems.org''Naprawiłem go, dodając plik Gemfile i uruchamiając „aktualizację klejnotów - system”. Więcej informacji znajdziesz tutaj .
Nesha Zoric,
Nesha, ta poprawka zadziałała dla mnie. Dziękuję Ci!
Martin Marino,

Odpowiedzi:

310

Aktualizacja

Teraz, kiedy mam karmę, która została wystarczająco wydobyta z tej odpowiedzi, wszyscy powinni wiedzieć, że to powinno być naprawione.

Re: przez Ownatik ponownie instalacja pakietu kończy się niepowodzeniem z błędem weryfikacji certyfikatu SSL

gem update --system

Moja odpowiedź jest nadal poprawna i pozostawiona poniżej w celach informacyjnych, jeśli to nie zadziała.


Szczerze mówiąc, najlepszym rozwiązaniem tymczasowym jest

[...] użyj tymczasowej wersji rubygemów w swoim pliku gem jako tymczasowego obejścia.

przez użytkownika Ownatik

co to znaczy, znajduje się na górze Gemfilew katalogu zmian w aplikacji rails

source 'https://rubygems.org'

do

source 'http://rubygems.org'

zwróć uwagę, że druga wersja to http zamiast http s

Będzie
źródło
1
Przyjmuję tę odpowiedź, ponieważ to właśnie zrobiłem na początku. Później zmieniłem strategię wdrażania. Teraz uruchamiam pakiet aplikacji na innym serwerze, a następnie kopiuję (z klejnotami w vendorkatalogu) na serwer, o którym pisałem w pytaniu.
mrzasa
6
To mi nie zadziałało. Link podany przez @fbernier poniżej naprawił go dla mnie.
Scott Fister
5
To nie działa Uruchomienie tego zapewnia tylko Latest version currently installed. Aborting. jakieś inne pomysły?
Matt Huggins
1
Jeśli chodzi o zmianę źródła, dla nowszych osób takich jak ja. Określiłbym, że ten plik znajduje się w katalogu aplikacji. Szukałem tego w katalogu railsinstaller. W każdym razie zmieniłem źródło i ostatecznie zadziałało. Otrzymuję błędy certyfikatu, gdy próbuję uruchomić aktualizację :(
Brian
2
gem update --systemkończy się niepowodzeniem z dokładnie tym samym błędem certyfikatu: \
BlueRaja - Danny Pflughoeft
226

Zamień źródło klejnotów ssl na non-ssl jako rozwiązanie tymczasowe:

StuR
źródło
8
OMG działało jak urok! Korzystam z systemu Windows 7 x64 za korporacyjnym proxy. Wielkie dzięki!
banerban Ghiță
14
Dziwię się, że nie był wyżej w rankingu, to był najłatwiejszy szybki sposób.
hwatkins
3
dobre rozwiązanie temp ... pamiętaj, że :: RubyGems został skonfigurowany do obsługi klejnotów poprzez następujące adresy URL w swojej historii: * gems.rubyforge.org (RubyGems 1.3.6 i wcześniejsze) * rubygems.org (RubyGems 1.3. Od 7 do 1.8.25) * rubygems.org (RubyGems 2.0.1 i nowsze)
beauXjames
1
najszybsze rozwiązanie dla mnie na Windows 8
Tisch
3
Imho nie powinno to być nawet uważane za prawidłową odpowiedź, ponieważ otwiera twój system na ataki z zewnątrz.
rubiii
160

Powodem są stare rubygemy. Musisz najpierw zaktualizować część systemową, używając źródła innego niż ssl:

gem update --system --source http://rubygems.org/ (tymczasowa aktualizacja części systemowej przy użyciu połączenia nie-ssl).

Teraz jesteś gotowy do użycia gem update.

Alexander.Iljushkin
źródło
5
Naprawdę proste rozwiązanie, które jest wieloplatformowe i pozwala RubyGems dbać o szczegóły. Miły.
zrisher
2
to był ten, który powinien zostać zaakceptowany, powyższe odpowiedzi nie wyjaśniają, że musisz najpierw usunąć źródła ssl
Efraim
1
Dzięki - to jest bilet. Jeśli podczas dodawania lub usuwania źródeł pojawia się komunikat „nie ma w pamięci podręcznej”, wypróbuj go z lub bez ukośnika końcowego. Musi dokładnie pasować.
Timothy Lee Russell
1
Szukałem wielu rozwiązań. Ten działał jak urok. Dziękuję Ci! To powinno być wybrane jako prawdziwe rozwiązanie.
Berker Yüceer,
1
Dziękuję Ci!! Zgadzam się z innymi, że to powinna być zaakceptowana odpowiedź, ponieważ nie skutkuje to ściąganiem klejnotów przez zwykły HTTP.
Alexander
117

Jeśli używasz komputera Mac i używasz najnowszej wersji RVM (~ 1.20), następujące polecenie działało dla mnie.

rvm osx-ssl-certs update
chaserx
źródło
Dziękuję Ci! Pracowałem dla mnie w systemie Mac OSX 10.8.5
Matthew Blancarte
Dzięki, pracowałem też dla mnie. Próbowałem zainstalować CocoaPods. rvm 1.22.15, OS X 10.8.5
Logan Moseley
1
Wskazuje na to również komunikat o błędzie „... patrz bit.ly/ruby-ssl”.
IAmNaN
Thankssssss !! Pracował dla mnie !! \ o /
Valter Júnior
55

Ten problem powinien teraz zostać rozwiązany. Zaktualizuj rubygems ( gem update --system), upewnij się, że openssl ma najnowszą wersję w twoim systemie operacyjnym, lub wypróbuj te wskazówki, że nadal nie działa: http://railsapps.github.com/openssl-certificate-verify-failed.html

koleś
źródło
1
Musiałem również zaktualizować program pakujący, aby działał (rubygems 2.0.3 + program pakujący 1.3.2 + cygwin openssl 1.0.1e działa dla mnie na Winxp).
fakeleft
Musiałem zaktualizować z wersji 1.3.0, teraz korzystam z wersji 1.3.4, a protokół https nie wyświetla już błędu: bundler-1.3.0 / lib / bundler / vendor / net / http / persistent / ssl_reuse.rb: 70: w `connect ': zwrócono SSL_connect = 1 errno = 0 stan = odczyt klucza serwera SSLv3 B: zły ekosystem (OpenSSL :: SSL :: SSLError)
Jon Kern
3
Aktualizacja rubygemów nie jest możliwa, jeśli certyfikat SSL nie zostanie zaakceptowany! Biegam tutaj w kółko;)
kap
50

Rozwiązanie tymczasowe (jak nawiązywał do Ownatik):

Utwórz lub zmodyfikuj plik o nazwie .gemrc w ścieżce domowej, w tym w wierszu :ssl_verify_mode: 0

Zapobiegnie to sprawdzeniu przez pakiet certyfikatów SSL klejnotów podczas próby ich zainstalowania.

W przypadku urządzeń * nix „ścieżka główna” oznacza ~/.gemrc. Możesz również utworzyć, /etc/gemrcjeśli wolisz. W systemie Windows XP „ścieżka główna” oznacza c:\Documents and Settings\All Users\Application Data\gemrc. W systemie Windows 7C:\ProgramData\gemrc

przedpola
źródło
3
%USERPROFILE%\.gemrcjest również wyszukiwane przez gemw systemie Windows.
Rômulo Ceccon,
1
Zalecana lokalizacja pliku dla systemu Windows 8?
user1318135,
6
Usunięcie weryfikacji ssl to tymczasowe obejście, które otwiera lukę w zabezpieczeniach. Przeczytaj więcej tutaj: github.com/rubygems/rubygems/commit/…
mrm
Jest to przydatne w moim przypadku; za korporacyjną zaporą ogniową, która ogranicza wszystkie skompresowane pliki, ale umożliwia je przez https.
mydoghasworms
Nie próbowałem tego rozwiązania, ale w moim przypadku zadziałało również, gdy dodałem tę treść do ~/.gemrc::sources: - http://rubygems.org
Artur Käpp
18

W systemie Windows7 możesz pobrać plik cacert.pem stąd i ustawić zmienną środowiskową SSL_CERT_FILE na ścieżkę, w której przechowujesz certyfikat, np.

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

lub możesz ustawić zmienną w skrypcie w ten sposób ENV['SSL_CERT_FILE']="C:/users/<username>/cacert.pem"

Zastąp <nazwa użytkownika> własną nazwą użytkownika.

Piotr
źródło
3
Dziękuję Ci. Stała poprawka jest tutaj. guide.rubygems.org/ssl-certificate-update
Maheshkumar
Jest to właściwa stała poprawka, która pozwala uniknąć korzystania z niezabezpieczonego źródła HTTP.
Dio Phung,
15

Prawdziwe rozwiązanie tego problemu, jeśli używasz RVM:

  1. Zaktualizuj rubygemy: gem update --system
  2. Użyj RVM, aby odświeżyć certyfikaty SSL: rvm osx-ssl-certs update all

Hat tip do tej wskazówki na temat projektu RailsApps !

Alan H.
źródło
1
rvm osx-ssl-certs update alldziałało dobrze dla mnie. Nie musiałem robić kroku 1.
DMH
7

Dla tych z was, którzy mają zainstalowany Ruby przez RVM i chcą szybkiej poprawki (woląc nie czytać na żądanie Bruno), po prostu spróbuj tego:

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

Aby uzyskać więcej informacji, oto link, w którym znalazłem rozwiązanie.

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

BTW, nie musiałem dotykać moich certyfikatów na Ubuntu.

Co najlepsze, nie jest to obejście. Będzie pobierał klejnoty przez SSL i zawiedzie, jeśli wystąpi problem, taki jak atak człowieka w środku, który jest znacznie lepszy niż wyłączenie bezpieczeństwa.

danielrussia
źródło
Strona, do której prowadzi link, zawiera „obejście” (najpierw), a następnie odpowiednie rozwiązania. Byłoby lepiej, gdyby twoja odpowiedź brzmiała nieco wyraźniej. Niemniej jednak korzystanie z certyfikatów CA (przez cacert.pemlub $rvm_path/usr/ssl) jest rzeczywiście właściwą drogą.
Bruno
1
Bruno, rozwiązanie będzie prawdopodobnie nieco inne w zależności od tego, jakiego smaku Uniksa używa dana osoba. Wygląda na to, że konieczne będzie przeczytanie linku.
danielrussia
Właśnie mówiłem o różnicy między „obejściem” na stronie ( :ssl_verify_mode: 0które otwierają problemy), w przeciwieństwie do jednego z 3 poniższych rozwiązań, które są dobrym sposobem na rozwiązanie tego problemu.
Bruno,
@Bruno, poprawiłem mój artykuł, dodaj komentarze lub edytuj wiki, jeśli widzisz możliwości ulepszeń.
Daniel Kehoe
6

Zostało to naprawione

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

Po wydaniu RubyGems 2.6.x możesz ręcznie zaktualizować tę wersję.

Pobierz https://rubygems.org/downloads/rubygems-update-2.6.7.gem

Pobierz plik w katalogu, do którego możesz później wskazać (np. Katalog główny dysku twardego C :)

Teraz za pomocą wiersza polecenia:

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

Następnie gem --version powinien zgłosić nową wersję aktualizacji.

Możesz teraz bezpiecznie odinstalować klejnot aktualizacji rubygems:

C:\>gem uninstall rubygems-update -x
Roffery
źródło
5

Podano tutaj prostą instrukcję kopiowania wklej dotyczącą pliku .pem

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

W przypadku weryfikacji certyfikatu nie powiodło się

Jeśli przeczytałeś poprzednie sekcje, będziesz wiedział, co to oznacza (i wstyd> jeśli nie masz).

Musimy pobrać AddTrustExternalCARoot-2048.pem . Otwórz wiersz polecenia i wpisz:

C:> klejnot, który rubygemy C: /Ruby21/lib/ruby/2.1.0/rubygems.rb Teraz zlokalizujmy ten katalog. W tym samym oknie wprowadź część ścieżki do rozszerzenia pliku, ale zamiast tego użyj ukośników odwrotnych:

C:> start C: \ Ruby21 \ lib \ ruby ​​\ 2.1.0 \ rubygems Spowoduje to otwarcie okna Eksploratora wewnątrz wskazanego katalogu.

Krok 3: Skopiuj nowy certyfikat zaufania

Teraz zlokalizuj katalog ssl_certs i skopiuj plik .pem, który uzyskaliśmy z poprzedniego kroku.

Zostanie wymieniony wraz z innymi plikami, takimi jak GeoTrustGlobalCA.pem.

geniushkg
źródło
4

ten sam problem, ale z innym klejnotem tutaj:

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.

rozwiązanie tymczasowe: gem install builder -v '3.0.0'umożliwia kontynuacjębundle install

Ludwig
źródło
7
Możesz także użyć wersji rubygemów innych niż ssl w swoim pliku gem jako tymczasowego obejścia.
fbernier
1
Zrobiłem to i działa. Na razie to wystarczające rozwiązanie.
mrzasa,
Mam tutaj ten sam problem. Więc @Ownatik jak korzystać z wersji ssl rubygemów?
Zeck
4

Najprostsze rozwiązanie:

rvm pkg install openssl
rvm reinstall all --force

Voila!

użytkownik 2886774
źródło
2
Co to właściwie robi z moim systemem?
Bradley Flood
4

Moja stała poprawka dla systemu Windows:

  1. Pobierz CACert , zapisz C:\ruby\ssl_certs\GlobalSignRootCA.pemod http://guides.rubygems.org/ssl-certificate-update/

  2. Utwórz zmienną systemową o nazwie „ SSL_CERT_FILE ”, ustaw na C:\ruby\ssl_certs\GlobalSignRootCA.pem.

  3. Spróbuj ponownie 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
źródło
3

W systemie Ubuntu 12.04 pojawia się nieco inny błąd, choć być może związany:

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.

Zdarza się to, gdy biegnę bundle installz source 'https://rubygems.org'Gemfile.

Jest to problem z OpenSSL na Ubuntu 12.04. Zobacz numer Rubygems nr 319 .

Aby to naprawić, uruchom apt-get update && apt-get upgradeUbuntu 12.04, aby zaktualizować OpenSSL.

Jo Liss
źródło
3

Udało mi się to wyśledzić do faktu, że pliki binarne, które rvmpobierają, nie działają dobrze z OpenSSL OS X, który jest stary i nie jest już używany przez system operacyjny.

Rozwiązaniem było wymuszenie kompilacji podczas instalacji Ruby poprzez rvm:

rvm reinstall --disable-binary 2.2
Schrockwell
źródło
To zadziałało dla mnie. Musisz zamienić „2.2” na wersję Ruby, której używasz
Josh
3

Dziękujemy @ Alexander.Iljushkin za:

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

Po tym pakiecie nadal nie powiodło się, a rozwiązaniem tego było:

gem install bundler

Sebastian Axe
źródło
2

Otrzymałem podobny błąd. Oto jak to rozwiązałem: w swoim katalogu ścieżek sprawdź Gemfile. Edytuj źródło w pliku gem do http zamiast https i zapisz go. Może to spowodować zainstalowanie pakietu bez wydania certyfikatu SSL. L

ecksor5
źródło
2

W przypadku komputera z systemem Windows sprawdź swoją wersję klejnotów za pomocą

gem --version

Następnie zaktualizuj swój klejnot w następujący sposób:

Pobierz plik w katalogu, do którego możesz później wskazać (np. Katalog główny dysku twardego C :)

Teraz za pomocą wiersza polecenia:

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

Teraz instalacja pakietu zakończy się powodzeniem bez błędu weryfikacji certyfikatu SSL.

Bardziej szczegółowa instrukcja znajduje się tutaj

KBIIX
źródło
1

To działało dla mnie:

  • pobierz najnowszy klejnot na https://rubygems.org/pages/download
  • zainstaluj klejnot za pomocą gem install --local [path to downloaded gem file]
  • zaktualizuj klejnoty za pomocą update_rubygems
  • sprawdź, czy korzystasz z najnowszej wersji klejnotów gem --version
Guy Chauliac
źródło
1

Musiałem ponownie zainstalować openssl:

brew uninstall --force openssl
brew install openssl
gabeodess
źródło
1

Niedawno spotkałem się z tym problemem i wykonałem kroki opisane tutaj . Możliwe, że nie wskazujesz odpowiedniego certyfikatu OpenSSL. Po bieganiu:

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

i

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

pakiet został ukończony!

jshaf
źródło
1

Pobierz rubygems-update-2.6.7.gem .

Teraz za pomocą wiersza polecenia:

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

Następnie gem --versionpowinien zgłosić nową wersję aktualizacji.

Możesz teraz bezpiecznie odinstalować klejnot aktualizacji rubygems:

C:\>gem uninstall rubygems-update -x
Removing update_rubygems
Successfully uninstalled rubygems-update-2.6.7
Aswathy
źródło
1

Uwaga: jeśli pobierasz klejnoty ze źródła, któremu certyfikat SSL jest zaufany przez wewnętrzny urząd certyfikacji (lub łączysz się ze źródłem zewnętrznym za pośrednictwem firmowego serwera proxy z kontrolą SSL), skieruj zmienną env SSL_CERT_FILE na łańcuch certyfikatów . Najprawdopodobniej wymaga to tylko wyeksportowania certyfikatu głównego z magazynu certyfikatów (pęku kluczy systemowych w systemie macOS) do dostępnej lokalizacji z powłoki, tj .:

export SSL_CERT_FILE=~/RootCert.pem
mostlikelee
źródło
0

Jeśli używasz rails-assets

Jeśli używałeś https://rails-assets.org/do zarządzania swoimi zasobami, żadne odpowiedzi ci nie pomogą. Nawet konwersja na httpnie pomoże.

Najprostszą metodą jest użycie tego źródła zamiast http://insecure.rails-assets.org. Zostało to wspomniane na ich stronie głównej .

Anwar
źródło
0

Jedyną rzeczą, która działała dla mnie w starszym systemie Windows i wersji Ruby 1.9 jest pobranie pliku cacert z http://guides.rubygems.org/ssl-certificate-update/

Następnie uruchom polecenie poniżej przed uruchomieniem instalacji pakietu

bundle config --global ssl_ca_cert /path/to/file.pem
Aleksandar Pavić
źródło