M1 - TLS 1.2 - Erro de conexão PayPal Express NVP CURL # 35: erro de conexão SSL

15

Eu tenho um ambiente de desenvolvimento em um servidor antigo executando o curl 7.19.7.

Recentemente, notei que o Paypal Express não funciona mais e está retornando um erro "Unable to communicate with the PayPal gateway.".

Cavando nos logs de exceção que você pode ver

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

Não sei se o Paypal mudou recentemente alguma coisa com sua sandbox, mas foi para o URL api-3t.sandbox.paypal.com no SSLLabs e percebi que o único protocolo compatível é o TLS 1.2.

Depois de ler sobre a configuração de versões de protocolo no manual do PHP, adicionei hackily o seguinte

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

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

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

return $body;

Ótimo! Depois de um apache gracioso, agora posso usar o Paypal express. No entanto, não estou feliz por ter cortado o núcleo. Também não estou feliz por ter hackeado o núcleo em um local específico curle não no Paypal.

Alguém tem algum conselho sobre a maneira correta de corrigir esse problema?

EDITAR:

Apenas confirmando algumas descobertas extras, isso não afeta o Paypal Standard no Magento, pois não parece ser usado curlsob o capô. Estávamos recebendo falsos negativos em certas máquinas.

P: "Como isso pode estar funcionando! O curl falha ao conectar-se ao sandbox na linha de comando"

A: "Está usando o padrão paypal e não expresso, não usa curl

Luke Rodgers
fonte
Cachos mortos antigos ... PHP será a próxima edição. Atualize o sistema operacional no servidor. Obtenha o VirtualBox e execute VMs, é muito mais fácil assim. TLS está seguindo em frente.
Fiasco Labs

Respostas:

9

Tivemos o mesmo problema e o corrigimos atualizando a biblioteca de curl de 7.19 para 7.40.

Execute o seguinte comando: curl -v -s https://api-3t.sandbox.paypal.com/nvp

Se você receber um erro do SSL Connect, terá o mesmo problema que tivemos.

Você pode usar o link a seguir (resposta nº 3) para obter instruções sobre como fazer essa atualização da biblioteca de curl: /programming/28495444/how-to-upgrade-php-curl-to-version-7- 36-0

Também tentamos um hack e funcionou, mas não estávamos satisfeitos com uma solução temporária.

Espero que esta informação o ajude.

Lorenzo Garcia
fonte
11
Depois de um pouco de coçar a cabeça, lembramos de reiniciar o PHP fpm e tudo começou a funcionar :) Obrigado. A atualização de curvatura é tudo o que era necessário.
Luke Rodgers
Alguma solução disponível para hospedagem compartilhada?
Raks
4

Eu também encontrei esse erro hoje. Adicionar o seguinte à app/code/core/Mage/Paypal/Model/Api/Nvp.phplinha 945 é pelo menos fazer a alteração no módulo Paypal Nvp em vez das bibliotecas.

 try {
        $http = new Varien_Http_Adapter_Curl();

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

De acordo com a página de manual das constantes de ondulação , você também pode usar a constante em CURL_SSLVERSION_TLSv1_2vez de 6se tiver uma versão do PHP> = 5.5.19 ou 5.6.3.

Brian
fonte
Obrigado por postar este hack mais específico do paypal! Depois de revisar as outras respostas, resolvemos o problema atualizando o curl. Felizmente nós estávamos correndo uma versão moderna o suficiente de php para que isso funcione :)
Luke Rodgers
Ótima resposta, apenas não edite os arquivos principais. Eu também gosto da referência constante!
Robbie Averill 02/02
4

O sandbox realmente mudou na semana passada para aceitar apenas o TLS 1.2. Nos meus testes, o TLS 1.2 será ativado automaticamente se você estiver usando o PHP 5.5.19+ e uma versão de curvatura suficientemente recente (estou usando o 7.29). Você também precisa do OpenSSL 1.0.1+.

Como ainda estamos executando o 5.3, tivemos que adicionar o mesmo hack ao núcleo também, mas como o Magento ainda solicita suporte para o 5.3, provavelmente podemos esperar uma solução oficial em breve (especialmente porque essas alterações também afetarão os sistemas de produção Paypal em Junho).

Referência: https://devblog.paypal.com/upcoming-security-changes-notice/

Matt O
fonte
Felizmente, o servidor estava executando o php 5.5.24, então a atualização do curl era tudo o que era necessário.
Luke Rodgers