помилка установки пакета з помилкою перевірки сертифіката SSL


264

Коли я запускаю bundle installпроект «Rails 3» на Centos 5.5, він не працює з помилкою:

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.

Коли я намагаюся встановити дорогоцінний камінь вручну (від gem install multi_json -v '1.3.2'), він працює. Така ж проблема виникає і з кількома іншими дорогоцінними каменями. Я використовую RVM (1.12.3), ruby ​​1.9.2, bundler 1.1.3.

Як це виправити?


Зіткнувшись з тією ж проблемою. Але з іншим коштовним каменем: Gem :: RemoteFetcher :: FetchError: SSL_connect повернуто = 1 errno = 0 стан = SSLv3 прочитаний сертифікат сервера B: перевірка сертифіката не вдалася ( bb-m.rubygems.org/gems/activeresource-3.2.3.gem )
Сатіш

4
У мене однакова помилка при однакових обставинах. Я підозрюю, враховуючи ці інші відповіді, що це проблема на сервері.
asfallows

У мене була подібна проблема в Rails 5. Виправлено її додаванням source "https://rubygems.org''у Gemfile та запуском 'gem update --system'. Більше інформації ви можете знайти тут .
Неша Зорич

Неша, це виправлення працювало на мене. Дякую!
Мартін Маріно

Відповіді:


310

Оновлення

Тепер, коли я достатньо видобув карму з цієї відповіді, всі повинні знати, що це повинно було бути виправлено.

re: через Ownatik знову встановлення пакета не вдається з помилкою підтвердження сертифікату SSL

gem update --system

Моя відповідь все ще правильна і залишена нижче для довідки, якщо це в кінцевому підсумку не працює для вас.


Чесно кажучи, найкраще тимчасове рішення - це

[...] використовуйте не-ssl версію рубігем у своєму gemfile як тимчасове вирішення.

через користувача Ownatik

що вони значать, знаходиться у верхній частині зміни Gemfileу вашому довіднику додатків рейок

source 'https://rubygems.org'

до

source 'http://rubygems.org'

зауважте, що друга версія - це http, а не http s


1
Я приймаю цю відповідь, тому що це було те, що я робив спочатку. Пізніше я змінив свою стратегію розгортання. Тепер я запускаю додаток на іншому сервері, а потім копіюю його (з дорогоцінними каменями в vendorкаталог) на сервер, про який писав у запитанні.
mrzasa

6
Це не спрацювало для мене. Посилання, яке надав @fbernier нижче, виправило для мене.
Скотт Фістер

5
Це не працює. Завдяки цьому просто виводиться будь- Latest version currently installed. Aborting. які інші ідеї?
Мет Хаггінс

