Aller au contenu
ecdsa.com
GNU Wget built with GnuTLS (Debian, Ubuntu before 22.04 used it too)curl

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

Comment corriger l’erreur

  1. 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. 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. 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. 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. 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

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