在Rails 3 App中将Koala与Devise和OmniAuth结合使用时会出现SSL错误

问题描述

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...