获得“OpenSSL的读取服务器证书B:证书验证失败”的错误,但只为Twitter的

问题描述:

我有一个Rails网站(reccr.com)使用omniauth验证与几个不同的选项,包括Facebook和Twitter的用户(使用OAuth)和其他一些(使用OpenID)。不过最近,(我认为的最后一个星期左右的时间内)试图通过Twitter进行身份验证抛出获得“OpenSSL的读取服务器证书B:证书验证失败”的错误,但只为Twitter的

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

错误,但只有Twitter的做它;所有其他服务的身份验证都很好。我一直在寻找一个解决方案,但我能找到的所有错误都解决了所有身份验证提供程序出现的情况,我无法找到适用于只发生在一个特定提供程序中的情况。

就我所知(而且我是唯一的开发者),本网站没有任何改变可以预测这一点,我认为,任何改变网站,这将导致与Twitter的这个问题也会导致与Facebook OAuth身份验证相同的问题。

关于如何解决这个问题的任何想法?我最初希望问题出在Twitter上,他们会在几天内解决问题,但这个问题已经过去了大约一周,而且还在进行中,而且我还没有看到任何其他Twitter特有的关于此错误的投诉所以我开始怀疑这毕竟是我。

编辑:好的,在发现THISTHIS后,我已经到了一半了。我试图在我的omniauth.rb中添加一个:client_options => {:ca_file => '#{Rails.root}/config/ca-bundle.crt'}到该行的末尾来实现该解决方案,我将Twitter声明为我的提供者之一。但是,当我这样做时,我得到wrong number of arguments (4 for 3)错误在lib/rack/builder.rb:54:in initialize'`。任何想法如何修复

+0

你从哪里得到你的证书?编辑:我不好,你是否实际上通过SSL连接,并在回调中抛出此错误? –

+0

我不确定。我使用OmniAuth进行身份验证,因此我为其处理了很多事情;我应该在哪里看? – luvcraft

+0

现在忽略,检查我的答案,看看是否解决了你的问题。 –

通常这个错误意味着,红宝石不能找到一组本地机器验证那些从服务器提供,见证书,如果这个博客帖子可以帮助你。 http://martinottenwaelter.fr/2010/12/ruby19-and-the-ssl-error/

+0

我在我的omniauth初始化程序中有这个: 'require“openid/fetchers “; OpenID.fetcher.ca_file =“#{Rails.root} /config/ca-bundle.crt”' (并且我有我的ca-bundle.crt在正确的地方) 但这是我得到的最接近https设置。 – luvcraft

+0

那么这里只有两个选项。您的ca-bundle存在问题并且无法进行身份验证,或者Twitter使用的证书无效。我的钱存在于你的捆绑软件中,也许检查他们是否使用未包含在你的软件包中的CA. –

OK,原来是一堆东西。

微博改变了他们的SSL证书,如提及HERE。 (我不能读取昨晚因为dev.twitter.com跌!)

Omniauth使用OAuth,它具有强制其使用特定的CA文件,而不是更广泛的CA路径的错误,如详细HERE

解决的办法之一是初始化你在omniauth提供商时指定正确的CA文件,但我一直得到“错误的参数数目”错误,当我试图做到这一点。在我完全卸载并重新安装rails的一系列意外事故发生后,它不再给我这个错误,所以我能够为omniauth添加该规范,现在它可以再次向Twitter进行身份验证!万岁!

不幸的是,在某个地方所有这一切停止它能够验证给Facebook,但我敢肯定我能弄清楚为什么会发生的事情。