gpt4 book ai didi

ruby-on-rails-3 - SSLCaertBadFile 错误 heroku 遏制

转载 作者:太空宇宙 更新时间:2023-11-03 13:18:53 26 4
gpt4 key购买 nike

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

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

我安装了 piggyback SSL 附加组件,希望它能修复它,但没有成功。

有什么想法吗?

更新

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

request.ssl_verify_peer
request.ssl_verify_host

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

最佳答案

禁用证书检查不是一个好主意。参见 http://www.rubyinside.com/how-to-cure-nethttps-risky-default-https-behavior-4010.html , http://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" }

祝你好运。

关于ruby-on-rails-3 - SSLCaertBadFile 错误 heroku 遏制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9154679/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com