Обновление запроса PHP cURL с SSLv3 на TLS..?

Из-за недавно обнаруженной уязвимости обнаруженной в SSLv3, многие поставщики веб-сервисов (например, PayPal, Facebook, Google) отключили это и хотели, чтобы мы использовали TLS. Мне немного сложно понять, как это сделать.

В настоящее время я использую следующую функцию для обработки моих запросов cURL.

function CURLRequest($Request = "", $APIName = "", $APIOperation = "", $PrintHeaders = false)
{
 $curl = curl_init();
 curl_setopt($curl, CURLOPT_VERBOSE, 1);
 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
 curl_setopt($curl, CURLOPT_TIMEOUT, 30);
 curl_setopt($curl, CURLOPT_URL, $this->EndPointURL);
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($curl, CURLOPT_POSTFIELDS, $Request);
 if($this->APIMode == 'Certificate')
 {
 curl_setopt($curl, CURLOPT_SSLCERT, $this->PathToCertKeyPEM);
 }
 $Response = curl_exec($curl);
 /*
 * If a cURL error occurs, output it for review.
 */
 if($this->Sandbox)
 {
 if(curl_error($curl))
 {
 echo curl_error($curl).''; 
 }
 }
 curl_close($curl);
 return $Response; 
}

Когда я пытаюсь удалять песочницу PayPal, однако, когда они уже отключили это, я получаю ошибку cURL: ошибка: 14077410: Подпрограммы SSL: SSL23_GET_SERVER_HELLO: sslv3 отказ от рукопожатия

Информация, которую я обнаружил, заключается в том, что мне просто нужно изменить это, чтобы использовать TLS вместо SSL, а другие ответы, которые я видел, просто делают это, добавляя параметр curl для моей функции...

curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);

Я добавил эту опцию, хотя я все равно получаю тот же результат. Любая информация о том, как я могу получить эту работу, будет очень благодарна. Спасибо!

4 ответа

Скопировано из: Ошибка SSL не может измениться на TLS

Попробуйте добавить curl_setopt($curl, CURLOPT_SSL_CIPHER_LIST, 'TLSv1'); к вашему коду.

Это будет работать, если вы используете cURL OpenSSL libssl, но не для nss.


Лучшее решение до тех пор, пока Paypal не обновит свой основной SDK, было бы переопределить CURLOPT_SSL_CIPHER_LIST непосредственно в вашем приложении. Таким образом, вам не нужно напрямую вмешиваться в пакет sdk-core-php, и вы сможете бесплатно обновить его в будущем.

В бутстрап приложения или логику обработки платежей вы можете добавить что-то вроде следующего:

PPHttpConfig::$DEFAULT_CURL_OPTS[CURLOPT_SSL_CIPHER_LIST] = 'TLSv1';

Просто убедитесь, что вы подробно прокомментируете это и не забывайте вынимать его позже, когда проблема была исправлена ​​в ядре.


Если приведенное выше не помогает, проверьте версию OPENSSL. Вероятно, из-за версии OPENSSL <= 0.9.8. Обновление для PHP7 помогает, в котором используется более высокая версия OPENSSL.


Я просто решил обновить библиотеку nss через терминал.

licensed under cc by-sa 3.0 with attribution.