【问题标题】:SSLCaertBadFile error heroku curbSSLCaertBadFile 错误 heroku 遏制
【发布时间】:2012-02-27 14:34:31
【问题描述】:

我有一个 rake 任务,它通过 SSL 连接从外部 API 提取和解析 JSON 数据。

我使用了一个封装了这个外部 API 的 gem,并且在本地运行没有问题,但是在使用 #<Curl::Err::SSLCaertBadFile: Curl::Err::SSLCaertBadFile> 的 heroku 上运行时任务失败

我安装了搭载 SSL 插件,希望它可以修复它,但没有骰子。

有什么想法吗?

更新

我设法通过对先前由以下两个字段设置的 curl 请求禁用 ssl 验证来修复它:

request.ssl_verify_peer
request.ssl_verify_host

除了降低安全性之外,我对 SSL 的了解还不够,无法确切知道为什么错误是由 heroku 环境中的这些设置引起的,或者禁用它的含义是什么。

【问题讨论】:

    标签: ruby-on-rails-3 ssl heroku curb


    【解决方案1】:

    禁用证书检查是个坏主意。有关该主题的更多信息,请参阅http://www.rubyinside.com/how-to-cure-nethttps-risky-default-https-behavior-4010.htmlhttp://jamesgolick.com/2011/2/15/verify-none..html 和相关参考资料。

    问题是您的 HTTP 客户端不知道在 heroku 上哪里可以找到 CA 证书包。

    您没有提及您使用的是什么客户端,但这里有一个在 heroku 上使用 net/https 的示例:

    require "net/https"
    require "uri"
    
    root_ca_path = "/etc/ssl/certs"
    
    url = URI.parse "https://example.com"
    http = Net::HTTP.new(url.host, url.port)
    http.use_ssl = (url.scheme == "https")
    
    if (File.directory?(root_ca_path) && http.use_ssl?)
      http.ca_path = root_ca_path
      http.verify_mode = OpenSSL::SSL::VERIFY_PEER
      http.verify_depth = 5
    end
    
    request = Net::HTTP::Get.new(url.path)
    response = http.request(request)
    

    这里是一个使用Faraday的例子:

    Faraday.new "https://example.com", ssl: { ca_path: "/etc/ssl/certs" }
    

    祝你好运。

    【讨论】:

    • 我不太确定 gem 之前使用的是什么客户端,但它已更新到 Faraday,问题消失了,我重新启用了证书检查。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多