Я использую 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'
Пожалуйста, предложите..
У меня возникла аналогичная проблема при попытке использовать генератор 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 не может проверить.
export SSL_CERT_FILE=/usr/local/etc/openssl/certs/cert.pem
Если вы используете 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/questions/32353917/cant-run-ruby-2-2-3-with-rvm-on-osx и Ян Коннор.
Здесь вы можете исправить это в 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
Чтобы сделать это постоянным, добавьте его в панель управления .
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
.
Проблема заключается в том, что 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
Я скопировал загруженный сертификат на этот путь, и он сработал. НТН
~/.rvm/usr/ssl/cert.pem
Причина, по которой вы получаете эту ошибку в 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
(очевидно, замените свою рубиновую версию по мере необходимости).
\curl -sSL https://get.rvm.io | bash -s stable --autolibs=homebrew
а затем rvm install <ruby-version> --disable-binary
В какой-то момент я также сделал rvm get head
как это некоторые проблемы.
Новый сертифицированный жемчуг предназначен для устранения этого:
В 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 ответил.
Один 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]
Просто добавьте gem 'certified' в свой gemfile и запустите установку пакета.
Хорошо, это сработало для меня
rvm pkg install openssl
rvm reinstall 1.9.2 --with-openssl-dir=$rvm_path/usr
Что-то не так с реализацией opensl моего ubuntu 12.04
curl -O http://curl.haxx.se/ca/cacert.pem
, mv cacert.pem cert.pem
, mv cert.pem $rvm_path/usr/ssl
Я попробовал установить 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
export SSL_CERT_FILE=/usr/local/etc/openssl/certs/cacert.pem
~/.bash_profile
, он оставляет напоминание о том, что было добавлено (и, что особенно важно, где), когда требуются дальнейшие обновления.
Вот еще один вариант для целей отладки.
Обязательно никогда не используйте это в какой-либо производственной среде, так как это отрицательно скажется на преимуществах использования SSL. Это действительно справедливо для этого в вашей локальной среде разработки.
require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
Хотя я знаю это скорее хромающее решение, я по-прежнему разделяю это, потому что кажется, что очень мало людей, отвечающих здесь, используют 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.
Как бы то ни было, это будет работать.
У меня была эта же проблема во время работы над проектом Ruby. Я использую Windows 7 64bit.
Я решил это:
источник: https://gist.github.com/fnichol/867550
Самый простой ответ, который работал у меня, - это
sudo apt-get install openssl ca-certificates
И вуаля!!!
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
Я столкнулся с этой проблемой, и предлагаемое исправление rvm osx-ssl-certs update all
не работало, несмотря на то, что я являюсь пользователем RVM в OSX.
Исправление, которое сработало для меня, это переустановка последней версии openssl:
brew update
brew remove openssl
brew install openssl
Это сработало для меня. Если вы используете rvm и brew:
rvm remove 1.9.3
brew install openssl
rvm install 1.9.3 --with-openssl-dir=`brew --prefix openssl`
Затем, как говорится в этом сообщении в блоге,
" Как вылечить Net:: HTTPs рискованное поведение по умолчанию HTTPS"
вы можете захотеть установить драгоценный камень always_verify_ssl_certificates
, который позволит вам установить значение по умолчанию для ca_file
.
Я исправил эту проблему, выполнив ее в терминале. Полная запись доступна через здесь
rvm install 2.2.0 --disable-binary
Решение OSX:
установить последнюю стабильную версию rvm
rvm get stable
использовать команду rvm для автоматического разрешения сертификатов
rvm osx-ssl-certs update all
Если у вас есть символическая ссылка в /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)
Просто потому, что инструкции были немного разными для того, что сработало для меня, я думал, что добавляю свои 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
ca-bundle.crt
) и использовать Google Internet Authority G2 в :ssl => {:ca_path => "/share/curl/curl-ca-bundle.crt"}
, Это единственное, что необходимо для сертификации соединений с Google.
Вот что я сделал, что помогло, если у вас есть проблема с Leopard.
Мой сертификат был старым и нуждался в обновлении. Я скачал это:
http://curl.haxx.se/ca/cacert.pem
Затем заменил мой сертификат, который был найден здесь на Leopard:
/usr/share/curl/curl-ca-bundle.crt
Перезагрузите все, что у вас есть, и вы должны быть добрыми!
Что сработало для меня - это комбинация ответов, а именно:
# Reinstall OpenSSL
brew update
brew remove openssl
brew install openssl
# Download CURL CA bundle
cd /usr/local/etc/openssl/certs
wget http://curl.haxx.se/ca/cacert.pem
/usr/local/opt/openssl/bin/c_rehash
# Reinstall Ruby from source
rvm reinstall 2.2.3 --disable-binary
Последняя версия rubygem-update-2.6.7 разрешила эту проблему. http://guides.rubygems.org/ssl-certificate-update/
Мне пришлось переустановить 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 по этому вопросу.
Просто запустите исполняемый файл certified-update
, и эта команда сделает все ваши сертификаты актуальными.
Это работало для моего приложения Ruby on Rails в Windows.
Добавление gem 'certified', '~> 1.0'
в мой Gemfile
и запуск bundle
решил эту проблему для меня.
Если вы используете локальное приложение rails, просто добавьте эту строку в конец приложения .rb.
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
После этого вы можете использовать приложение без каких-либо проблем. Вы можете назвать это взломом, но это не рекомендуется. Используйте только в том случае, если вам нужно выполнить локальную работу
У меня были проблемы в течение нескольких дней и был взломан. Эта ссылка оказалась для меня очень полезной. Это помогло мне сделать успешное обновление SSL на MAC OS X 9.
Добавьте это в свой gemfile:
gem 'cliver', :git => 'git://github.com/yaauie/cliver', :ref => '5617ce'
Установка следующего пакета на Ubuntu исправила проблему для меня
sudo apt-get install libssl-dev
Когда-то это не всегда проблема с rvm в MAC OSX, если вы удалите .rvm, проблема все еще (особенно при резервном копировании данных из timemachine), вы можете попробовать этот путь.
1.brew update
2.brew install openssl
Это может быть проблема с поврежденными/недействительными сертификатами SSL. На mac вы можете использовать эту команду для обновления SSL-сертификатов:
rvm osx-ssl-certs update all