it-swarm.com.ru

Обновить 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).'<br /><br />';  
        }
    }

    curl_close($curl);
    return $Response;   
}

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

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

curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);

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

7
Drew Angell

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

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

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

3
philippe lhardy

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

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

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

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

3
Sebastian Sibelle

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

0
burgur

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

0
Luca Murante