真正的问题是Faraday(Omniauth/Oauth用于HTTP调用)没有没有为OpenSSL设置ca_路径变量.至少在Ubuntu上,大多数根证书存储在"/etc/ssl/certs"中.由于Faraday不是没有设置这个变量(目前还没有这样做的方法),OpenSSL不是没有找到Facebook SSL证书的根证书.
我有submitted a pull request to Faraday个,这将增加对这个变量的支持,希望他们很快就会引入这个变化.或者你可以用Patch或者Faradamonthis.之后,您应该在Gemspec中指定OAuth2 gem的0.3.0版本,该版本支持将SSL选项传递给Faraday现在只需升级到Faraday 0.6.1,它支持传递ca_path变量,并升级到OmniAuth 0.2.2,它对OAuth2具有适当的依赖关系.然后,只需在Omniauth初始值设定项中添加以下内容,即可正确解决此问题:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, FACEBOOK_KEY, FACEBOOK_SECRET, {:client_options => {:ssl => {:ca_path => "/etc/ssl/certs"}}}
end
所以,概括一下:
- 需要更新法拉第以支持SSL ca_路径罢工>安装Faraday 0.6.1
你的应用程序需要使用OAuth2版本0.3.0.您可能需要fork omniauth,因为它目前在0.2版本中有一个较小的版本依赖关系.x树升级到OmniAuth 0.2.2
- 修改提供者初始值设定项以指向系统的证书路径(Ubuntu等上的"/etc/ssl/certs")
希望法拉第和Omniauth的下一个版本都能包含这个解决方案罢工>
感谢上面的KirylP让我走上了正确的道路.