如何解决如何使用Rails ssl_post告诉OpenSSL有关即将进行的API调用的新证书的信息?
联邦快递最近updated their certificates使用了他们的API,这导致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 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表示他们将在October 4,2020上更新其证书,然后在9/26提前一周进行更新,然后返回并在9/28上编辑其公告页面以显示证书将在9/26更新。)
解决方法
我终于明白了这一点。
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','cacert.pem').to_s
end
end
...这又使我重新开始运行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。