如何解决PayPal API SSL问题-刚刚开始
尝试在我们的生产系统上处理PayPal付款时,我们刚刚开始收到以下错误消息。 我们的系统最近没有更新,因此问题不是我们的代码库。
错误报告为: ''' 成员资格#pay_renewal:
中发生OpenSSL :: SSL :: SSLErrorSSL_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网站下载所有证书)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。