问题描述
||
我正在使用Devise / OmniAuth和Koala构建Rails 3应用,并且遇到以下SSL错误:
OpenSSL::SSL::SSLError in Users/omniauth callbacksController#facebook
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
导致此错误的代码是:
@graph = Koala::Facebook::GraphAPI.new(@token)
@friends = @graph.get_connections(\"me\",\"friends\")
我将Devise与OmniAuth一起使用以执行身份验证,该方法可以正常工作。然后,我拿回返回的facebook令牌,并尝试将其与考拉一起使用,如上所示。这就是导致此错误的原因。
可能值得注意的是,我最初在Devise&OmniAuth中收到相同的错误。关于此错误,有一些主题,通过设置config / initialisers / devise.rb,我得以解决此问题,
config.omniauth :facebook,APPID,APPKEY,{:client_options => {:ssl => {:ca_file => \"/opt/local/share/curl/curl-ca-bundle.crt\"}}}
我猜想我需要为Koala提供类似的配置,以便它知道在哪里检索本地ca_file。不过,我在文档中找不到任何指示。关于如何执行此操作的任何想法,或通常如何避免该错误?
我的开发环境是OSX。
解决方法
从考拉仓库https://github.com/arsduo/koala
您可以在Koala初始化程序中进行设置,该初始化程序将全局设置此选项
/config/initializers/koala.rb
Koala.http_service.http_options = {
:ssl => { :ca_path => \"/etc/ssl/certs\" }
}
,正如我在此线程上发现的那样,您可以在环境文件(或使用gem的类)中设置以下选项:
Koala.http_service.ca_file = \'/path/to/some/ca-certificate.crt\'
,我发现此解决方案很有帮助:将其放入环境配置文件中
(考拉:: HTTPService.http_options [:ssl] || = {})[:ca_path] =
\'/ path / to / ca / folder \'(考拉:: HTTPService.http_options [:ssl] || =
{})[:ca_file] = \'/ path / to / ca / file \'
您可以通过键入获取路径
openssl版本-a
并从结果中提取路径
资料来源:
https://github.com/arsduo/koala/issues/130
https://github.com/technoweenie/faraday/wiki/Setting-up-SSL-certificates