M1 - TLS 1.2 - Errore di connessione CURL NVP PayPal Express # 35: errore di connessione SSL


15

Ho un ambiente di sviluppo su un vecchio server che esegue il ricciolo 7.19.7.

Recentemente ho notato che Paypal Express non funziona più e restituisce un errore "Unable to communicate with the PayPal gateway.".

Puoi scavare nei registri delle eccezioni

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

Non so se Paypal ha cambiato qualcosa di recente con il loro sandbox di recente, ma sono andato all'URL api-3t.sandbox.paypal.com su SSLLabs e ho visto che l'unico protocollo supportato è TLS 1.2.

Dopo aver letto sull'impostazione delle versioni dei protocolli nel manuale di PHP, ho aggiunto in modo hackerato quanto segue

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

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

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

return $body;

Grande! Dopo un grazioso apache ora posso usare Paypal express. Tuttavia, non sono contento di aver dovuto hackerare il core. Inoltre, non sono contento di aver dovuto hackerare il core in un luogo specifico curlpiuttosto che Paypal.

Qualcuno ha qualche consiglio su un modo corretto per risolvere questo problema?

MODIFICARE:

Confermando solo alcuni risultati extra, questo non influisce su Paypal Standard in Magento in quanto non sembra usare curlsotto il cofano. Stavamo ottenendo falsi negativi su alcune macchine.

D: "Come può funzionare? Curl non riesce a connettersi al sandbox dalla riga di comando"

A: "Sta usando lo standard paypal e non espresso, non lo usa curl


Vecchi riccioli morti ... PHP sarà il prossimo numero. Aggiorna il sistema operativo sul server. Ottieni VirtualBox ed esegui VM, è molto più facile in questo modo. TLS sta andando avanti.
Fiasco Labs,

Risposte:


9

Abbiamo avuto lo stesso problema e lo abbiamo appena risolto aggiornando la libreria curl dalla 7.19 alla 7.40 ..

Esegui il seguente comando: curl -v -s https://api-3t.sandbox.paypal.com/nvp

Se ricevi un errore SSL Connect hai lo stesso problema che abbiamo avuto.

È possibile utilizzare il seguente collegamento (risposta n. 3) per istruzioni su come eseguire questo aggiornamento della libreria di curl: /programming/28495444/how-to-upgrade-php-curl-to-version-7- 36-0

Abbiamo anche provato un hack e ha funzionato ma non eravamo contenti di una soluzione temporanea.

Spero che queste informazioni ti possano aiutare.


1
Dopo un po 'di grattacapi ci siamo ricordati di riavviare PHP fpm e poi tutto ha iniziato a funzionare :) Grazie. L'aggiornamento del ricciolo è tutto ciò che era necessario.
Luke Rodgers,

Qualche soluzione alternativa disponibile per l'hosting condiviso?
Raks

4

Ho riscontrato anche questo errore oggi. Aggiungere quanto segue alla app/code/core/Mage/Paypal/Model/Api/Nvp.phpriga 945 significa almeno apportare la modifica nel modulo Paypal Nvp anziché nelle librerie.

 try {
        $http = new Varien_Http_Adapter_Curl();

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

Secondo la pagina di manuale delle costanti di curl , puoi anche usare la costante CURL_SSLVERSION_TLSv1_2invece che 6se hai una versione di PHP> = 5.5.19 o 5.6.3.


Grazie per aver pubblicato questo hack più specifico per paypal! Dopo aver esaminato le altre risposte, abbiamo risolto il problema aggiornando l'arricciatura. Per fortuna stavamo eseguendo una versione abbastanza moderna di php per farlo funzionare :)
Luke Rodgers,

Ottima risposta, semplicemente non modificare i file core. Mi piace anche il riferimento costante!
Robbie Averill

4

La sandbox è effettivamente cambiata nell'ultima settimana per accettare solo TLS 1.2. Dai miei test, TLS 1.2 si avvierà automaticamente se stai usando PHP 5.5.19+ e una versione arricciatura sufficientemente recente (sto usando 7.29). È inoltre necessario OpenSSL 1.0.1+.

Dato che stiamo ancora eseguendo 5.3, abbiamo dovuto aggiungere lo stesso hack anche al core, ma dal momento che Magento richiede ancora il supporto per 5.3, possiamo probabilmente aspettarci presto una soluzione ufficiale (soprattutto perché questi cambiamenti colpiranno anche i sistemi di produzione Paypal in Giugno).

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


Per fortuna il server stava eseguendo php 5.5.24, quindi l'aggiornamento a ricciolo era tutto ciò che era richiesto.
Luke Rodgers,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.