Подтвердить что ты не робот

Ошибка 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

Как решить ошибку Фарадея?

4b9b3361

Ответ 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

Ответ 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 не может найти один