我正在使用Devise/OmniAuth构建一个Rails 3应用程序,Koala和我收到了以下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来执行身份验证,这很有效。然后,我拿着返回的脸书代币,并尝试将其与考拉一起使用,如上所示。这就是导致这个错误的原因。
可能值得注意的是,我在Devise&OmniAuth最初。有几个关于这个错误的主题,我能够解决它,通过设置我的config/initializers/device.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/coala.rb
Koala.http_service.http_options = {
:ssl => { :ca_path => "/etc/ssl/certs" }
}
正如我在这个线程上发现的那样,您可以在环境文件中(或在使用gem的类中)设置以下选项:
Koala.http_service.ca_file = '/path/to/some/ca-certificate.crt'
我发现这个解决方案很有用:把它放在你的环境配置文件中
(Koala::HTTPService.http_options[:ssl]|={})[:ca_path]='/path/to/ca/folder'(Koala::HTTPService.http_options[:ssl]||={})[:ca_file]="/path/to/ca/file"
你可以通过键入来获得路径
openssl版本-
并从结果中提取路径
来源:
https://github.com/arsduo/koala/issues/130
https://github.com/technoweenie/faraday/wiki/Setting-up-SSL-certificates