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
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.
Schreibe einen Kommentar