it-swarm.com.de

Aktualisieren PHP cURL-Anfrage von SSLv3 nach TLS ..?

Aufgrund der kürzlich in SSLv3 entdeckte Sicherheitsanfälligkeit deaktivieren viele Webdienstanbieter (z. B. Paypal, Facebook, Google) diese und möchten, dass wir stattdessen TLS verwenden. Ich habe ein bisschen Probleme damit, herauszufinden, wie das geht.

Ich verwende momentan die folgende Funktion, um meine cURL-Anfragen zu bearbeiten.

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;   
}

Wenn ich versuche, auf die Sandbox von Paypal zuzugreifen, wo sie dies bereits deaktiviert haben, erhalte ich einen CURL-Fehler: Fehler: 14077410: SSL-Routinen: SSL23_GET_SERVER_HELLO: sslv3-Alarm-Handshake-Fehler

Die Information, die ich gefunden habe, ist, dass ich dies nur ändern muss, um TLS anstelle von SSL zu verwenden, und die anderen Antworten, die ich gesehen habe, sagen, dies einfach zu tun, indem ich meiner Funktion eine Curl-Option hinzufüge ...

curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);

Ich habe diese Option hinzugefügt, und ich erhalte immer noch genau das gleiche Ergebnis. Alle Informationen darüber, wie ich diese Arbeit bekommen kann, wäre sehr dankbar. Vielen Dank!

7
Drew Angell

Kopiert von: SSL-Fehler kann nicht in TLS geändert werden

Versuchen Sie, curl_setopt($curl, CURLOPT_SSL_CIPHER_LIST, 'TLSv1'); zu Ihrem Code hinzuzufügen.

Dies funktioniert, wenn Sie cURL auf OpenSSL libssl basieren, nicht aber auf nss .

3
philippe lhardy

Eine bessere Lösung, bis Paypal sein Kern-SDK aktualisiert, wäre das Überschreiben der CURLOPT_SSL_CIPHER_LIST direkt in Ihrer Anwendung. Auf diese Weise müssen Sie nicht direkt mit dem Paket sdk-core-php interferieren, und Sie können es in Zukunft aktualisieren. 

Sie können der Bootstrap- oder Zahlungsverarbeitungslogik Ihrer App Folgendes hinzufügen:

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

Stellen Sie einfach sicher, dass Sie es gründlich kommentieren und denken Sie daran, es später herauszunehmen, wenn das Problem im Kern gepatcht wurde.

3

Wenn das oben genannte nicht hilft, überprüfen Sie die Version von OPENSSL. Dies liegt wahrscheinlich an der OPENSSL-Version <= 0.9.8. Ein Update auf PHP7 ist hilfreich, da es eine höhere Version von OPENSSL enthält.

0
burgur

Ich habe gerade die Aktualisierung der nss-Bibliothek über das Terminal behoben.

0
Luca Murante