6

我正在使用 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")

我正在使用带有 OmniAuth 的设计来执行身份验证,这很有效。然后我取回返回的 facebook 令牌,并尝试将其与 Koala 一起使用,如上所示。这就是导致此错误的原因。

可能值得注意的是,我最初收到与 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。

4

3 回答 3

5

来自考拉回购https://github.com/arsduo/koala

您可以在 Koala 初始化程序中设置它,它将全局设置此选项

/config/initializers/koala.rb

Koala.http_service.http_options = {
  :ssl => { :ca_path => "/etc/ssl/certs" }
}
于 2011-10-24T20:34:18.127 回答
1

正如我在此线程上发现的,您可以在环境文件(或使用 gem 的类)中设置以下选项:

Koala.http_service.ca_file = '/path/to/some/ca-certificate.crt'
于 2011-08-24T21:32:37.310 回答
0

我发现这个解决方案很有帮助:把它放在你的环境配置文件中

(Koala::HTTPService.http_options[:ssl] ||= {})[:ca_path] = '/path/to/ca/folder' (Koala::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

于 2012-11-05T09:58:50.713 回答