Ruby on rails PayPal API SSL问题-刚刚开始
我们刚开始在生产系统上处理PayPal付款时收到以下错误。 我们的系统最近没有更新,所以问题不是我们的代码库 错误报告为: ''' 在会员资格#支付#续订中发生OpenSSL::SSL::SSLError错误: SSL_connect返回=1 errno=0 state=错误:证书验证失败(无法获取本地颁发者证书) ''' 我不知道从哪里开始 该应用程序正在运行RubyonRailsV6.0.2,使用PayPalSDK RESTGem(V1.7.4),并在AmazonEC2RedHat实例上运行Ruby on rails PayPal API SSL问题-刚刚开始,ruby-on-rails,paypal,ssl-certificate,Ruby On Rails,Paypal,Ssl Certificate,我们刚开始在生产系统上处理PayPal付款时收到以下错误。 我们的系统最近没有更新,所以问题不是我们的代码库 错误报告为: ''' 在会员资格#支付#续订中发生OpenSSL::SSL::SSLError错误: SSL_connect返回=1 errno=0 state=错误:证书验证失败(无法获取本地颁发者证书) ''' 我不知道从哪里开始 该应用程序正在运行RubyonRailsV6.0.2,使用PayPalSDK RESTGem(V1.7.4),并在AmazonEC2RedHat实例上运行
我怀疑这与我们的服务器上需要安装的新证书有关。您的怀疑是正确的,请确保您信任DigiCert根(High Assurance EV和Global G2),因为api.paypal.com最近被切断了连接——为此发送了许多通知
此处有一些详细信息:对于那些正在寻找即时解决方案的人,在@preston phx和@houdi提供的信息的基础上,这里有更多的技术细节: 正如Paypal文章中提到的: 从DigiCert下载“DigiCert高保证EV根CA”和“DigiCert全局根G2”证书: 此外,还可以从以下站点下载所有Paypal API的证书: (就我而言,我只使用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
下,类似于PaypalRuby SDK存储它的地方
现在,您可以通过在初始化paypal SDK之前的某个地方添加以下代码片段,对SDK进行修补,以使用您的paypal.crt文件,而不是SDK中提供的ouut日期文件:
# 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网站下载所有证书)谢谢。我已经下载了证书,当在RedHat EC2上安装时,它警告说它们是重复的,所以看起来它们已经安装好了。是的,它们没有被代码路径使用,所以出现了错误。我已经找到了ruby gem安装自己的Digi。。。证书,并将其替换。我还注释了gem中包含的paypal.crt文件的使用。因此,我们的系统现在再次链接到贝宝。不幸的是,gem已被弃用,因此我将不得不放弃它并进行一些本地更改。感谢您的指点-非常有用:-)未来(实际上是现在)是v2 Checkout Ruby SDK,用于两种路径,一种用于“设置事务”,另一种用于“捕获事务”,记录在此处:,并与此前端UI配对,使您的站点保持加载状态(无重定向):