M1-TLS 1.2-PayPal Express NVP CURL连接错误#35:SSL连接错误


15

我在运行7.19.7的旧服务器上有一个开发环境。

最近,我注意到Paypal Express不再起作用,并返回错误"Unable to communicate with the PayPal gateway."

深入研究异常日志,您可以看到

exception 'Exception' with message 'PayPal NVP CURL connection error #35: SSL connect error' in /path/app/code/core/Mage/Paypal/Model/Api/Nvp.php:983
Stack trace:
#0 /path/app/code/core/Mage/Paypal/Model/Api/Nvp.php(616): Mage_Paypal_Model_Api_Nvp->call('SetExpressCheck...', Array)
#1 /path/app/code/core/Mage/Paypal/Model/Express/Checkout.php(381): Mage_Paypal_Model_Api_Nvp->callSetExpressCheckout()
#2 /path/app/code/core/Mage/Paypal/Controller/Express/Abstract.php(108): Mage_Paypal_Model_Express_Checkout->start('http://asdf...', 'http://asdf...', false)
#3 /path/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Paypal_Controller_Express_Abstract->startAction()
#4 /path/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('start')
#5 /path/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#6 /path/app/code/core/Mage/Core/Model/App.php(365): Mage_Core_Controller_Varien_Front->dispatch()
#7 /path/app/Mage.php(684): Mage_Core_Model_App->run(Array)
#8 /path/index.php(210): Mage::run('uk', 'store')

我不知道Paypal最近是否对其沙盒进行了任何更改,但是转到了SSLLabs上的api-3t.sandbox.paypal.com URL,并看到它们唯一支持的协议是TLS 1.2。

在阅读了PHP手册中的设置协议版本后,我hackily添加了以下内容

nano +194 lib/Varien/Http/Adapter/Curl.php

curl_setopt_array($this->_getResource(), $options);

+curl_setopt($this->_getResource(), CURLOPT_SSLVERSION, 6);

return $body;

大!apache优美之后,我现在可以使用Paypal Express了。但是,我对必须破解内核并不满意。我也很高兴我不得不在特定于curl而不是Paypal 的地方破解内核。

有人对解决此问题的正确方法有何建议?

编辑:

只是确认一些额外的发现,这不会影响Magento中的Paypal Standard,因为它似乎没有curl在引擎盖下使用。在某些机器上我们得到了假阴性。

问:“这怎么可能起作用!curl无法在命令行上连接到沙箱”

答:“它使用的是贝宝标准,不是明示的,它不使用 curl


旧的死胡同...下一个问题将是PHP。升级服务器上的操作系统。获取VirtualBox并运行VM,这种方式要容易得多。TLS正在发展。
Fiasco Labs 2016年

Answers:


9

我们有同样的问题,只是通过将curl库从7.19更新到7.40来解决了。

运行以下命令: curl -v -s https://api-3t.sandbox.paypal.com/nvp

如果出现SSL Connect错误,则说明我们遇到了同样的问题。

您可以使用以下链接(响应#3)获取有关如何进行curl库更新的说明:https : //stackoverflow.com/questions/28495444/how-to-up-grade-php-curl-to-version-7- 36-0

我们还尝试了一次骇客,但确实奏效,但我们对临时解决方案不满意。

希望这些信息对您有所帮助。


1
经过一番摸索,我们记得重新启动PHP fpm,然后所有这些都开始工作了:)谢谢。只需升级卷发即可。
路加·罗杰斯

任何可用于共享主机的解决方法?
Rakesh Shewale

4

我今天也遇到了这个错误。app/code/core/Mage/Paypal/Model/Api/Nvp.php在945行附近添加以下内容至少是在Paypal Nvp模块而不是库中进行了更改。

 try {
        $http = new Varien_Http_Adapter_Curl();

+       $http->addOptions(array(CURLOPT_SSLVERSION => 6));

按照卷曲常量手册,您也可以使用恒定的CURL_SSLVERSION_TLSv1_2,而不是6如果你有一个PHP版本> = 5.5.19或5.6.3。


感谢您发布此更多针对贝宝的技巧!在查看了其他答案之后,我们通过升级curl解决了该问题。值得庆幸的是,我们正在运行足够现代的php版本,以使其正常工作:)
Luke Rodgers

很好的答案,就是不要编辑核心文件。我也喜欢不断引用!
罗比·阿弗里尔

4

沙盒确实在过去一周发生了变化,仅接受TLS 1.2。根据我的测试,如果您使用的是PHP 5.5.19+和较新的curl版本(我使用的是7.29),则TLS 1.2将自动启动。您还需要OpenSSL 1.0.1+。

由于我们仍在运行5.3,因此我们也必须向内核添加相同的hack,但是由于Magento仍声称对5.3的支持,因此我们可能会期望很快获得正式的解决方案(尤其是因为这些更改也会影响Paypal生产系统)六月)。

参考:https : //devblog.paypal.com/upcoming-security-changes-notice/


幸运的是,服务器正在运行PHP 5.5.24,因此只需升级curl。
路加·罗杰斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.