SSL_connect возвращен = 1 errno = 0 state = SSLv3 считать сертификат сервера B: проверка сертификата не выполнена

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

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

В журнале dev отображается

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'

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

Ответ 1

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

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

  • Получить пакет CURL Certificate Authority (CA). Вы можете сделать это с помощью

    • sudo port install curl-ca-bundle [если вы используете MacPorts]
    • или просто потяните его прямо wget http://curl.haxx.se/ca/cacert.pem
  • Выполните код ruby, который пытается проверить сертификацию 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 (я не пробовал это) в ОС - есть длительные инструкции здесь - это должно работать в аналогичная мода, но я не пробовал это лично.

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

Ответ 2

Если вы используете 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


Update

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

rvm reinstall 2.2.3 --disable-binary

Кредит fooobar.com/questions/26449/... и Ян Коннор.

Ответ 3

Здесь вы можете исправить это в Windows: https://gist.github.com/867550 (созданный Fletcher Nichol)

Выдержки:

Ручной режим (расточка)

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

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

set SSL_CERT_FILE=C:\RailsInstaller\cacert.pem

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

Ответ 4

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.

Ответ 5

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

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

Если ваш пользователь RVM и OSX, то ваше местоположение файла сертификата будет зависеть от того, какую версию рубина вы используете. Установка пути явно с помощью: ca_path - идея BAD, поскольку ваш код не будет переносимым, когда он начнет работать. Там, где вы хотите предоставить рубину сертификат в местоположении по умолчанию (и предположите, что ваши разработчики знают, что они делают). Вы можете использовать dtruss для работы там, где система ищет файл сертификата.

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

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

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

/System/Library/OpenSSL/cert.pem

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

Ответ 6

Причина, по которой вы получаете эту ошибку в OSX, - это рубин, установленный rvm.

Если вы столкнетесь с этой проблемой в 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

(очевидно, замените свою рубиновую версию по мере необходимости).

Ответ 8

В Mac OS X Lion с последним macport:

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

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

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

Ответ 9

Один liner исправляет его для 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]

Ответ 10

Хорошо, это сработало для меня

rvm pkg install openssl
rvm reinstall 1.9.2 --with-openssl-dir=$rvm_path/usr

Что-то не так с реализацией opensl моего ubuntu 12.04

Ответ 11

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

  • gem сертифицированный
  • установить пакет

Ответ 12

Вот еще один вариант для целей отладки.

Обязательно никогда не используйте это в какой-либо производственной среде, так как это отрицательно скажется на преимуществах использования SSL. Это действительно справедливо для этого в вашей локальной среде разработки.

require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

Ответ 13

Я попробовал установить curl-ca-bundle с помощью brew, но пакет больше недоступен:

$ brew install curl-ca-bundle
Error: No available formula for curl-ca-bundle 
Searching formulae...
Searching taps...

Решение, которое работало со мной на Mac, было:

 $ cd /usr/local/etc/openssl/certs/
 $ sudo curl -O http://curl.haxx.se/ca/cacert.pem

Добавьте эту строку в свой ~/.bash_profile (или ~/.zshrc для zsh):

export SSL_CERT_FILE=/usr/local/etc/openssl/certs/cacert.pem

Затем обновите свой терминал:

$ source ~/.bash_profile

Ответ 14

Хотя я знаю это скорее хромающее решение, я по-прежнему разделяю это, потому что кажется, что очень мало людей, отвечающих здесь, используют Windows, и я думаю, что некоторые из пользователей Windows (включая меня) простой и интуитивно понятный подход.

require 'openssl'
puts OpenSSL::X509::DEFAULT_CERT_FILE

Это указывает, где ваш openssl ищет файл сертификата. Меня зовут Луис, но мой был C:/Users/Luis/Code/luislavena/knap-build/var/knapsack/software/x86-windows/openssl/1.0.0l/ssl/cert.pem. Путь может быть различным в зависимости от каждой собственной среды (например, openknapsack вместо luislavena).

Путь не изменился даже после set SSL_CERT_FILE=C:\foo\bar\baz\cert.pem через консоль, , поэтому... Я создал каталог C:\Users\Luis\Code\luislavena\knap-build\var\knapsack\software\x86-windows\openssl\1.0.0l\ssl на своем локальном диске и поместил в него файл cert.

Как бы то ни было, это будет работать.

Ответ 15

