Message d’erreur
ERROR: The certificate of 'api.example.com' is not trusted.
Également affiché sous la forme
- ERROR: The certificate of 'api.example.com' doesn't have a known issuer.
Seuls les builds de wget reposant sur GnuTLS affichent cette paire de lignes. Les builds reposant sur OpenSSL (Ubuntu 22.04 et versions ultérieures, Alpine, wget 1.x de Fedora) signalent la même situation par « ERROR: cannot verify <host>'s certificate, issued by '…' », suivi de « Unable to locally verify the issuer's authority. »
Ce que cela signifie
GnuTLS, la bibliothèque TLS avec laquelle Debian compile wget, n’a pas pu vérifier le certificat du serveur : wget refuse donc de télécharger. Cette première ligne est générique ; la ligne que wget affiche juste après donne la raison réelle, le plus souvent « doesn't have a known issuer » (aucun chemin vers une racine de confiance) ou « has expired ». wget se termine avec le code de sortie 5 (échec de la vérification SSL).
Pourquoi cela se produit
Le certificat provient d’une AC privée
fréquenteLes certificats d’entreprise, de laboratoire et de Kubernetes se rattachent à des racines absentes du fichier ca-certificates de Debian ; GnuTLS le signale comme un émetteur inconnu.
Le serveur n’envoie pas son certificat intermédiaire
fréquenteGnuTLS ne télécharge pas les certificats intermédiaires manquants. Un serveur configuré avec le seul certificat feuille échoue ici, alors que les navigateurs, qui mettent en cache et récupèrent les certificats intermédiaires, affichent le site comme sécurisé.
Un proxy d’inspection TLS re-signe la connexion
occasionnelleLes proxys d’entreprise présentent des certificats émis par leur propre racine. Tant que cette racine n’est pas installée dans le fichier d’AC du système de cette machine (ou de ce conteneur), chaque téléchargement HTTPS échoue.
Le système n’a aucun fichier d’AC
occasionnelleLes images Debian et Ubuntu minimales n’incluent pas ca-certificates. Même des sites publics bien connus sont alors signalés comme « not trusted ».
Comment corriger l’erreur
- 1.
Lire la ligne qui suit
La seconde ligne d’erreur (ERROR) est le vrai diagnostic. « doesn't have a known issuer » désigne un problème d’AC ou de chaîne ; « has expired » et « is not yet activated » désignent les dates ; « owner does not match hostname », une discordance de nom.
bash wget -O /dev/null https://api.example.com/ 2>&1 | grep '^ERROR' # ... is not trusted. # ... doesn't have a known issuer. <- chain/CA problem # ... has expired. <- date problem - 2.
Indiquer à wget à quelle AC faire confiance
--ca-certificate prend un fichier PEM contenant un ou plusieurs certificats d’AC ; ca_certificate dans ~/.wgetrc ou /etc/wgetrc rend ce réglage permanent. --ca-directory fonctionne avec un répertoire de certificats indexé par hachage.
bash wget --ca-certificate=/opt/certs/corp-root-ca.pem https://api.example.com/ # permanently, for this user or system-wide (/etc/wgetrc) echo 'ca_certificate = /opt/certs/corp-root-ca.pem' >> ~/.wgetrc - 3.
Installer l’AC dans le fichier d’AC du système
Sous Debian et Ubuntu, les certificats placés dans /usr/local/share/ca-certificates avec l’extension .crt sont ajoutés à /etc/ssl/certs/ca-certificates.crt par update-ca-certificates, et GnuTLS lit ce fichier par défaut.
bash sudo cp corp-root-ca.pem /usr/local/share/ca-certificates/corp-root-ca.crt sudo update-ca-certificates # minimal images: install the bundle first apt-get install -y --no-install-recommends ca-certificates - 4.
Propriétaires de serveurs : envoyer la chaîne complète
Si un seul certificat figure dans le handshake et que son émetteur est une AC intermédiaire, configurez le serveur avec le fichier de chaîne complète.
bash # Server side: count the certificates in the handshake (1 = leaf only) openssl s_client -connect api.example.com:443 -servername api.example.com -showcerts </dev/null 2>/dev/null \ | grep -c 'BEGIN CERTIFICATE' - 5.
Diagnostic temporaire : ignorer la vérification une seule fois
--no-check-certificate montre si quelque chose d’autre que la confiance pose problème. Cette option désactive toute vérification : un proxy ou un attaquant pourrait donc remplacer silencieusement ce que vous téléchargez. Ne l’utilisez jamais pour des programmes d’installation ou des scripts.
bash # Diagnostic only: proves the download works when trust is ignored wget --no-check-certificate -O /dev/null https://api.example.com/
Erreurs associées
ERROR: cannot verify api.example.com's certificate, issued by 'CN=Example Priva…GNU Wget built with OpenSSL (Ubuntu 22.04+, Alpine, RHEL/CentOS)ERROR: The certificate of 'api.example.com' has expired.GNU Wget built with GnuTLS (Debian)curl: (60) SSL certificate problem: unable to get local issuer certificatecurl (OpenSSL backend)fatal: unable to access 'https://git.example.com/team/app.git/': server verific…git over HTTPS with libcurl-gnutls (Debian, Ubuntu)