Zum Inhalt springen
ecdsa.com
PHP ext-curl (Guzzle, Laravel HTTP client)PHP

Fehlermeldung

cURL error 77: error setting certificate file: /etc/ssl/missing-ca.pem

Auch ausgegeben als

  • error setting certificate file: /etc/ssl/missing-ca.pem

Guzzle formatiert die Meldung als „cURL error 77: error setting certificate file: <path> (see https://curl.se/libcurl/c/libcurl-errors.html) for <url>“; curl_error() gibt den Teil nach „cURL error 77: “ zurück. Fehlt die Datei, scheitert schon vorher die eigene Option verify von Guzzle, und zwar mit „SSL CA bundle not found: <path>“.

PHP ext-curl (Guzzle, Laravel HTTP client) — CURLE_SSL_CACERT_BADFILE: curl.cainfo names a file that cannot be loaded

Was der Fehler bedeutet

libcurl konnte das von PHP vorgegebene CA-Bundle nicht laden, deshalb ist über ext-curl keine HTTPS-Anfrage möglich. Der Pfad nach dem Doppelpunkt stammt meist aus curl.cainfo in der php.ini (oder aus CURLOPT_CAINFO, das der Code setzt). An den Server wurde nichts gesendet.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Einstellung finden und Datei prüfen

    php --ini und php -i zeigen, welche Datei curl.cainfo setzt; prüfe, ob der Pfad für den Benutzer existiert, unter dem PHP läuft (FPM lädt unter Umständen eine andere php.ini als die CLI).

    bash
    php --ini
    php -i | grep -E 'curl.cainfo|openssl.cafile'
    ls -l "$(php -r 'echo ini_get("curl.cainfo");')"
  2. 2.

    curl.cainfo auf ein vorhandenes Bundle verweisen lassen

    Verwende unter Linux das Bundle der Distribution oder unter Windows eine gepflegte cacert.pem und lade PHP-FPM oder den Webserver neu.

    ini
    ; Linux (Debian/Ubuntu): the system bundle
    curl.cainfo = "/etc/ssl/certs/ca-certificates.crt"
    ; Windows: absolute path to an existing cacert.pem
    ; curl.cainfo = "C:\php\extras\ssl\cacert.pem"

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen