M1 - TLS 1.2 - Błąd połączenia PayPal Express NVP CURL # 35: Błąd połączenia SSL


15

Mam środowisko programistyczne na starym serwerze z uruchomionym curl 7.19.7.

Ostatnio zauważyłem, że Paypal Express już nie działa i zwraca błąd "Unable to communicate with the PayPal gateway.".

Zagłębianie się w dzienniki wyjątków, które możesz zobaczyć

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')

Nie wiem, czy Paypal ostatnio zmienił coś w swojej piaskownicy, ale poszedł do adresu URL api-3t.sandbox.paypal.com na SSLLabs i zobaczyłem, że jedynym obsługiwanym protokołem jest TLS 1.2.

Po przeczytaniu na temat ustawiania wersji protokołu w podręczniku PHP , dodałem hacked następujące

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

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

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

return $body;

Świetny! Po apache wdzięku mogę teraz korzystać z Paypal express. Jednak nie cieszę się, że musiałem zhakować rdzeń. Nie jestem też zadowolony, że musiałem zhakować rdzeń w miejscu specyficznym curldla Paypal.

Czy ktoś ma jakieś porady dotyczące prawidłowego sposobu rozwiązania tego problemu?

EDYTOWAĆ:

Potwierdzając tylko kilka dodatkowych ustaleń, nie ma to wpływu na Paypal Standard w Magento, ponieważ nie wydaje się, aby używać go curlpod maską. Otrzymywaliśmy fałszywe negatywy na niektórych komputerach.

P: „Jak to możliwe, że curl nie łączy się z piaskownicą w wierszu poleceń”

Odp .: „Używa standardu PayPal, a nie ekspresowego, nie używa curl


Stare martwe loki ... PHP będzie kolejnym wydaniem. Zaktualizuj system operacyjny na serwerze. Pobierz VirtualBox i uruchom maszyny wirtualne, w ten sposób jest o wiele łatwiej. TLS się rozwija.
Fiasco Labs

Odpowiedzi:


9

Mieliśmy ten sam problem i naprawiliśmy go, aktualizując bibliotekę curl z 7.19 do 7.40 ..

Uruchom następujące polecenie: curl -v -s https://api-3t.sandbox.paypal.com/nvp

Jeśli pojawi się błąd połączenia SSL, masz ten sam problem, co my.

Możesz użyć następującego linku (odpowiedź nr 3), aby uzyskać instrukcje dotyczące sposobu przeprowadzenia tej aktualizacji biblioteki curl: /programming/28495444/how-to-upgrade-php-curl-to-version-7- 36-0

Próbowaliśmy też włamać się i zadziałało, ale nie byliśmy zadowoleni z tymczasowego rozwiązania.

Mam nadzieję, że te informacje ci pomogą.


1
Po odrobinie drapania w głowie przypomnieliśmy sobie o ponownym uruchomieniu PHP fpm, a potem wszystko zaczęło działać :) Dzięki. Uaktualnienie curl jest wszystkim, co było wymagane.
Luke Rodgers

Jakieś obejście dostępne dla współdzielonego hostingu?
Rakesh Shewale

4

Tego dnia napotkałem również ten błąd. Dodanie następującego do app/code/core/Mage/Paypal/Model/Api/Nvp.phpokoło wiersza 945 powoduje przynajmniej zmianę w module Paypal Nvp zamiast bibliotek.

 try {
        $http = new Varien_Http_Adapter_Curl();

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

Zgodnie ze stroną podręcznika stałych curl , możesz również użyć stałej CURL_SSLVERSION_TLSv1_2zamiast, 6jeśli masz wersję PHP> = 5.5.19 lub 5.6.3.


Dziękujemy za opublikowanie tego bardziej hackowania w systemie PayPal! Po przejrzeniu innych odpowiedzi rozwiązaliśmy problem, aktualizując curl. Na szczęście uruchomiliśmy wystarczająco nowoczesną wersję php, aby to zadziałało :)
Luke Rodgers

Świetna odpowiedź, po prostu nie edytuj podstawowych plików. Lubię też stałą referencję!
Robbie Averill

4

Piaskownica rzeczywiście zmieniła się w ubiegłym tygodniu, akceptując tylko TLS 1.2. Z moich testów, TLS 1.2 uruchomi się automatycznie, jeśli używasz PHP 5.5.19+ i wystarczająco nowej wersji curl (używam 7.29). Potrzebujesz także OpenSSL 1.0.1+.

Ponieważ nadal korzystamy z wersji 5.3, musieliśmy również dodać ten sam hack do rdzenia, ale ponieważ Magento nadal żąda wsparcia dla wersji 5.3, prawdopodobnie możemy spodziewać się wkrótce oficjalnego rozwiązania (zwłaszcza, że ​​zmiany te dotkną również systemy produkcyjne Paypal w Czerwiec).

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


Na szczęście na serwerze działał php 5.5.24, więc wystarczyło uaktualnienie curl.
Luke Rodgers
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.