我使用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'

请建议. .


当前回答

你在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版本)。

其他回答

最新的rubygem-update-2.6.7已经解决了这个问题。http://guides.rubygems.org/ssl-certificate-update/

Ruby找不到任何可以信任的根证书。

看看这篇博客文章的解决方案:“Ruby 1.9和SSL错误”。

解决方案是安装curl-ca-bundle端口,其中包含Firefox使用的相同根证书: Sudo端口安装curl-ca-bundle 并告诉你的HTTPS对象使用它: https。Ca_file = '/opt/local/share/curl/curl-ca-bundle.crt' 注意,如果你想让你的代码在Ubuntu上运行,你需要设置ca_path属性,使用默认的证书位置/etc/ssl/certs.

然后,正如这篇博客文章所建议的,

“如何治愈Net::HTTP的风险默认HTTPS行为”

您可能需要安装always_verify_ssl_certificates gem,该gem允许您为ca_file设置默认值。

对我来说,有效的答案是:

# Reinstall OpenSSL
brew update
brew remove openssl
brew install openssl
# Download CURL CA bundle
cd /usr/local/etc/openssl/certs
wget http://curl.haxx.se/ca/cacert.pem
/usr/local/opt/openssl/bin/c_rehash
# Reinstall Ruby from source
rvm reinstall 2.2.3 --disable-binary

以下是如何在Windows上修复它:https://gist.github.com/867550(由Fletcher Nichol创建)

摘录:

手工方式(无聊) 下载cacert。来自http://curl.haxx.se/ca/cacert.pem的Pem文件。将文件保存到C:\RailsInstaller\cacert.pem。 现在,通过设置SSL_CERT_FILE,让ruby知道您的证书颁发机构包。要在当前命令提示符会话中设置此选项,输入: 设置SSL_CERT_FILE = C: \ RailsInstaller \ cacert.pem 要使此设置为永久设置,请在控制面板中添加此设置。