1
Щодо зміни джерела, для нових людей, як я. Я б зазначив, що цей файл знаходиться у вашій програмі додатків. Я шукав його в каталозі railsinstaller. У будь-якому випадку я змінив джерело, і воно, нарешті, спрацювало. Я отримую помилки сертифікатів, коли намагаюся запустити оновлення :(
Брайан,

2
gem update --systemне вдається з точно такою ж помилкою сертифіката: \
BlueRaja - Danny Pflughoeft

226

Замініть джерело gsl ssl на не-ssl як тимчасове рішення:


8
OMG працював як шарм! Я в Windows 7 x64 за корпоративним проксі. Дуже дякую!
Șerban Ghiță

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

3
гарне рішення про темп ... будьте в курсі наступного :: RubyGems був налаштований на обслуговування дорогоцінних каменів за такими URL-адресами через свою історію: * gems.rubyforge.org (RubyGems 1.3.6 і новіші версії ) * rubygems.org (RubyGems 1.3. 7 - 1.8.25) * rubygems.org (RubyGems 2.0.1 та новіші)
beauXjames

1
найшвидше рішення для мене в Windows 8
Tisch

3
Імхо, це навіть не слід вважати правильною відповіддю, оскільки це відкриває вашу систему для атак ззовні.
rubiii

160

Причина - старі рубігеми. Потрібно оновити системну частину, використовуючи спочатку джерело non ssl:

gem update --system --source http://rubygems.org/ (тимчасове оновлення системної частини за допомогою підключення non-ssl).

Тепер ви готові до використання gem update.


5
Дійсно просте рішення, яке є платформою і дозволяє RubyGems дбати про деталі. Приємно.
zrisher

2
це було те, що слід прийняти, відповіді вище не пояснюють, що спочатку потрібно видалити джерела ssl
Єфрем

1
Спасибі - це квиток. Якщо ви отримуєте повідомлення "не в кеші" під час додавання або видалення джерел, спробуйте його з або без косої риски. Він повинен точно відповідати.
Тімоті Лі Рассел

1
Я шукав багато рішень. Це той, хто працював як шарм. Дякую! Це слід обирати як справжнє рішення.
Berker Yüceer

1
Дякую!! Я погоджуюся з іншими, що це має бути прийнятою відповіддю, оскільки це не призводить до отримання дорогоцінних каменів через звичайний HTTP.
Олександр

117

Якщо ви перебуваєте на Mac і використовуєте останню версію RVM (~ 1.20), наступна команда працювала для мене.

rvm osx-ssl-certs update

Дякую! Працював для мене на Mac OSX 10.8.5
Matthew Blancarte

Дякую, працювали і для мене. Я намагався встановити CocoaPods. rvm 1.22.15, OS X 10.8.5
Логан

1
На це вказується також у повідомленні про помилку "... див. Bit.ly/ruby-ssl".
IAmNaN

Дякую! Працювали для мене !! \ о /
Вальтер Хуніор

55

Тепер це питання слід вирішити. Оновіть rubygems ( gem update --system), переконайтеся, що openssl знаходиться в останній версії вашої ОС, або спробуйте скористатися цими порадами, які все ще не працюють: http://railsapps.github.com/openssl-certificate-verify-failed.html


1
Потрібно також оновити bundler, щоб він працював (для Winxp для мене працює rubygems 2.0.3 + bundler 1.3.2 + cygwin openssl 1.0.1e).
fakeleft

Мені довелося оновити з 1.3.0, зараз я перебуваю на 1.3.4, і https більше не кидає помилку: bundler-1.3.0 / lib / bundler / vendor / net / http / persistent / ssl_reuse.rb: 70: у `connect ': SSL_connect повернуто = 1 errno = 0 стан = SSLv3 зчитування обміну ключами сервера B: погана точка (OpenSSL :: SSL :: SSLError)
Джон Керн,

3
Оновити rubygems неможливо, якщо сертифікат SSL не прийнято! Бігають тут по колах;)
кап

50

Тимчасове рішення (як нагадав Ownatik):

Створіть або модифікуйте файл під назвою .gemrc у своєму домашньому шляху, включаючи рядок :ssl_verify_mode: 0

Це не дозволить постачальнику перевірити SSL сертифікати дорогоцінних каменів при спробі їх встановлення.

Для пристроїв * nix «домашній шлях» означає ~/.gemrc. Ви також можете створити, /etc/gemrcякщо хочете. Для Windows XP "домашній шлях" означає c:\Documents and Settings\All Users\Application Data\gemrc. Для Windows 7,C:\ProgramData\gemrc


3
%USERPROFILE%\.gemrcтакож шукається gemв Windows.
Ромуло Цеккон

1
Рекомендоване розташування файлів для Windows 8?
user1318135

6
Видалення перевірки ssl - це тимчасове вирішення, яке відкриває захисну дірку. Детальніше тут: github.com/rubygems/rubygems/commit / ...
MRM

Це корисно в моєму випадку; за корпоративним брандмауером, який обмежує всі стислі файли, але дозволяє їх через https.
mydoghasworms

Я не пробував цього рішення, але в моєму випадку також працював, коли я додав цей вміст до ~/.gemrc::sources: - http://rubygems.org
Artur Käpp

18

У Windows7 ви можете завантажити файл cacert.pem звідси і встановити середовище змінної SSL_CERT_FILE на шлях, де ви зберігаєте сертифікат, наприклад

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

або ви можете встановити змінну у своєму сценарії так ENV['SSL_CERT_FILE']="C:/users/<username>/cacert.pem"

Замініть <ім'я користувача> на власне ім'я користувача.


3
Дякую. Постійне виправлення тут. guides.rubygems.org/ssl-certificate-update
Maheshkumar

Це правильне постійне виправлення та уникати використання незахищеного джерела http.
Діо Пхунг

15

Реальне рішення цієї проблеми, якщо ви використовуєте RVM:

  1. Оновіть рубігеми: gem update --system
  2. Використовуйте RVM для оновлення сертифікатів SSL: rvm osx-ssl-certs update all

Наконечник капелюха до цієї поради щодо проекту RailsApps !


1
rvm osx-ssl-certs update allдобре працював для мене. Не потрібно було робити крок 1.
DMH


7

Для тих із вас, хто має рубін, встановлений через RVM і бажає швидкого виправлення (вважаючи за краще не читати за запитом Бруно), просто спробуйте:

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

Для більш детальної інформації тут посилання, де я знайшов рішення.

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

До речі, мені не довелося торкатися своїх сертифікатів на Ubuntu.

Найкраще, що це не обхід. Він завантажить дорогоцінні камені через SSL і не вдасться, якщо є проблема, як у людини, що знаходиться в атаці посередині, що набагато краще, ніж просто вимкнути безпеку.


Сторінка, на яку ви посилаєтесь, має "вирішення" (спочатку), а потім належні рішення. Було б краще, якби ваша відповідь сказала це трохи чіткіше. Тим не менш, використання сертифікатів CA (через cacert.pemабо $rvm_path/usr/ssl) - це справді правильний шлях.
Бруно

1
Бруно, рішення, ймовірно, буде дещо іншим, залежно від того, який аромат Unix використовує людина. Схоже, прочитати посилання буде потрібно.
danielrussia

Я просто говорив про різницю між "вирішенням" на сторінці ( :ssl_verify_mode: 0що відкриває проблеми), на відміну від будь-якого з 3-х рішень, що знаходяться під ним, які є правильним способом виправити цю проблему.
Бруно

@Bruno, я переглянув свою статтю, будь ласка, додайте коментарі або відредагуйте вікі, якщо бачите можливості для вдосконалень.
Даніель Кехо

6

Це було виправлено

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

Тепер, коли RubyGems 2.6.x було випущено, ви можете вручну оновити до цієї версії.

Завантажте https://rubygems.org/downloads/rubygems-update-2.6.7.gem

Завантажте файл у каталозі, на який згодом можна вказувати (наприклад, корінь жорсткого диска C :)

Тепер, використовуючи командний рядок:

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

Після цього gem --version повинен повідомити про нову версію оновлення.

Тепер ви можете безпечно видалити дорогоцінний камінь для оновлення rubygems:

C:\>gem uninstall rubygems-update -x

5

Проста інструкція з копіювання вставити тут про .pem файл

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

Не вдалося підтвердити сертифікат

Якщо ви прочитали попередні розділи, то дізнаєтесь, що це означає (і соромно> якщо вас немає).

Нам потрібно завантажити AddTrustExternalCARoot-2048.pem . Відкрийте командний рядок і введіть:

C:> gem that rubygems C: /Ruby21/lib/ruby/2.1.0/rubygems.rb Тепер давайте знайдемо цей каталог. З цього ж вікна введіть частину шляху до розширення файлу, але замість цього натисніть зворотні риси:

C:> start C: \ Ruby21 \ lib \ ruby ​​\ 2.1.0 \ rubygems Це відкриє вікно Провідника всередині вказаного нами каталогу.

Крок 3: Скопіюйте новий довірений сертифікат

Тепер знайдіть каталог ssl_certs і скопіюйте файл .pem, який ми отримали з попереднього кроку всередині.

Він буде перерахований з іншими файлами, такими як GeoTrustGlobalCA.pem.


4

ту ж проблему, але з різними дорогоцінними каменями тут:

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.

тимчасове рішення: gem install builder -v '3.0.0'дає можливість продовжуватиbundle install


7
Ви також можете використовувати не-ssl версію рубігем у своєму gemfile як тимчасове вирішення.
fbernier

1
Я це зробив і це працює. Наразі це достатнє рішення.
mrzasa

У мене така ж проблема і тут. Так @Ownatik, як використовувати ssl версію рубігем?
Зек



4

Моє постійне виправлення для Windows:

  1. Завантажити CACert , зберегти як C:\ruby\ssl_certs\GlobalSignRootCA.pemвід http://guides.rubygems.org/ssl-certificate-update/

  2. Створіть системну змінну під назвою " SSL_CERT_FILE ", встановлену на C:\ruby\ssl_certs\GlobalSignRootCA.pem.

  3. Спробуйте ще раз 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

3

Я отримую дещо іншу помилку, хоча і, можливо, пов’язану з Ubuntu 12.04:

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.

Це трапляється, коли я бігаю bundle installз source 'https://rubygems.org'Gemfile.

Це проблема з OpenSSL на Ubuntu 12.04. Див. Випуск Rubygems №319 .

Щоб виправити це, запустіть apt-get update && apt-get upgradeUbuntu 12.04 для оновлення OpenSSL.


3

Я зміг відстежити це до того, що бінарні файли, які rvmзавантажуються, не грають добре з OpenSSL OS X, який є старим і більше не використовується ОС.

Для мене рішенням було змусити компіляцію при встановленні Ruby через rvm:

rvm reinstall --disable-binary 2.2

Це працювало для мене. Вам потрібно замінити "2.2" w / рубінову версію, яку ви використовуєте
Josh

3

Thx на @ Alexander.Iljushkin за:

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

Після цього постачальник не зміг, і рішенням цього було:

gem install bundler


2

Я отримував подібну помилку. Ось як я це вирішив: У своєму каталозі шляху перевірте наявність Gemfile. Відредагуйте джерело в gemfile на http замість https та збережіть його. Це може встановити постачальник без SSL сертифікату.l


2

На машині Windows перевірте версію дорогоцінного каміння

gem --version

Потім оновіть дорогоцінний камінь так:

Завантажте файл у каталозі, на який згодом можна вказувати (наприклад, корінь вашого жорсткого диска C :)

Тепер, використовуючи командний рядок:

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

Тепер установка пакета буде успішною без помилки підтвердження сертифікату SSL.

Більш детальна інструкція тут


1

Це працювало для мене:

  • завантажити найновіший самоцвіт на https://rubygems.org/pages/download
  • встановити дорогоцінний камінь за допомогою gem install --local [path to downloaded gem file]
  • оновити дорогоцінні камені за допомогою update_rubygems
  • перевірте, чи користуєтесь ви останньою версією дорогоцінних каменів gem --version


1

Я нещодавно стикався з цим питанням і дотримувався кроків, викладених тут . Можливо, ви не вказуєте на правильний сертифікат OpenSSL. Після запуску:

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

і

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

пучок повний біг!


1

Завантажте rubygems-update-2.6.7.gem .

Тепер, використовуючи командний рядок:

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

Після цього gem --versionслід повідомити про нову версію оновлення.

Тепер ви можете безпечно видалити дорогоцінний камінь для оновлення rubygems:

C:\>gem uninstall rubygems-update -x
Removing update_rubygems
Successfully uninstalled rubygems-update-2.6.7

1

Для зауваження, якщо ви захоплюєте дорогоцінні камені з джерела, якому SSL-сертифікат довіряє внутрішній орган сертифікації (або ви підключаєтесь до зовнішнього джерела через веб-проксі компанії з інспекцією SSL), вкажіть змінну SSL_CERT_FILE env до вашої ланцюжка сертифікатів . Це, швидше за все, просто потрібно експортувати ваш кореневий сертифікат із сховища сертифікатів (System Keychain на macOS) до доступного місця з вашої оболонки, тобто:

export SSL_CERT_FILE=~/RootCert.pem

0

Якщо ви використовуєте rails-assets

Якщо ви використовували https://rails-assets.org/для управління активами, відповіді вам не допоможуть. Навіть перетворення в httpне допоможе.

Найпростіше виправлення з допомогою цього джерела замість http://insecure.rails-assets.org. Про це згадувалося на їх домашній сторінці .


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