У меня была эта же проблема во время работы над проектом Ruby. Я использую Windows 7 64bit.

Я решил это:

  • Загрузка файла cacert.pem из http://curl.haxx.se/ca/cacert.pem.
  • Сохраненный файл C:/RubyCertificates/cacert.pem
  • Затем установите мою переменную окружения "SSL_CERT_FILE" в "C:\RubyCertificates\cacert.pem"

источник: https://gist.github.com/fnichol/867550

Ответ 16

Самый простой ответ, который работал у меня, - это

sudo apt-get install openssl ca-certificates

И вуаля!!!

Ответ 17

OS X 10.8.x с Homebrew:

brew install curl-ca-bundle
brew list curl-ca-bundle
cp /usr/local/Cellar/curl-ca-bundle/1.87/share/ca-bundle.crt /usr/local/etc/openssl/cert.pem

Ответ 19

Это сработало для меня. Если вы используете rvm и brew:

rvm remove 1.9.3
brew install openssl
rvm install 1.9.3 --with-openssl-dir=`brew --prefix openssl`

Ответ 20

Я столкнулся с этой проблемой, и предлагаемое исправление rvm osx-ssl-certs update all не работало, несмотря на то, что я являюсь пользователем RVM в OSX.

Исправление, которое сработало для меня, это переустановка последней версии openssl:

brew update
brew remove openssl
brew install openssl

Ответ 21

Решение OSX:

установить последнюю стабильную версию rvm

rvm get stable

использовать команду rvm для автоматического разрешения сертификатов

rvm osx-ssl-certs update all

Ответ 22

Я исправил эту проблему, выполнив ее в терминале. Полная запись доступна через здесь

rvm install 2.2.0 --disable-binary

Ответ 23

Вот что я сделал, что помогло, если у вас есть проблема с Leopard.

Мой сертификат был старым и нуждался в обновлении. Я скачал это:

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

Затем заменил мой сертификат, который был найден здесь на Leopard:

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

Перезагрузите все, что у вас есть, и вы должны быть добрыми!

Ответ 24

Просто потому, что инструкции были немного разными для того, что сработало для меня, я думал, что добавляю свои 2 цента:

Я нахожусь в OS X Lion и использую macports и rvm

Я установил curl-ca-bundle:

sudo port install curl-ca-bundle

Затем я скорректировал свою конфигурацию omniauth следующим образом:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2, APP_CONFIG['CONSUMER_KEY'], APP_CONFIG['CONSUMER_SECRET'],
           :scope => 'https://www.google.com/m8/feeds https://www.googleapis.com/auth/userinfo.profile',
           :ssl => {:ca_path => "/share/curl/curl-ca-bundle.crt"}
end

Ответ 25

Если у вас есть символическая ссылка в /usr/local/etc/openssl, указывающая на cert.pem, попробуйте сделать это:

ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE" (should be /usr/local/etc/openssl)
cd /usr/local/etc/openssl
wget http://curl.haxx.se/ca/cacert.pem
ln -s cacert.pem 77ee3751.0 (77ee3751.0 is my symbolic link, should depend on the openssl version)

Ответ 26

У меня были проблемы в течение нескольких дней и был взломан. Эта ссылка оказалась для меня очень полезной. Это помогло мне сделать успешное обновление SSL на MAC OS X 9.

Ответ 27

Если вы используете локальное приложение rails, просто добавьте эту строку в конец приложения .rb.

OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

После этого вы можете использовать приложение без каких-либо проблем. Вы можете назвать это взломом, но это не рекомендуется. Используйте только в том случае, если вам нужно выполнить локальную работу

Ответ 28

Добавление gem 'certified', '~> 1.0' в мой Gemfile и запуск bundle решил эту проблему для меня.

Ответ 29

Просто запустите исполняемый файл certified-update, и эта команда сделает все ваши сертификаты актуальными.

Это работало для моего приложения Ruby on Rails в Windows.

Ответ 30

Мне пришлось переустановить Ruby. Это должно решить его, если вы используете Ubuntu и rbenv:

rbenv uninstall your_version

# install dependencies
sudo apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev

# install ruby with patch
curl -fsSL https://gist.github.com/mislav/055441129184a1512bb5.txt | \
  rbenv install --patch your_version

Для получения дополнительной информации ознакомьтесь с rbenv Wiki по этому вопросу.