M1 - TLS 1.2 - ошибка соединения PayPal Express NVP CURL # 35: ошибка соединения SSL

15

У меня есть среда разработки на старом сервере работает curl 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 что-то в своей песочнице в последнее время, но пошел по адресу api-3t.sandbox.paypal.com URL на SSLLabs и увидел, что единственный протокол, который они поддерживают, это TLS 1.2.

Ознакомившись с настройкой версий протоколов в руководстве по PHP, я с радостью добавил следующее

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

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

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

return $body;

Большой! После того, как Apache Graceful я теперь могу использовать Paypal Express. Однако я не рад, что мне пришлось взломать ядро. Я также не рад, что мне пришлось взломать ядро ​​в месте, специфичном curlдля Paypal, а не для него.

У кого-нибудь есть какие-либо советы о правильном способе решения этой проблемы?

РЕДАКТИРОВАТЬ:

Просто подтверждая некоторые дополнительные выводы, это не влияет на стандарт Paypal в Magento, так как он не используется curlпод капотом. Мы получали ложные негативы на некоторых машинах.

Q: «Как это может работать? Curl не может подключиться к песочнице в командной строке»

A: «Он использует стандарт PayPal, а не экспресс, он не использует curl

Люк Роджерс
источник
Старые мертвые завитки ... PHP будет следующей проблемой. Обновите ОС на сервере. Получите VirtualBox и запускайте виртуальные машины, так намного проще. TLS движется дальше.
Fiasco Labs

Ответы:

9

У нас была такая же проблема, и мы просто исправили ее, обновив библиотеку curl с 7.19 до 7.40.

Запустите следующую команду: curl -v -s https://api-3t.sandbox.paypal.com/nvp

Если вы получили ошибку SSL Connect, у вас возникла та же проблема, что и у нас.

Вы можете использовать следующую ссылку (ответ № 3) для получения инструкций о том, как сделать это обновление библиотеки curl: /programming/28495444/how-to-upgrade-php-curl-to-version-7- 36-0

Мы также попробовали взломать, и это сработало, но нас не порадовало временное решение.

Я надеюсь, что эта информация поможет вам.

Лоренцо Гарсия
источник
1
После небольшого количества царапин мы вспомнили, что перезапустили PHP fpm, и все заработало :) Спасибо. Обновление curl - это все, что требовалось.
Люк Роджерс
Есть ли обходной путь для общего хостинга?
Ракеш Шевале
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 , вы также можете использовать константу CURL_SSLVERSION_TLSv1_2вместо, 6если у вас версия PHP> = 5.5.19 или 5.6.3.

Брайан
источник
Спасибо за публикацию этого более конкретного взлома PayPal! Изучив другие ответы, мы решили проблему, обновив curl. К счастью, мы использовали достаточно современную версию php, чтобы это работало :)
Люк Роджерс,
Отличный ответ, просто не редактируйте основные файлы. Мне тоже нравится постоянная ссылка!
Робби Аверилл
4

Песочница действительно изменилась за последнюю неделю и приняла только TLS 1.2. Из моих тестов TLS 1.2 включится автоматически, если вы используете PHP 5.5.19+ и достаточно свежую версию curl (я использую 7.29). Вам также нужен OpenSSL 1.0.1+.

Поскольку мы все еще работаем с 5.3, нам пришлось добавить тот же хак в ядро, но поскольку Magento по-прежнему требует поддержки 5.3, мы, вероятно, можем ожидать официального решения в ближайшее время (тем более, что эти изменения также затронут производственные системы Paypal в июнь).

Ссылка: https://devblog.paypal.com/upcoming-security-changes-notice/

Мэтт О
источник
К счастью, на сервере работал php 5.5.24, поэтому обновление curl - это все, что требовалось.
Люк Роджерс