SSL_connect возвращено = 1 errno = 0 состояние = SSLv3 прочитанный сертификат сервера B: сбой проверки сертификата - PullRequest
278 голосов
/ 24 декабря 2010

Я использую Authlogic-Connect для сторонних входов в систему.После выполнения соответствующих миграций логины Twitter / Google / Yahoo, кажется, работают нормально, но логин facebook выдает исключение:

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

В журнале разработчика отображается

OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed):
  app/controllers/users_controller.rb:37:in `update'

Пожалуйста, предложите ..

Ответы [ 37 ]

135 голосов
/ 12 мая 2011

Я столкнулся с подобной проблемой при попытке использовать генератор JQuery для Rails 3

Я решил это так:

  1. Получить сертификат CURLПакет полномочий (CA). Вы можете сделать это с:

    • sudo port install curl-ca-bundle [если вы используете MacPorts]
    • или просто потяните его вниз wget http://curl.haxx.se/ca/cacert.pem
  2. Выполните код рубина, который пытается проверить сертификацию SSL: SSL_CERT_FILE=/opt/local/etc/certs/cacert.pem rails generate jquery:install.В вашем случае вы хотите либо установить ее как переменную среды, где сервер ее подхватит, либо добавить что-то вроде ENV['SSL_CERT_FILE'] = /path/to/your/new/cacert.pem в файл environment.rb.

Вы также можете простоустановить файлы CA (я не пробовал это) в ОС - здесь есть длинные инструкции - это должно работать аналогичным образом, но я не пробовал это лично.

По сути, проблема, с которой вы сталкиваетесь, заключается в том, что некоторые веб-службы отвечают сертификатом, подписанным против CA, который OpenSSL не может проверить.

134 голосов
/ 21 августа 2013

Если вы используете RVM в OS X, вам, вероятно, нужно выполнить это:

rvm osx-ssl-certs update all

Более подробная информация здесь: http://rvm.io/support/fixing-broken-ssl-certificates

А вот полное объяснение: https://github.com/wayneeseguin/rvm/blob/master/help/osx-ssl-certs.md


Обновление

В Ruby 2.2 вам может потребоваться переустановить Ruby из исходного кода, чтобы это исправить.Вот как (замените 2.2.3 на вашу версию Ruby):

rvm reinstall 2.2.3 --disable-binary

Кредит https://stackoverflow.com/a/32363597/4353 и Иану Коннору .

129 голосов
/ 24 сентября 2011

Вот как это можно исправить в Windows: https://gist.github.com/867550 (созданный Флетчером Николом)

Выдержка:

Ручной способ(Скучно)

Загрузите файл cacert.pem из http://curl.haxx.se/ca/cacert.pem. Сохраните этот файл в C:\RailsInstaller\cacert.pem.

Теперь сообщите ruby ​​о вашем пакете центра сертификации, установив SSL_CERT_FILE,Чтобы установить это в текущем сеансе командной строки, введите:

set SSL_CERT_FILE=C:\RailsInstaller\cacert.pem

Чтобы сделать это постоянным параметром, добавьте его на панели управления .

31 голосов
/ 31 декабря 2010

Ruby не может найти корневые сертификаты для доверия.

Посмотрите на этот пост в блоге для решения: " Ruby 1.9 и ошибка SSL ".

Решение состоит в том, чтобы установить порт curl-ca-bundle, который содержит те же корневые сертификаты, используемые Firefox:

sudo port install curl-ca-bundle

, и указать вашему https объекту использовать его:

https.ca_file = '/opt/local/share/curl/curl-ca-bundle.crt'

Обратите внимание, что если вы хотите, чтобы ваш код запускался в Ubuntu, вам нужно вместо этого установить атрибут ca_path с расположением сертификатов по умолчанию /etc/ssl/certs.

24 голосов
/ 24 июля 2015

Причиной возникновения этой ошибки в OSX является установленный rvm ruby.

Если вы столкнулись с этой проблемой на OSX, вы можете найти действительно широкое объяснение этого в этом сообщении в блоге:

http://toadle.me/2015/04/16/fixing-failing-ssl-verification-with-rvm.html

Короткая версия такова, что дляВ некоторых версиях Ruby RVM загружает предварительно скомпилированные двоичные файлы, которые ищут сертификаты в неправильном месте.Заставив RVM загрузить исходный код и скомпилировать его на своем компьютере, вы убедитесь, что конфигурация для местоположения сертификата верна.

Команда для этого:

rvm install 2.2.0 --disable-binary

, если выу вас уже есть рассматриваемая версия, вы можете переустановить ее с помощью:

rvm reinstall 2.2.0 --disable-binary

(очевидно, замените вашу версию ruby ​​на нужную).

20 голосов
/ 07 мая 2012

Проблема в том, что ruby ​​не может найти корневой сертификат для доверия. По состоянию на 1,9 рубин проверяет это. Вам нужно убедиться, что в вашей системе есть сертификат curl в виде файла pem. Вам также необходимо убедиться, что сертификат находится в том месте, где его ожидает ruby. Вы можете получить этот сертификат на ...

http://curl.haxx.se/ca/cacert.pem

Если вы являетесь пользователем RVM и OSX, местоположение файла сертификата будет зависеть от того, какую версию ruby ​​вы используете. Задание пути явно с помощью: ca_path - ПЛОХАЯ идея, поскольку ваш код не будет переносимым, когда он попадет в производство Там вы хотите предоставить ruby ​​сертификат в расположении по умолчанию (и предположим, что ваши разработчики знают, что они делают). Вы можете использовать dtruss, чтобы определить, где система ищет файл сертификата.

В моем случае система искала файл сертификата в

/Users/stewart.matheson/.rvm/usr/ssl/cert.pem

однако система MACOSX ожидает сертификат в

/System/Library/OpenSSL/cert.pem

Я скопировал скачанный сертификат по этому пути, и он заработал. НТН

19 голосов
/ 26 августа 2012

Новый сертифицированный драгоценный камень разработан, чтобы исправить это:

https://github.com/stevegraham/certified

18 голосов
/ 27 марта 2016

Просто добавьте gem 'Certified' в ваш gemfile и запустите пакетную установку.

  1. драгоценный камень ' сертифицирован '
  2. комплектация
17 голосов
/ 06 января 2012

В Mac OS X Lion с последней версией macport:

sudo port install curl-ca-bundle  
export SSL_CERT_FILE=/opt/local/share/curl/curl-ca-bundle.crt  

Затем повторно запустите неудавшееся задание.

Обратите внимание, что местоположение файла сертификата изменилось с тех пор, как Эрик Г ответил 12 мая.

14 голосов
/ 04 февраля 2015

Один вкладыш исправляет это для Windows в приглашении администратора

choco install wget (сначала см. chocolatey.org )

wget http://curl.haxx.se/ca/cacert.pem -O C:\cacert.pem && setx /M SSL_CERT_FILE "C:\cacert.pem"

Или просто сделайте это:

gem sources -r https://rubygems.org/
gem sources -a http://rubygems.org/

метод Миланио:

gem sources -r https://rubygems.org
gem sources -a http://rubygems.org 
gem update --system
gem sources -r http://rubygems.org
gem sources -a https://rubygems.org

gem install [NAME_OF_GEM]
...