PayPal API SSL问题-刚刚开始

问题描述

尝试在我们的生产系统上处理PayPal付款时,我们刚刚开始收到以下错误消息。 我们的系统最近没有更新,因此问题不是我们的代码库。

错误报告为: ''' 成员资格#pay_renewal

中发生OpenSSL :: SSL :: SSLError

SSL_connect返回= 1 errno = 0状态=错误:证书验证失败(无法获取本地发行者证书) '''

我不知该从何开始。

该应用程序正在运行Ruby on Rails v6.0.2,使用paypal-sdk-rest gem(v 1.7.4),并在Amazon EC2 Redhat实例上运行。

我怀疑这与需要在我们服务器上的某处安装新证书有关。

解决方法

您的猜想是正确的,请确保您信任DigiCert的根源(High Assurance EV和Global G2),因为该限制是最近针对api.paypal.com提出的-发送了很多有关此的通知

此处有一些详细信息:https://www.paypal.com/us/smarthelp/article/migration-to-digicert-root-certificates-ts2240

,

对于那些正在寻求即时解决方案的人,除了提供的@ preston-phx和@houdi信息之外,这里还有更多技术细节:

如Paypal文章所述:https://www.paypal.com/us/smarthelp/article/migration-to-digicert-root-certificates-ts2240

从Digicert下载“ DigiCert高保证EV根CA”和“ DigiCert全球根G2”证书:

https://www.digicert.com/kb/digicert-root-certificates.htm

另外,从以下位置下载要调用的所有Paypal API的证书:

https://www.paypal.com/us/smarthelp/article/ts1510

(对于我来说,我仅使用api.paypal.com,所以我下载了api.paypal.com.pem和api.sandbox.paypal.com.pem)

这些将为您提供一组pem文件,例如:

DigiCertGlobalRootG2.crt.pem
DigiCertHighAssuranceEVRootCA.crt.pem
api.paypal.com.pem
api.sandbox.paypal.com.pem

将所有文件合并到单个paypal.crt文件中,该文件如下所示:

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
...

将文件放在项目中的某个位置。我将其放在data/paypal.crt下,类似于PayPal-Ruby-SDK存储它的位置。

现在,您可以通过在初始化PayPal SDK之前的某个位置添加以下代码段,来修补SDK以使用paypal.crt文件而不使用SDK中提供的原始版本。

# Monkey patch the paypal certificate file
PayPal::SDK::Core::Util::HTTPHelper.class_eval do
  def default_ca_file
    File.expand_path("../../data/paypal.crt",__dir__)
  end 
end

我正在使用Rails,所以我直接将其添加到config / initializers / paypal.rb文件的顶部。

(我在这里不提供证书或证书本身的任何直接链接,因为您永远不应该信任第三方提供的任何证书。直接从PayPal和Digicert网站下载所有证书)