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

Альтернативное решение:

[Я пользователь 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 не может их найти

Другие вопросы по тегам