Omniauth Facebook Ошибка - Фарадей:: Ошибка::ConnectionFailed
(К вашему сведению: я слежу за омниавтом Twitter от 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
Как мне решить ошибку Фарадея?
9 ответов
Вы получаете эту ошибку, потому что Ruby не может найти корневой сертификат для доверия.
Исправление для 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('/')
Я исправил это на 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
Ответ Андрея не работал для меня на 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
После этого проблема была исправлена. Надеюсь, что это помогает кому-то, кто сталкивается с той же проблемой.
Это сработало для меня (на Mac OS X):
$ brew install curl-ca-bundle
$ export SSL_CERT_FILE=/usr/local/opt/curl-ca-bundle/share/ca-bundle.crt
Веб-сайт RVM предлагает запустить rvm osx-ssl-certs update all
Веб-сайт RVM: Как исправить испорченные сертификаты в вашей операционной системе.
Альтернативное решение:
[Я пользователь Win7 с ручной установкой Ruby и Ruby on Rails]
У меня та же проблема, но я не могу решить с помощью ответа на этот вопрос. Кстати, наконец, я получил решение проблемы, следуя URL
URL перенаправления Facebook в ruby on rails открывает ошибку ssl https://github.com/technoweenie/faraday/wiki/Setting-up-SSL-certificates
Для Windows 7: ссылка выше решения Нила Хоффа (Исправление для 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
Если у вас нет curl в командной строке Windows 7, найдите его здесь: http://www.confusedbycode.com/curl/
оригинальное решение отсюда - кредит: https://github.com/chef/chef-dk/issues/106
Dunn.
Ответ Андрея сработал для меня, однако я столкнулся с огромным препятствием при попытке переустановить Ruby 1.9.3. Поскольку я установил новую версию XCode с момента установки 1.9.3, я не смог переустановить ее, пока не открыл "Настройки XCode" и не установил Инструменты командной строки на вкладке "Загрузки".
Проверьте сертифицированный драгоценный камень. Описание:
Убедитесь, что net/https использует OpenSSL::SSL::VERIFY_PEER для проверки SSL-сертификатов и предоставляет пакет сертификатов в случае, если OpenSSL не может их найти