我使用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 Lion和使用macports和rvm

我安装了curl-ca-bundle:

sudo port install curl-ca-bundle

然后我调整了我的omniauth配置如下:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2, APP_CONFIG['CONSUMER_KEY'], APP_CONFIG['CONSUMER_SECRET'],
           :scope => 'https://www.google.com/m8/feeds https://www.googleapis.com/auth/userinfo.profile',
           :ssl => {:ca_path => "/share/curl/curl-ca-bundle.crt"}
end

其他回答

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

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

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

虽然知道这是一个相当蹩脚的解决方案,但我仍然分享这一点,因为回答这里的人似乎很少使用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目录,并将一个证书文件放入其中。

虽然很蹩脚,但这肯定会奏效。

如果你在/usr/local/etc/openssl中有一个指向cert.pem的符号链接,尝试这样做:

ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE" (should be /usr/local/etc/openssl)
cd /usr/local/etc/openssl
wget http://curl.haxx.se/ca/cacert.pem
ln -s cacert.pem 77ee3751.0 (77ee3751.0 is my symbolic link, should depend on the openssl version)

一行程序在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]

这可能是损坏/无效SSL证书的问题。在mac上可以使用此命令更新SSL证书:

rvm osx-ssl-certs update all