M1 - TLS 1.2 - Erreur de connexion PayPal Express NVP CURL # 35: Erreur de connexion SSL

15

J'ai un environnement de développement sur un ancien serveur exécutant curl 7.19.7.

Récemment, j'ai remarqué que Paypal Express ne fonctionne plus et renvoie une erreur "Unable to communicate with the PayPal gateway.".

En fouillant dans les journaux d'exceptions que vous pouvez voir

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

Je ne sais pas si Paypal a changé quelque chose avec leur sandbox récemment, mais je suis allé à l'URL api-3t.sandbox.paypal.com sur SSLLabs et j'ai vu que le seul protocole qu'ils prennent en charge est TLS 1.2.

Après avoir lu la configuration des versions de protocole dans le manuel PHP, j'ai ajouté par piratage ce qui suit

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

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

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

return $body;

Génial! Après un apache gracieux je peux maintenant utiliser Paypal express. Cependant, je ne suis pas content d'avoir dû pirater le noyau. Je ne suis pas non plus content d'avoir piraté le cœur dans un endroit spécifique à curlplutôt qu'à Paypal.

Quelqu'un at-il des conseils sur la façon correcte de résoudre ce problème?

ÉDITER:

Je confirme simplement quelques constatations supplémentaires, cela n'affecte pas Paypal Standard dans Magento car il ne semble pas utiliser curlsous le capot. Nous obtenions de faux négatifs sur certaines machines.

Q: "Comment cela peut-il fonctionner? Curl ne parvient pas à se connecter au bac à sable sur la ligne de commande"

R: "Il utilise la norme paypal et non express, il n'utilise pas curl

Luke Rodgers
la source
Anciennes boucles mortes ... PHP sera le prochain numéro. Mettez à niveau le système d'exploitation sur le serveur. Obtenez VirtualBox et exécutez des machines virtuelles, c'est beaucoup plus facile de cette façon. TLS avance.
Fiasco Labs

Réponses:

9

Nous avons eu ce même problème et nous l'avons juste corrigé en mettant à jour la bibliothèque curl de 7.19 à 7.40.

Exécutez la commande suivante: curl -v -s https://api-3t.sandbox.paypal.com/nvp

Si vous obtenez une erreur de connexion SSL, vous avez le même problème que nous.

Vous pouvez utiliser le lien suivant (réponse # 3) pour obtenir des instructions sur la façon de faire cette mise à jour de la bibliothèque curl: /programming/28495444/how-to-upgrade-php-curl-to-version-7- 36-0

Nous avons également essayé un hack et cela a fonctionné mais nous n'étions pas satisfaits d'une solution temporaire.

J'espère que ces informations vous aideront.

Lorenzo Garcia
la source
1
Après un peu de gratte-tête, nous nous sommes souvenus de redémarrer PHP fpm et puis tout a commencé à fonctionner :) Merci. La mise à niveau de curl est tout ce qui était nécessaire.
Luke Rodgers
Une solution de contournement disponible pour l'hébergement partagé?
Rakesh Shewale
4

J'ai également rencontré cette erreur aujourd'hui. L'ajout de ce qui suit à la app/code/core/Mage/Paypal/Model/Api/Nvp.phpligne 945 entraîne au moins la modification dans le module Paypal Nvp au lieu des bibliothèques.

 try {
        $http = new Varien_Http_Adapter_Curl();

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

Selon la page de manuel des constantes curl , vous pouvez également utiliser la constante CURL_SSLVERSION_TLSv1_2au lieu de 6si vous avez une version PHP> = 5.5.19 ou 5.6.3.

Brian
la source
Merci d'avoir posté ce hack plus paypal! Après avoir examiné les autres réponses, nous avons résolu le problème en améliorant curl. Heureusement, nous utilisions une version assez moderne de PHP pour que cela fonctionne :)
Luke Rodgers
Excellente réponse, ne modifiez pas les fichiers de base. J'aime aussi la référence constante!
Robbie Averill
4

Le bac à sable a en effet changé la semaine dernière pour n'accepter que TLS 1.2. D'après mes tests, TLS 1.2 démarrera automatiquement si vous utilisez PHP 5.5.19+ et une version curl suffisamment récente (j'utilise 7.29). Vous avez également besoin d'OpenSSL 1.0.1+.

Étant donné que nous exécutons toujours la version 5.3, nous avons également dû ajouter le même hack au noyau, mais comme Magento revendique toujours le support de la version 5.3, nous pouvons probablement nous attendre à une solution officielle bientôt (d'autant plus que ces modifications toucheront également les systèmes de production Paypal dans Juin).

Référence: https://devblog.paypal.com/upcoming-security-changes-notice/

Matt O
la source
Heureusement, le serveur exécutait php 5.5.24, donc la mise à niveau de curl était tout ce qui était nécessaire.
Luke Rodgers