M1 - TLS 1.2 - Kesalahan koneksi PayPal Express NVP CURL # 35: Kesalahan koneksi SSL

15

Saya memiliki lingkungan dev pada curl 7.19.7.

Baru-baru ini saya perhatikan bahwa Paypal Express tidak lagi berfungsi dan sedang mengembalikan kesalahan "Unable to communicate with the PayPal gateway.".

Menggali log pengecualian bisa Anda lihat

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

Saya tidak tahu apakah Paypal telah mengubah apa pun dengan sandbox mereka baru-baru ini, tetapi pergi ke URL api-3t.sandbox.paypal.com di SSLLabs dan melihat bahwa satu-satunya protokol yang mereka dukung adalah TLS 1.2.

Setelah membaca tentang pengaturan versi protokol dalam manual PHP, saya menambahkan berikut ini

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

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

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

return $body;

Bagus! Setelah apache anggun sekarang saya dapat menggunakan Paypal express. Namun, saya tidak senang bahwa saya harus meretas inti. Saya juga tidak senang bahwa saya harus meretas inti di tempat khusus curldaripada ke Paypal.

Adakah yang punya saran tentang cara yang benar untuk memperbaiki masalah ini?

EDIT:

Hanya mengonfirmasi beberapa temuan tambahan, ini tidak memengaruhi Standar Paypal di Magento karena tampaknya tidak digunakan di curlbawah tenda. Kami mendapatkan negatif palsu pada mesin tertentu.

T: "Bagaimana ini bisa berhasil! Curl gagal terhubung ke kotak pasir di baris perintah"

A: "Ini menggunakan standar paypal dan tidak mengungkapkan, itu tidak digunakan curl

Luke Rodgers
sumber
Keriting mati lama ... PHP akan menjadi masalah berikutnya. Tingkatkan OS di server. Dapatkan VirtualBox dan jalankan VM, jauh lebih mudah seperti itu. TLS sedang bergerak.
Fiasco Labs

Jawaban:

9

Kami memiliki masalah yang sama dan hanya memperbaikinya dengan memperbarui pustaka ikal dari 7,19 ke 7,40 ..

Jalankan perintah berikut: curl -v -s https://api-3t.sandbox.paypal.com/nvp

Jika Anda mendapatkan kesalahan SSL Connect Anda memiliki masalah yang sama dengan yang kami miliki.

Anda dapat menggunakan tautan berikut (respons # 3) untuk instruksi tentang cara melakukan pembaruan pustaka ikal ini: /programming/28495444/how-to-upgrade-php-curl-to-version-7- 36-0

Kami juga mencoba peretasan dan berhasil, tetapi kami tidak senang dengan solusi sementara.

Saya harap informasi ini membantu Anda.

Lorenzo Garcia
sumber
1
Setelah sedikit menggaruk kepala kami ingat untuk me-restart PHP fpm dan kemudian semuanya mulai bekerja :) Terima kasih. Hanya diperlukan ikal pemutakhiran.
Luke Rodgers
Adakah solusi yang tersedia untuk hosting bersama?
Raks
4

Saya juga mengalami kesalahan ini hari ini. Menambahkan berikut ke app/code/core/Mage/Paypal/Model/Api/Nvp.phpsekitar baris 945 setidaknya membuat perubahan dalam modul Paypal Nvp bukan perpustakaan.

 try {
        $http = new Varien_Http_Adapter_Curl();

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

Menurut halaman buku panduan curl constants , Anda juga dapat menggunakan konstanta CURL_SSLVERSION_TLSv1_2alih-alih 6jika Anda memiliki versi PHP> = 5.5.19 atau 5.6.3.

Brian
sumber
Terima kasih telah memposting peretasan khusus paypal ini! Setelah meninjau jawaban lain, kami memecahkan masalah dengan memutakhirkan ikal. Untungnya kami menjalankan versi php yang cukup modern agar bisa bekerja :)
Luke Rodgers
Jawaban bagus, tapi jangan mengedit file inti. Saya suka referensi konstan juga!
Robbie Averill
4

Kotak pasir memang berubah dalam seminggu terakhir untuk hanya menerima TLS 1.2. Dari pengujian saya, TLS 1.2 akan masuk secara otomatis jika Anda menggunakan PHP 5.5.19+ dan versi ikal yang cukup baru (saya menggunakan 7.29). Anda juga membutuhkan OpenSSL 1.0.1+.

Karena kami masih menjalankan 5.3, kami juga harus menambahkan retasan yang sama ke inti, tetapi karena Magento masih mengklaim dukungan untuk 5.3, kami mungkin dapat mengharapkan solusi resmi segera (terutama karena perubahan ini juga akan mengenai sistem produksi Paypal di Juni).

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

Matt O
sumber
Untungnya server menjalankan php 5.5.24, jadi meng-upgrade curl adalah semua yang diperlukan.
Luke Rodgers