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
Un php.ini copié depuis un autre système
fréquenteUne ligne curl.cainfo écrite pour une autre distribution, un chemin Windows, ou un fichier d’AC qui n’a jamais été installé dans cette image.
Windows : le cacert.pem configuré a été déplacé ou n’a jamais été téléchargé
fréquenteAprès une mise à niveau de PHP dans un nouveau dossier, curl.cainfo pointe souvent encore vers l’ancienne installation.
Le fichier n’est pas lisible par le processus PHP
occasionnelleLes processus PHP-FPM s’exécutent sous un autre utilisateur que votre shell ; la lecture d’un fichier d’AC lisible uniquement par root y échoue.
Comment corriger l’erreur
- 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.
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"