PayPal API SSL 问题 - 刚刚开始
PayPal API SSL Issue - just started
我们刚刚开始在我们的生产系统上尝试处理 PayPal 付款时收到以下错误。
我们的系统最近没有更新,所以问题不是我们的代码库。
错误报告如下:
'''
会员中发生 OpenSSL::SSL::SSLError#pay_renewal:
SSL_connect returned=1 errno=0 state=error: 证书验证失败(无法获取本地颁发者证书)
'''
我不知道从哪里开始。
应用程序 运行 Ruby 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 High Assurance EV Root CA”和“DigiCert Global Root 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 中提供的 ouut-dated 文件:
# 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 文件的顶部。
(我在这里不提供证书或证书本身的任何直接链接,因为您永远不应该信任 third-party 提供的任何证书。直接从 PayPal 和 Digicert 网站下载所有证书)
我们刚刚开始在我们的生产系统上尝试处理 PayPal 付款时收到以下错误。 我们的系统最近没有更新,所以问题不是我们的代码库。
错误报告如下: ''' 会员中发生 OpenSSL::SSL::SSLError#pay_renewal:
SSL_connect returned=1 errno=0 state=error: 证书验证失败(无法获取本地颁发者证书) '''
我不知道从哪里开始。
应用程序 运行 Ruby 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 High Assurance EV Root CA”和“DigiCert Global Root 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 中提供的 ouut-dated 文件:
# 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 文件的顶部。
(我在这里不提供证书或证书本身的任何直接链接,因为您永远不应该信任 third-party 提供的任何证书。直接从 PayPal 和 Digicert 网站下载所有证书)