PHP-CURL: Behebung des Fehlers "SSL-Zertifikatsproblem: Lokales Ausstellerzertifikat kann nicht abgerufen werden".

Wenn Sie die cURL-Funktionen von PHP verwenden, um eine Verbindung zu einer HTTPS-URL herzustellen, tritt möglicherweise der folgende Fehler auf:

Problem mit dem SSL-Zertifikat: Lokales Ausstellerzertifikat kann nicht abgerufen werden. (cURL-Fehlercode 60)

Dies ist ein häufiger Fehler, der auftritt, wenn Sie versuchen, mithilfe der cURL-Funktionen von PHP eine Verbindung zu einer HTTPS-Website herzustellen. Im Wesentlichen wurde Ihr cURL-Client nicht für die Verbindung mit SSL-fähigen Websites konfiguriert.

Die schnelle Lösung.

Wenn Sie sich nicht um die Sicherheit kümmern und nach einer schnellen Lösung suchen, können Sie einfach die folgenden cURL-Optionen deaktivieren:

Durch Deaktivieren dieser beiden Optionen wird die SSL-Überprüfung deaktiviert.

Um diese beiden Optionen zu deaktivieren, können Sie die Funktion curl_setopt folgendermaßen verwenden:

//The URL we are connecting to.
$url = 'https://google.com';

//Initiate cURL.
$ch = curl_init($url);

//Disable CURLOPT_SSL_VERIFYHOST and CURLOPT_SSL_VERIFYPEER by
//setting them to false.
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

//Execute the request.
curl_exec($ch);

//Check for errors.
if(curl_errno($ch)){
    throw new Exception(curl_error($ch));
}

Der obige Code sagt cURL im Wesentlichen, dass es uns egal ist, ob der Server ein gültiges SSL-Zertifikat hat oder nicht. Wir wollen uns trotzdem damit verbinden.

Das Problem bei dieser Methode ist, dass sie unsicher ist und Sie für Man-in-the-Middle-Angriffe offen lässt. Einfach ausgedrückt bedeutet dies, dass ein Angreifer möglicherweise die Daten abfangen kann, die Sie in Ihren cURL-Anforderungen senden.

Verwenden eines Zertifikats mit den cURL-Funktionen von PHP.

Um ein Zertifikat mit den cURL-Funktionen von PHP zu verwenden, können Sie das Zertifikatspaket cacert.pem von der offiziellen cURL-Website herunterladen . Nachdem Sie die Datei cacert.pem heruntergeladen haben , sollten Sie sie in das Verzeichnis verschieben, das für Sie und Ihr Setup am sinnvollsten ist. Unter Windows habe ich mein Bundle nach C: \ wamp \ cacert.pem verschoben

Anschließend können Sie cURL mithilfe der Funktion curl_setopt einfach mitteilen, wo sich Ihr Zertifikatspaket befindet  :

PHP
    //The URL we are connecting to.
$url = 'https://google.com';

//Initiate cURL.
$ch = curl_init($url);

//Disable CURLOPT_SSL_VERIFYHOST and CURLOPT_SSL_VERIFYPEER by
//setting them to false.
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

//Execute the request.
curl_exec($ch);

//Check for errors.
if(curl_errno($ch)){
    throw new Exception(curl_error($ch));
}
    

Auf diese Weise können wir eine sichere Anfrage an den Server stellen und Man-in-the-Middle-Angriffe verhindern.

Hinzufügen des Zertifikats zu Ihrer php.ini-Datei.

Wenn Ihnen der Gedanke nicht gefällt, den Speicherort des Zertifikatspakets in Ihrem PHP-Code angeben zu müssen, können Sie die Pfadinformationen wie folgt zu Ihrer Datei php.ini hinzufügen:

curl.cainfo="C:\wamp\cacert.pem" 
openssl.cafile="C:\wamp\cacert.pem"

Stellen Sie nach dem Hinzufügen der obigen Zeilen zu Ihrer Datei php.ini sicher, dass Sie den Webserver / PHP-Prozess neu laden, damit die Änderungen wirksam werden.

Aktivieren von mod_ssl und php_openssl.dll.

Wenn Sie Apache und PHP unter Windows verwenden, müssen Sie möglicherweise sowohl  mod_ssl als auch  php_openssl.dll aktivieren .

Um mod_ssl zu aktivieren , können Sie Ihrer Apache-Konfigurationsdatei Folgendes hinzufügen:


LoadModule ssl_module /usr/lib/httpd/modules/mod_ssl.so

Beachten Sie, dass in der obigen Konfigurationszeile davon ausgegangen wird, dass eine Datei mit dem Namen mod_ssl.so in einem Linux- Verzeichnis mit dem Namen "/ usr / lib / httpd / modules /" vorhanden ist . Unter Windows kann dieses Verzeichnis etwa " C: \ wamp \ bin \ apache \ apache2.4.9 \ modules \ " sein. Sie müssen diese Zeile ändern, um sie an Ihr eigenes Apache-Setup anzupassen.

Um php_openssl.dll zu aktivieren , müssen Sie die folgende Zeile in Ihrer php.ini-Datei auskommentieren:

extension=php_openssl.dll

Wenn Sie die obige Zeile finden, stellen Sie sicher, dass am Anfang kein Semikolon steht.

Wie immer sollten Sie Ihre Konfigurationen testen und dann neu laden, damit Änderungen wirksam werden.


Deprecated: Directive 'allow_url_include' is deprecated in Unknown on line 0