2014-11-05 5 views
7

Из-за recent vulnerability discovered in SSLv3 многие поставщики веб-сервисов (т. Е. PayPal, Facebook, Google) отключают это и хотят, чтобы мы использовали TLS вместо этого. У меня есть немного проблемы с выяснением, как это сделать.Обновление запроса PHP cURL от SSLv3 до 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).'<br /><br />'; 
     } 
    } 

    curl_close($curl); 
    return $Response; 
} 

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

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

curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1); 

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

+0

Вы используете старую версию Curl? Глядя на [этот ответ] (http://stackoverflow.com/questions/26452755/php-curl-is-probably-using-sslv3-insted-of-tls-when-connecting-to-https), кажется, как минимум, 7,19 имеет проблемы с TLS. – cOle2

+0

Да, я тоже это видел. Попытка выяснить, как увидеть мою версию curl сейчас. Мне никогда не приходилось возиться с этим. –

+0

Похоже, я на 7.36.0, так что это не должно быть моей проблемой. –

ответ

2

Скопировано из: SSL error can not change to TLS

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

Это будет работать, если вы завиток OpenSSL libssl основе, но не если NSS основе.

+0

Да, это похоже на трюк. Должны ли мы объединить их как-то .. ?? –

+0

Я предпочитаю вашу формулировку, которая более общая, чем дублирующий ответ, но чтобы допустить кесарево, что к цезарю, этот ответ не мой ... –

+0

@philippelhardy, я получаю сообщение об отказе sslv3, даже если у меня есть CURLOPT_SSL_CIPHER_LIST', установленный в TLSv1. –

3

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

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

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

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

+2

Не могли бы вы подробно рассказать, где (путь/файл или настройки) мне нужно добавить эту строку. Благодаря! – Raffael

+0

Эй, Раффаэль, вы можете добавить его в любом месте, где вы уверены, что вы будете называть каждую pageload. Это зависит от вашей структуры, но обычно у нее будет какой-то «загрузочный»/конфигурационный файл, в котором вы можете добавить такие вещи. –

0

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

0

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

Смежные вопросы