получить сообщение «Серверный сертификат чтения OpenSSL B: сбой проверки сертификата», но ТОЛЬКО для Twitter - PullRequest
1 голос
/ 21 августа 2011

У меня есть веб-сайт rails (reccr.com), который использует omniauth для аутентификации пользователей с несколькими различными опциями, включая Facebook и Twitter (с использованием OAuth) и несколько других (с использованием OpenID).Однако в последнее время (я думаю, в течение последней недели или около того) попытка аутентификации через Twitter выдает ошибку

OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed)

, но ТОЛЬКО Twitter делает это;любой другой сервис аутентифицируется просто отлично.Я искал в Интернете решение, но все, что я могу найти в этой ошибке, относится к ситуациям, когда это происходит со ВСЕМИ поставщиками аутентификации, и ничего, что я могу найти, не относится к ситуациям, когда это происходит только с одним конкретным поставщиком.

Насколько я знаю (и я являюсь единственным разработчиком), ничего не изменилось в отношении сайта, который мог бы предсказать это, и я думаю, что любое изменение сайта, которое может вызвать эту проблему с Twitter, также приведет к тому жепроблема с аутентификацией Facebook OAuth.

Есть идеи, как мне это исправить?Сначала я надеялся, что проблема была в конце Твиттера, и что они исправят ее через пару дней, но прошло около недели, и это все еще продолжается, и я не видел каких-либо других специфичных для Твиттера жалоб на эту ошибку.поэтому я начинаю подозревать, что это все-таки я.

РЕДАКТИРОВАТЬ: ОК, после обнаружения ЭТОГО и ЭТОГО , я на полпути.Я пытаюсь реализовать решение, в котором я добавляю :client_options => {:ca_file => '#{Rails.root}/config/ca-bundle.crt'} в конец строки в своем omniauth.rb, где я объявляю Twitter одним из моих провайдеров.Однако, когда я делаю это, я получаю ошибку wrong number of arguments (4 for 3) в lib/rack/builder.rb:54:in initialize'`.Есть идеи как починить что ?

Ответы [ 2 ]

1 голос
/ 23 августа 2011

ОК, оказывается, это была куча вещей.

Твиттер изменил свой SSL-сертификат, как упоминалось ЗДЕСЬ . (Что я не мог прочитать прошлой ночью, потому что dev.twitter.com был недоступен!)

Omniauth использует oauth, в котором есть ошибка, заставляющая его использовать определенный файл CA, а не более общий путь CA, как подробно HERE .

Одним из решений является указание правильного файла CA при инициализации вашего провайдера в omniauth, однако я продолжал получать ошибки «неправильное количество аргументов», когда пытался это сделать. После долгой череды неудач, которые закончились моей полной деинсталляцией и переустановкой рельсов, она перестала выдавать мне эту ошибку, поэтому я смог добавить эту спецификацию для omniauth, и теперь она может снова аутентифицироваться в Twitter! Ура!

К сожалению, где-то во всем этом перестала быть возможность аутентификации в Facebook, но я уверен, что смогу понять, почему это происходит.

1 голос
/ 21 августа 2011

Обычно эта ошибка означает, что Ruby не может найти набор сертификатов на локальном компьютере, которые проверяют сертификаты, предоставленные сервером, посмотрите, может ли это сообщение в блоге помочь вам. http://martinottenwaelter.fr/2010/12/ruby19-and-the-ssl-error/

...