web-dev-qa-db-fra.com

Mettre à jour PHP Demande de CURL de SSLv3 à TLS ..?

En raison de la vulnérabilité récente découverte dans SSLv3 , de nombreux fournisseurs de services Web (Paypal, Facebook, Google) le désactivent et souhaitent que nous utilisions le protocole TLS. J'ai un peu de mal à comprendre comment faire cela.

J'utilise actuellement la fonction suivante pour gérer mes requêtes 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;   
}

Quand j'essaie de frapper le bac à sable de Paypal, où ils ont déjà désactivé cela, je me retrouve avec une erreur cURL: erreur: 14077410: routines SSL: SSL23_GET_SERVER_HELLO: échec de la poignée de main d'alerte sls3

L'information que j'ai trouvée est que je dois juste changer cela pour utiliser TLS au lieu de SSL, et les autres réponses que j'ai vues disent de le faire simplement en ajoutant une option curl à ma fonction ...

curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);

J'ai toutefois ajouté cette option et j'obtiens toujours le même résultat. Toute information sur la façon dont je peux obtenir ce travail serait grandement appréciée. Merci!

7
Drew Angell

Copié à partir de: Erreur SSL ne peut pas être remplacé par TLS

Essayez d'ajouter curl_setopt($curl, CURLOPT_SSL_CIPHER_LIST, 'TLSv1'); à votre code.

Cela fonctionnera si votre cURL est OpenSSL libssl basé mais pas si nss based.

3
philippe lhardy

Une meilleure solution jusqu'à ce que Paypal mette à jour son SDK principal serait de remplacer CURLOPT_SSL_CIPHER_LIST directement dans votre application. De cette façon, vous n'avez pas à interférer directement avec le paquet sdk-core-php et vous serez libre de le mettre à jour à l'avenir. 

Vous pouvez ajouter quelque chose comme ceci à la logique de traitement d'amorçage ou de paiement de votre application:

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

Assurez-vous simplement de le commenter soigneusement et n'oubliez pas de le supprimer plus tard lorsque le problème aura été corrigé dans le noyau.

3

Si cela ne résout pas le problème, vérifiez la version de OPENSSL. C'est probablement à cause de la version OPENSSL <= 0.9.8. Mise à jour vers PHP7 aide, qui vient avec la version supérieure de OPENSSL.

0
burgur

Je viens de résoudre la mise à jour de la bibliothèque nss via un terminal.

0
Luca Murante