Fatal error: Uncaught GuzzleHttp\Exception\RequestException: cURL error 60: SSL certificate problem

rotschnabelhokko 5179004 1920
Bild von Lolame auf Pixabay

Für die Entwicklung und erste Tests nutze ich seit jeher den in Windows integrierten Webserver (IIS), den man im Windows-Setup nachinstallieren kann. Doch mit der Installation von Multilingualpress um eine Kundenwebsite weiter zu entwickeln, trat folgender Fehler auf.

Fatal error: Uncaught GuzzleHttp\Exception\RequestException: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) in …\wp-content\plugins\multilingualpress\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php:201 Stack trace: #0 …\wp-content\plugins\multilingualpress\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php(155): GuzzleHttp\Handler\CurlFactory::createRejection() #1 …\mlstest\wp-content\plugins\multilingualpress\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php(105): GuzzleHttp\Handler\CurlFactory::finishError() #2 …\mlstest\wp-content\plugins\multilingualpress\vendor\guzzlehttp\guzzle\src\Handler\CurlHandler.php(43): GuzzleHttp\Handler\CurlFactory::finish() #3 …\wp-content\plugins\multilingualpress\vendor\guzzlehttp\guzzle\src\Handler\Proxy.php(28): GuzzleHttp\Handler\CurlHandler->__invoke() #4 …in …\wp-content\plugins\multilingualpress\vendor\mjelamanov\psr18-guzzle\src\Client.php on line 50

In der Wirkbetriebsumgebung (Linux, Apache) lief hingegen alles bestens, da die Curl-Bibliotheken über die Paketmanager gebündelt werden und die aktuellen Curl-Bibliotheken mit dem neuesten CA-Root-Zertifikatspaket von Mozilla.org geliefert werden.

Das bedeutet, dass man einfach den CURLOPT_SSL_VERIFYPEER einschaltet und keine Fehler erhalten wird.Bei einer PHP-Installation die diese Datei nicht enthält, wie die Windows-PHP-Distribution, muss das CA-Root-Zertifikatspaket manuell herunterladen und PHP mitgeteilt werden, wo es zu finden ist. Auf der curl-Website steht das neueste CA-Root-Zertifikatspaket bereit.

https://curl.se/docs/caextract.html

screenshot 2021 10 15 091233

Die Datei herunterladen, und im PHP-Verzeichnis speichern (das geht vermutlich erst hinterher, da es dafür Admin-Rechte braucht).

Anschließend die php.ini-Datei bearbeiten und curl mitteilen, wo die .pem-Datei gespeichert ist. In meiner Testumgebung habe ich mehrere PHP-Versionen unter C:\Program Files\PHP also habe ich die Datei in diesem Ordner abgelegt und diese Zeile zu jeder php.ini-Datei hinzugefügt:

curl.cainfo=c:\Program Files\php\cacert.pem

Eventuell muss der Webserver neu gestartet werden. Bei mir war der Fehler umgehend nach dem Speichern der php.ini Datei zur entsprechenden PHP-Version verschwunden.

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden. Die Angabe einer E-Mail-Adresse und eines Namens ist nicht erforderlich. Einen (Spitz)-Namen zu nennen wäre aber doch nett.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Sowohl angegebener Name als auch E-Mail-Adresse (beides ist optional, dafür werden alle Kommentare vor Veröffentlichung geprüft) werden dauerhaft gespeichert. Du kannst jeder Zeit die Löschung Deiner Daten oder / und Kommentare einfordern, direkt über dieses Formular (wird nicht veröffentlicht, und im Anschluss gelöscht), und ich werde das umgehend erledigen. – Mit hinterlassenen Kommentaren hinterlegte IP-Adressen werden nach zwei Monaten automatisch gelöscht

publicly queryable