FedEx最近为他们的API提供了更新他们的证书,这导致Rails 帖子向active_shipping模块中的服务器抛出错误The SSL connection to the remote server could not be established。
该应用程序是Rails 5.0 &Ruby2.3.1,通过OpsWorks在AWS EC2 (Amazon )上服务。
新的证书文件或多或少如下:
OpenSSL配置:
openssl version返回OpenSSL 1.0.1k-fips 8 Jan 2015。openssl version -d返回OPENSSLDIR: "/etc/pki/tls"/etc/pki/tls/内部有一个cert.pem和一个certs目录。我尝试将证书添加到cert.pem并将它们添加到certs目录中。我还尝试将它们添加到/etc/ssl/certs中,并将它们添加到/etc/ssl/certs/ca-bundle.crt和/etc/ssl/certs/ca-bundle.trust.crt中。我尝试创建一个SSL_CERT_DIR环境变量,然后创建一个指向这些位置的SSL_CERT_FILE环境变量。
因此,我有了这些新的证书;我如何告诉OpenSSL关于它们的信息?我该把它们放哪儿?我发现了很多关于如何设置证书以保护web请求的主域的文档和建议,但是很少涉及如何配置第三方提供的辅助证书。我觉得任何使用active_shipping并试图访问FedEx API的人都会遇到同样的问题,但我还没有发现有人在讨论这个问题。
(作为奖励,FedEx报道他们将在(一九二零年十月四日)上更新他们的证书,然后在9/26的早些时候更新他们的证书,然后在9/28重新编辑他们的公告页面,以显示证书将在9/26续签。)
发布于 2020-10-04 21:34:38
我终于找到了真相。
ActiveShipping使用ActiveUtils连接到第三方服务器。ActiveUtils使用自己的certfile.pem,需要对其进行更新。
我遵循了建议这里,尽管我还必须为ActiveUtils添加一个覆盖CA_FILE,以便显式地:
config/ssl/cacert.pem,就像benjaminwood的例子一样。我必须创建ssl目录,因为它不存在。# config/initializers/00_monkeypatch_updated_ca_cert.rb
module ActiveMerchant
class Connection
CA_FILE = Rails.root.join('config', 'ssl', 'cacert.pem').to_s
end
end
module ActiveUtils
class Connection
CA_FILE = Rails.root.join('config', 'ssl', 'cacert.pem').to_s
end
end让我重新振作起来的...and。
https://stackoverflow.com/questions/64123630
复制相似问题