我使用Authlogic-Connect第三方登录。在运行适当的迁移后,Twitter/谷歌/yahoo登录似乎工作正常,但facebook登录抛出异常:
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
开发日志显示
OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed):
app/controllers/users_controller.rb:37:in `update'
请建议. .
如果你在OS X上使用RVM,你可能需要运行这个:
rvm osx-ssl-certs update all
更多信息请访问:http://rvm.io/support/fixing-broken-ssl-certificates
完整的解释如下:https://github.com/wayneeseguin/rvm/blob/master/help/osx-ssl-certs.md
更新
在Ruby 2.2上,你可能需要从源代码重新安装Ruby来解决这个问题。以下是如何(将2.2.3替换为Ruby版本):
rvm reinstall 2.2.3 --disable-binary
感谢https://stackoverflow.com/a/32363597/4353和伊恩·康纳。
你在OSX上得到这个错误的原因是rvm安装的ruby。
如果你在OSX上遇到这个问题,你可以在这篇博客文章中找到一个真正广泛的解释:
http://toadle.me/2015/04/16/fixing-failing-ssl-verification-with-rvm.html
简而言之,对于某些版本的Ruby, RVM会下载预编译的二进制文件,这会在错误的位置查找证书。通过强制RVM下载源代码并在您自己的机器上编译,可以确保证书位置的配置是正确的。
这样做的命令是:
rvm install 2.2.0 --disable-binary
如果您已经有问题的版本,您可以重新安装它:
rvm reinstall 2.2.0 --disable-binary
(显然,根据需要替换ruby版本)。
虽然知道这是一个相当蹩脚的解决方案,但我仍然分享这一点,因为回答这里的人似乎很少使用Windows,我认为一些Windows用户(包括我)会喜欢一个简单而直观的方法。
require 'openssl'
puts OpenSSL::X509::DEFAULT_CERT_FILE
这将告诉您的openssl在哪里查找证书文件。我的名字不是Luis,而是C:/Users/Luis/Code/luislavena/ backup -build/var/knapsack/software/x86-windows/openssl/1.0.0l/ssl/cert.pem。根据各自的环境,路径可能不同(例如,打开背包而不是luislavena)。
即使在设置SSL_CERT_FILE=C:\foo\bar\baz\cert后,路径也没有改变。Pem通过控制台,所以…我在本地磁盘中创建了c:\ users \luis \ code \luislavena\背包-build\var\背包\software\x86-windows\openssl\1.0.0l\ssl目录,并将一个证书文件放入其中。
虽然很蹩脚,但这肯定会奏效。