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

Posted

技术标签:

【中文标题】如何使用 Rails ssl_post 告诉 OpenSSL 关于传出 API 调用的新证书?【英文标题】:How to tell OpenSSL about new certificates for an outgoing API call using a Rails ssl_post? 【发布时间】:2021-01-15 07:15:21 【问题描述】:

FedEx 最近为他们的 API 使用了 updated their certificates,这导致 Rails ssl_post 在 active_shipping 模块中的服务器上抛出错误 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 2015openssl 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 报告他们将在 October 4, 2020 上更新他们的证书,然后在 9 月 26 日提前一周更新他们,然后在 9 月 28 日返回并编辑他们的公告页面以显示证书将是9/26 续订。)

【问题讨论】:

【参考方案1】:

我终于明白了。

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

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

    从这里下载最新的捆绑包: https://curl.haxx.se/docs/caextract.html 将文件放在项目中的某个位置。我选择了config/ssl/cacert.pem,就像本杰明伍德的例子一样。我必须创建 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

...这让我重新振作起来。

【讨论】:

以上是关于如何使用 Rails ssl_post 告诉 OpenSSL 关于传出 API 调用的新证书?的主要内容,如果未能解决你的问题,请参考以下文章

部署时如何告诉 Rails 使用生产数据库(而不是开发数据库)?

销毁 Rails 中所有延迟的工作

Rails 一直告诉我它当前没有安装

Ruby/Rails:您如何自定义 Devise 的邮件模板?

Ruby/Rails:您如何自定义 Devise 的邮件模板?

Rails:回形针和预览?