установка пакета не удалась с ошибкой проверки сертификата 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.

Как это исправить?

mrzasa
источник
Столкнувшись с той же проблемой. Но с другим гемом: 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 версию rubygems в вашем gemfile как временное решение.

через пользователя Ownatik

то, что они имеют в виду, находится в верхней части Gemfileв вашем каталоге изменения приложения рельсы

source 'https://rubygems.org'

в

source 'http://rubygems.org'

обратите внимание, что вторая версия - http вместо http s

Будет
источник
1
Я принимаю этот ответ, потому что это было то, что я сделал сначала. Позже я изменил свою стратегию развертывания. Теперь я запускаю связывание приложения на другом сервере, а затем копирую его (с драгоценными камнями в vendorкаталоге) на сервер, о котором я писал в вопросе.
Мрзаса
6
Это не сработало для меня. Ссылка, предоставленная @fbernier ниже, исправила это для меня.
Скотт Фистер
5
Это не работает Запуск этого просто обеспечивает вывод каких- Latest version currently installed. Aborting. либо других идей?
Мэтт Хаггинс
1
С точки зрения изменения источника, для новых людей, как я. Я хотел бы указать, что этот файл находится в каталоге вашего приложения. Я искал это в каталоге railsinstaller. В любом случае, я сменил источник, и он наконец заработал. Я получаю ошибки сертификата при попытке запустить обновление :(
Брайан
2
gem update --systemтерпит неудачу с той же самой ошибкой сертификата: \
BlueRaja - Дэнни Пфлугхофт
226

Замените источник gem ssl на non-ssl в качестве временного решения:

Stur
источник
8
OMG работал как шарм! Я на Windows 7 x64 за корпоративным прокси. Большое спасибо!
Шербан Гицэ
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
Тиши
3
Имхо, это даже не следует считать правильным ответом, потому что это открывает вашу систему для атак извне.
Рубии
160

Причина - старые рубины. Сначала необходимо обновить системную часть с использованием не ssl-источника:

gem update --system --source http://rubygems.org/ (временное обновление системной части с использованием не-ssl-соединения).

Теперь вы готовы к использованию gem update.

Alexander.Iljushkin
источник
5
Действительно простое кроссплатформенное решение, позволяющее RubyGems позаботиться о деталях. Ницца.
zrisher
2
это было то, что должно быть принято, ответы выше не объясняют, что вам нужно сначала удалить исходники ssl
Ефрем
1
Спасибо - это билет. Если при добавлении или удалении источников появляется сообщение «not in cache», попробуйте его с косой чертой или без нее. Это должно точно соответствовать.
Тимоти Ли Рассел
1
Я искал много решений. Это тот, который работал как шарм. Спасибо! Это должно быть выбрано как истинное решение.
Berker Yüceer
1
Спасибо!! Я согласен с другими, что это должен быть принятый ответ, так как он не приведет к извлечению драгоценных камней через простой HTTP.
Александр
117

Если вы работаете на Mac и используете последнюю версию RVM (~ 1.20), у меня сработала следующая команда.

rvm osx-ssl-certs update
chaserx
источник
Спасибо! Работал для меня на Mac OSX 10.8.5
Мэтью Бланкарт
Спасибо, у меня тоже сработало. Я пытался установить CocoaPods. rvm 1.22.15, OS X 10.8.5
Логан Мозли
1
На это также указывает сообщение об ошибке «... см. Bit.ly/ruby-ssl».
ИАМНАН
Thankssssss !! Работал для меня! \ o /
Вальтер Жуниор
55

Эта проблема должна быть исправлена. Обновите rubygems ( gem update --system), убедитесь, что openssl имеет последнюю версию в вашей ОС, или попробуйте следующие советы, которые по-прежнему не работают: http://railsapps.github.com/openssl-certificate-verify-failed.html

fbernier
источник
1
Нужно обновить и упаковщик, чтобы он заработал (у меня на 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 7C:\ProgramData\gemrc

asfallows
источник
3
%USERPROFILE%\.gemrcтакже ищется gemв Windows.
Ромуло Цеккон
1
Рекомендуемое расположение файла для Windows 8?
user1318135
6
Удаление проверки SSL является временным решением, которое открывает дыру в безопасности. Узнайте больше здесь: github.com/rubygems/rubygems/commit/…
mrm
Это полезно в моем случае; за корпоративным брандмауэром, который ограничивает все сжатые файлы, но разрешает их через https.
mydoghasworms
Не пробовал это решение, но в моем случае также работало, когда я добавил этот контент в ~/.gemrc::sources: - http://rubygems.org
Артур Кэпп
18

На Windows7 вы можете скачать файл cacert.pem отсюда и установить environementvariable SSL_CERT_FILE для пути, где вы храните сертификат, например

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

или вы можете установить переменную в вашем скрипте, как это ENV['SSL_CERT_FILE']="C:/users/<username>/cacert.pem"

Замените <username> вашим собственным именем пользователя.

Питер
источник
3
Спасибо. Постоянное исправление здесь. guides.rubygems.org/ssl-certificate-update
Махешкумар
Это правильное постоянное исправление, позволяющее избежать использования незащищенного 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
8

Вы можете скачать список сертификатов CA с веб-сайта curl по адресу http://curl.haxx.se/ca/cacert.pem

Затем установите переменную среды SSL_CERT_FILE, чтобы указать Ruby на ее использование. Например, в Linux:

$ SSL_CERT_FILE=~/cacert.pem bundle install

(Ссылка: https://gist.github.com/fnichol/867550 )

arcanex
источник
7

Для тех из вас, кто установил ruby ​​через 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 и потерпит неудачу, если возникнет такая проблема, как человек в середине атаки, который гораздо лучше, чем просто отключить защиту.

danielrussia
источник
На странице, на которую вы ссылаетесь, есть «обходной путь» (сначала), а затем правильные решения. Было бы лучше, если бы в вашем ответе было сказано более четко. Тем не менее, использование сертификатов 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-update gem:

C:\>gem uninstall rubygems-update -x
Roffers
источник
5

Простая инструкция вставки копии, приведенная здесь о .pem файле

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

Для проверки сертификата не удалось

Если вы читали предыдущие разделы, вы будете знать, что это значит (и позор> вам, если вы этого не сделали).

Нам нужно скачать AddTrustExternalCARoot-2048.pem . Откройте командную строку и введите:

C:> gem, который 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.

geniushkg
источник
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 версию rubygems в вашем gemfile как временное решение.
fbernier
1
Я сделал это, и это работает. Пока это достаточное решение.
mrzasa
У меня здесь такая же проблема. Так @Ownatik, как использовать ssl версию rubygems?
Зек
4

Самое простое решение:

rvm pkg install openssl
rvm reinstall all --force

Вуаля!

user2886774
источник
2
Что это на самом деле делает с моей системой?
Брэдли Флад
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
Schrockwell
источник
Это сработало для меня. Вам нужно заменить «2.2» на версию ruby, которую вы используете
Джош
3

Спасибо @ Alexander.Iljushkin для:

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

После того, как тот упаковщик все еще отказал, и решение этого было:

gem install bundler

Себастьян Топор
источник
2

Я получал похожую ошибку. Вот как я решил это: в вашем каталоге пути проверьте наличие Gemfile. Измените источник в файле gem на http вместо https и сохраните его. Это может установить пакет без выдачи сертификата SSL.

ecksor5
источник
2

Для Windows-машины, проверьте свою версию Gem с

gem --version

Затем обновите ваш драгоценный камень следующим образом:

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

Теперь, используя вашу командную строку:

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

Теперь установка пакета будет успешной без ошибки проверки сертификата SSL.

Более подробная инструкция здесь

KBIIX
источник
1

Это сработало для меня:

  • загрузить последнюю версию драгоценного камня по адресу https://rubygems.org/pages/download
  • установить драгоценный камень с gem install --local [path to downloaded gem file]
  • обновить драгоценные камни с update_rubygems
  • убедитесь, что вы используете последнюю версию gem --version
Гай Чолиак
источник
1

Мне пришлось переустановить openssl:

brew uninstall --force openssl
brew install openssl
gabeodess
источник
1

Я только недавно столкнулся с этой проблемой и следовал за шагами, изложенными здесь . Возможно, вы не указали правильный сертификат OpenSSL. После запуска:

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

и

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

полный комплект побежал!

jshaf
источник
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-update gem:

C:\>gem uninstall rubygems-update -x
Removing update_rubygems
Successfully uninstalled rubygems-update-2.6.7
Aswathy
источник
1

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

export SSL_CERT_FILE=~/RootCert.pem
mostlikelee
источник
0

Если вы используете rails-assets

Если вы использовали https://rails-assets.org/для управления своими активами, никакие ответы не помогут вам. Даже преобразование в httpне поможет.

Самое простое решение - использовать этот источник http://insecure.rails-assets.org. Это было упомянуто на их домашней странице .

Анвар
источник
0

Единственное, что сработало для меня в устаревшей системе Windows и версии ruby ​​1.9, это загрузка файла cacert с http://guides.rubygems.org/ssl-certificate-update/

А затем выполните команду ниже перед запуском комплекта установки

bundle config --global ssl_ca_cert /path/to/file.pem
Александар Павич
источник