我正在尝试通过 Facebook 或 Twitter 对用户进行身份验证,让他们填写信息,然后单击保存(从而创建用户记录)。我在最后一步遇到 OpenSSL 错误——点击保存后。这发生在 Devise RegistrationsController#create 方法中。
所以我在托管在 Heroku 上的 Rails 应用程序中遇到了这个错误:
2012-07-28T18:25:13+00:00 app[web.1]: OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed)
我见过很多解决方案,但没有一个有效。以下是我尝试过的一些事情:
1)安装certified
宝石
2)升级Heroku gem到v2.30,再次推送
3)这个:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :twitter, TWITTER_KEY, TWITTER_SECRET, {:client_options => {:ssl => {:ca_file => "/usr/lib/ssl/certs/ca-certificates.crt"}}}
provider :facebook, FACEBOOK_KEY, FACEBOOK_SECRET, {:scope => "publish_actions,user_location,email", :client_options => {:ssl => {:ca_file => "/usr/lib/ssl/certs/ca-certificates.crt"}}}
end
似乎一个问题可能是这个证书文件实际上并不存在——我在几个地方都看到过它,而且这似乎是 Heroku 的 ca_cert 文件的默认路径,但我可能是错的。
奇怪的是,这是在我已经通过 FB/Twitter 进行身份验证并尝试创建用户帐户之后发生的。为什么会这样,我该如何解决/调试这个?真诚的困惑。
更新:我将此行添加到 Omniauth 初始化程序中,现在它“工作”了。因此,我诊断出问题出在 Omniauth 上。但是,我仍然希望进行 SSL 验证……这显然会留下一个安全漏洞。
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE