如何使用Railssl_post告诉OpenSSL关于传出API调用的新证书



FedEx最近更新了他们的API证书,这导致在active_shipping模块中的服务器上的Railssl_post抛出错误The SSL connection to the remote server could not be established

该应用程序是Rails 5.0&Ruby 2.3.1,通过OpsWorks在AWS EC2(Amazon Linux(上提供服务。

新的证书文件或多或少是这样的:

  • gateway.fedex.com.pem(包含一个证书(
  • gateway-intermediate.pem(包含两个证书(
  • DigiCertGlobalRoot.pem(包含一个证书(

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并试图访问联邦快递API的人都一定有同样的问题,但我还没有找到任何人讨论它

(作为奖励,联邦快递报告称,他们将于2020年10月4日续订证书,然后于9月26日提前一周续订,然后在9月28日返回并编辑了他们的公告页面,以显示证书将于9月25日续订。(

我终于弄清了真相。

ActiveShipping使用ActiveUtils连接到第三方服务器。ActiveUtils使用自己的certfile.pem,该文件需要更新。

我遵循了这里的建议,尽管我还必须为ActiveUtils添加一个覆盖CA_FILE,所以要明确:

  1. 从这里下载最新的捆绑包:https://curl.haxx.se/docs/caextract.html
  2. 将文件放在项目中的某个位置。我选择了config/ssl/cacert.pem作为benjaminwood的例子。我不得不创建ssl目录,因为它不存在
  3. 创建一个初始值设定项,如下所示:
# 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

这让我重新振作起来。

最新更新