我使用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'
请建议. .
我在尝试为Rails 3使用JQuery生成器时遇到了类似的问题
我是这样解决的:
Get the CURL Certificate Authority (CA) bundle. You can do this with:
sudo port install curl-ca-bundle [if you are using MacPorts]
or just pull it down directly wget http://curl.haxx.se/ca/cacert.pem
Execute the ruby code that is trying to verify the SSL certification: SSL_CERT_FILE=/opt/local/etc/certs/cacert.pem rails generate jquery:install. In your case, you want to either set this as an environment variable somewhere the server picks it up or add something like ENV['SSL_CERT_FILE'] = /path/to/your/new/cacert.pem in your environment.rb file.
您还可以将CA文件(我没有尝试过)安装到操作系统—这里有很长的说明—这应该以类似的方式工作,但我个人没有尝试过。
基本上,您遇到的问题是一些web服务正在响应针对OpenSSL无法验证的CA签名的证书。
问题是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