Aller au contenu
ecdsa.com
PHP ext-curl (Guzzle, Laravel HTTP client)PHP

Message d’erreur

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

Également affiché sous la forme

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

Guzzle la met en forme ainsi : « cURL error 77: error setting certificate file: <path> (see https://curl.se/libcurl/c/libcurl-errors.html) for <url> » ; curl_error() renvoie la partie qui suit « cURL error 77: ». Lorsque le fichier est absent, l’option verify de Guzzle échoue plus tôt, avec « 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

Ce que cela signifie

libcurl n’a pas pu charger le fichier d’AC que PHP lui a demandé d’utiliser, si bien qu’aucune requête HTTPS ne peut passer par ext-curl. Le chemin qui suit les deux-points provient généralement de curl.cainfo dans php.ini (ou de CURLOPT_CAINFO défini dans le code). Rien n’a été envoyé au serveur.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Trouver la directive et vérifier le fichier

    php --ini et php -i indiquent quel fichier définit curl.cainfo ; vérifiez que le chemin existe pour l’utilisateur qui exécute PHP (FPM peut charger un autre php.ini que la CLI).

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

    Faire pointer curl.cainfo vers un fichier d’AC existant

    Utilisez le fichier d’AC de la distribution sous Linux ou un cacert.pem tenu à jour sous Windows, puis rechargez PHP-FPM ou le serveur web.

    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"

Erreurs associées

Parcourir toute la base de données des erreurs de signature