我有一个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身份验证相同的问题。
关于如何解决此问题的任何想法?我最初希望这个问题出现在推特结束时,并且他们会在几天内修复它,但它已经持续了大约一个星期而且还在继续,而且我还没有看到任何其他针对此错误的Twitter特定投诉所以我开始怀疑它毕竟是我。
编辑:好的,在发现THIS和THIS后,我已经到了一半。我正在尝试实现解决方案,我在omniauth.rb中添加:client_options => {:ca_file => '#{Rails.root}/config/ca-bundle.crt'}
到行的末尾,我将Twitter声明为我的提供者之一。但是,当我这样做时,我在wrong number of arguments (4 for 3)
initialize'`时收到lib/rack/builder.rb:54:in
错误。任何想法如何解决 ?
答案 0 :(得分:1)
通常这个错误意味着Ruby无法在本地计算机上找到验证从服务器提供的证书的证书集,看看这篇博文是否可以帮助你。 http://martinottenwaelter.fr/2010/12/ruby19-and-the-ssl-error/
答案 1 :(得分:1)
好的,事实证明这是一堆东西。
Twitter已经改变了他们的SSL证书,正如HERE所述。 (我昨晚因为dev.twitter.com失败而无法阅读!)
Omniauth使用oauth,它有一个错误,强制它使用特定的CA文件,而不是更通用的CA路径,详见HERE。其中一个解决方案是在omniauth中初始化您的提供程序时指定正确的CA文件,但是当我尝试这样做时,我不断收到“错误的参数数量”错误。在我完全卸载并重新安装rails之后发生了一系列不幸事件之后,它停止了给我这个错误,所以我能够为omniauth添加该规范,现在它可以再次对Twitter进行身份验证!万岁!
不幸的是,在所有这一切的某个地方停止了对Facebook的身份验证,但我确信我可以弄清楚为什么会发生这种情况。