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

请建议. .


当前回答

问题是ruby找不到可以信任的根证书。在1.9 ruby检查这个。您需要确保系统中有pem文件形式的curl证书。您还需要确保证书位于ruby期望它位于的位置。你可以在……领取这张证书。

http://curl.haxx.se/ca/cacert.pem

如果您是RVM和OSX用户,那么您的证书文件位置将根据您使用的ruby版本而有所不同。使用:ca_path显式地设置路径是一个坏主意,因为当您的代码进入生产环境时,它将无法移植。你想在默认位置为ruby提供一个证书(并且假设你的开发人员知道他们在做什么)。您可以使用dtruss来确定系统在哪里查找证书文件。

在我的情况下,系统正在寻找证书文件

/Users/stewart.matheson/.rvm/usr/ssl/cert.pem

但是MACOSX系统需要一个证书

/System/Library/OpenSSL/cert.pem

我将下载的证书复制到这个路径,它工作了。HTH

其他回答

如果你在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和伊恩·康纳。

一行程序在Admin提示符中修复了Windows的问题

巧克力安装wget(第一次见chocolatey.org)

wget http://curl.haxx.se/ca/cacert.pem -O C:\cacert.pem && setx /M SSL_CERT_FILE "C:\cacert.pem"

或者这样做:

gem sources -r https://rubygems.org/
gem sources -a http://rubygems.org/

Milanio的方法:

gem sources -r https://rubygems.org
gem sources -a http://rubygems.org 
gem update --system
gem sources -r http://rubygems.org
gem sources -a https://rubygems.org

gem install [NAME_OF_GEM]

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.

在Ruby 2.3.4中遇到这个问题:

我解了OpenSSL,然后重新安装。我跑:

酿造卸载——忽略依赖openssl

然后

安装openssl

它做到了。

只需在gemfile中添加gem 'certified',然后运行bundle install。

宝石“认证” 包安装