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
(очевидно, замените свою рубиновую версию по мере необходимости).
Ответ 7
Новый сертифицированный жемчуг предназначен для устранения этого:
https://github.com/stevegraham/certified
Ответ 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
Ответ 18
Затем, как говорится в этом сообщении в блоге,
" Как вылечить Net:: HTTPs рискованное поведение по умолчанию HTTPS"
вы можете захотеть установить драгоценный камень always_verify_ssl_certificates
, который позволит вам установить значение по умолчанию для ca_file
.
Ответ 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 по этому вопросу.