Ошибка Omniauth Facebook - Faraday:: Ошибка:: ConnectionFailed
(FYI: Я следую Twitter Omniauth из railscast # 241. Я использовал Twitter успешно, теперь собираюсь на Facebook)
Как только я вошел в Facebook с помощью Omniauth, я получаю эту ошибку:
Faraday::Error::ConnectionFailed
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
Что это значит?
Это мой код
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, '<key from fb>', '<another key from fb>'
end
На самом деле ничего особенного в моем коде, все, что у меня есть, есть в sessionController, который я хочу использовать to_yaml, чтобы увидеть, что внутри request.env
class SessionsController < ApplicationController
def create
raise request.env["omniauth.auth"].to_yaml
end
end
Как решить ошибку Фарадея?
Ответы
Ответ 1
Вы получаете эту ошибку, потому что Ruby не может найти доверенный сертификат root.
Исправить для Windows: https://gist.github.com/867550
Исправление для Apple/Linux: http://martinottenwaelter.fr/2010/12/ruby19-and-the-ssl-error/ < - Этот сайт теперь недоступен.
Вот исправление Apple/Linux в соответствии с сайтом выше:
Решение заключается в установке порта 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.
В конце концов, это будет работать как на Mac OS X, так и на Ubuntu:
require 'net/https'
https = Net::HTTP.new('encrypted.google.com', 443)
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_PEER
https.ca_path = '/etc/ssl/certs' if File.exists?('/etc/ssl/certs') # Ubuntu
https.ca_file = '/opt/local/share/curl/curl-ca-bundle.crt' if File.exists('/opt/local/share/curl/curl-ca-bundle.crt') # Mac OS X
https.request_get('/')
Ответ 2
Я исправил это в Mac OS X Lion 10.7.4 с помощью этого решения:
$ rvm remove 1.9.3 (or whatever version of ruby you are using)
$ rvm pkg install openssl
$ rvm install 1.9.3 --with-openssl-dir=$rvm_path/usr
после этого вам нужно будет загрузить отсутствующий файл cacert.pem:
$ cd $rvm_path/usr/ssl
$ sudo curl -O http://curl.haxx.se/ca/cacert.pem
$ sudo mv cacert.pem cert.pem
Ответ 3
Ответ Андрея не работал у меня на Mac OSX 10.8.3. Я переустановил openssl для установки ruby 2.0 некоторое время назад и с тех пор всегда получал эту ошибку. Я исправил это благодаря ответам Андрея и из проекта Rails.
Я побежал:
$ rvm -v
$ rvm get head
# Installation of latest version of rvm...
$ rvm -v
# rvm 1.19.5 (master)
$ rvm osx-ssl-certs status all
# Certificates for /usr/local/etc/openssl/cert.pem: Old.
# Certificates for /Users/mpapis/.sm/pkg/versions/openssl/0.9.8x/ssl/cert.pem: Old.
$ sudo rvm osx-ssl-certs update all
# Updating certificates...
Затем я проверил, правильно ли были обновлены сертификаты, снова запустив rvm osx-ssl-certs status all
, но /usr/local/etc/openssl/cert.pem
все еще не обновлялся. Я не знаю, было ли это необходимо, но я сделал следующее:
$ cd /usr/local/etc/openssl/
$ curl -O http://curl.haxx.se/ca/cacert.pem
$ mv cacert.pem cert.pem
После этого проблема была исправлена. Надеюсь, что это поможет кому-то другому, кто сталкивается с той же проблемой.
Ответ 4
это сработало для меня (в Mac OS X):
$ brew install curl-ca-bundle
$ export SSL_CERT_FILE=/usr/local/opt/curl-ca-bundle/share/ca-bundle.crt
Ответ 5
Альтернативное решение:
[Я пользователь Win7 с ручной установкой Ruby и Ruby on Rails]
У меня такая же проблема, но я не могу решить ответ, заданный этим вопросом. Кстати, наконец, я решил проблему с помощью следующего URL
Facebook Перенаправить URL-адрес в рубине на rails open ssl error https://github.com/technoweenie/faraday/wiki/Setting-up-SSL-certificates
Ответ 6
Веб-сайт RVM предлагает запустить rvm osx-ssl-certs update all
Веб-сайт RVM: как исправить сломанные сертификаты в вашей операционной системе.
Ответ 7
В Windows 7 приведенная выше ссылка на решение Neil Hoff (Fix for Windows: https://gist.github.com/867550) не работает для меня.
Вот что работает:
Использование cmd.exe:
curl -o c:\cacert.pem http://curl.haxx.se/ca/cacert.pem
set SSL_CERT_FILE=c:\cacert.pem
используя msysgit bash:
curl -o /c/cacert.pem http://curl.haxx.se/ca/cacert.pem
export SSL_CERT_FILE=/c/cacert.pem
Если у вас нет завитка в командной строке Windows 7, заходите сюда:
http://www.confusedbycode.com/curl/#downloads
оригинальное решение отсюда - кредит на:
https://github.com/chef/chef-dk/issues/106
Dunn.
Ответ 8
Ответ Андрея работал у меня, однако я столкнулся с огромным препятствием при попытке переустановить Ruby 1.9.3. Поскольку я установил новую версию Xcode с момента установки 1.9.3, мне не удалось переустановить, пока я не открыл настройки Xcode и не установил средства командной строки на вкладке "Загрузки".
Ответ 9
Посмотрите certified gem. Описание:
Убедитесь, что net/https использует OpenSSL:: SSL:: VERIFY_PEER для проверки SSL сертификаты и предоставляет комплект сертификатов в случае, если OpenSSL не может найти один