Message d’erreur
ERROR: cannot verify api.example.com's certificate, issued by 'CN=Example Private CA':
Également affiché sous la forme
- Unable to locally verify the issuer's authority.
Le nom d’hôte et le nom distinctif de l’émetteur changent d’un site à l’autre. Les builds de wget reposant sur GnuTLS (Debian) signalent le même échec par « ERROR: The certificate of '<host>' is not trusted. »
Ce que cela signifie
Le backend OpenSSL de wget n’a pas pu vérifier le certificat du serveur, dont l’émetteur est cité après « issued by ». La ligne indentée que wget affiche ensuite donne la raison indiquée par OpenSSL ; « Unable to locally verify the issuer's authority » signifie que l’émetteur ne figure pas dans le fichier d’AC local et que le serveur n’a pas envoyé de certificat menant à l’une des AC de ce fichier. wget s’arrête avec le code de sortie 5.
Pourquoi cela se produit
L’émetteur est une AC privée ou d’entreprise
fréquenteSi l’émetteur cité est l’AC de votre organisation ou celle d’un outil comme Kubernetes ou Vault, sa racine ne figure pas dans le fichier d’AC public de cette machine.
Le serveur omet son certificat intermédiaire
fréquenteSi l’émetteur est une AC intermédiaire publique (« R13 », « GTS CA 1C3 », « Sectigo RSA Domain Validation… »), le serveur ne l’a pas envoyée ; sans elle, OpenSSL ne peut pas relier le certificat feuille à une racine de confiance.
Un proxy d’inspection TLS a émis le certificat
occasionnelleUn nom d’émetteur appartenant à un éditeur de solutions de sécurité ou à votre entreprise, sur un site web public, signifie qu’un proxy re-signe le trafic. Sa racine doit être installée sur la machine qui exécute wget.
Le fichier d’AC est obsolète
rareLes systèmes qui n’ont pas mis à jour ca-certificates depuis des années peuvent ne pas avoir les racines auxquelles se rattachent les certificats publics plus récents.
Comment corriger l’erreur
- 1.
Lire la ligne indentée qui donne la raison
La ligne qui suit l’erreur (ERROR) indique lequel des contrôles d’OpenSSL a échoué, et donc s’il faut corriger la confiance, la chaîne du serveur ou les dates.
text ERROR: cannot verify api.example.com's certificate, issued by 'CN=Example Private CA': Unable to locally verify the issuer's authority. <- issuer unknown: CA or chain problem Self-signed certificate encountered. <- server certificate is self-signed Issued certificate has expired. <- date problem - 2.
Indiquer l’AC à wget
Passez la racine (ou un fichier d’AC) avec --ca-certificate, ou définissez ca_certificate dans ~/.wgetrc ou /etc/wgetrc.
bash wget --ca-certificate=/opt/certs/corp-root-ca.pem https://api.example.com/ echo 'ca_certificate = /opt/certs/corp-root-ca.pem' >> ~/.wgetrc - 3.
Installer la racine dans le fichier d’AC du système
wget compilé avec OpenSSL lit le fichier d’AC de la distribution : y ajouter la racine corrige donc d’un coup wget, curl et la plupart des autres outils de la machine.
bash # Ubuntu / Alpine sudo cp corp-root-ca.pem /usr/local/share/ca-certificates/corp-root-ca.crt && sudo update-ca-certificates # RHEL / Fedora sudo cp corp-root-ca.pem /etc/pki/ca-trust/source/anchors/ && sudo update-ca-trust - 4.
Propriétaires de serveurs : servir la chaîne complète
Lorsque l’émetteur est une AC intermédiaire publique, configurez le serveur avec le certificat feuille suivi des certificats intermédiaires.
bash # Server side: serve leaf + intermediates cat api.example.com.crt intermediate.crt > fullchain.pem - 5.
Diagnostic temporaire : ignorer la vérification une seule fois
--no-check-certificate permet de confirmer si le téléchargement fonctionnerait sans cette vérification. Cette option accepte n’importe quel certificat, y compris celui d’un attaquant : ne l’utilisez donc pas pour ce que vous exécutez ou ce à quoi vous faites confiance.
bash # Diagnostic only wget --no-check-certificate -O /dev/null https://api.example.com/
Erreurs associées
ERROR: The certificate of 'api.example.com' is not trusted.GNU Wget built with GnuTLS (Debian, Ubuntu before 22.04 used it too)curl: (60) SSL certificate problem: unable to get local issuer certificatecurl (OpenSSL backend)verify error:num=20:unable to get local issuer certificateOpenSSL CLI (openssl s_client / openssl verify)