Zum Inhalt springen
ecdsa.com
GNU Wget built with GnuTLS (Debian, Ubuntu before 22.04 used it too)curl

Fehlermeldung

ERROR: The certificate of 'api.example.com' is not trusted.

Auch ausgegeben als

  • ERROR: The certificate of 'api.example.com' doesn't have a known issuer.

Nur GnuTLS-Builds von wget geben dieses Zeilenpaar aus. OpenSSL-Builds (Ubuntu 22.04 und neuer, Alpine, wget 1.x von Fedora) melden dieselbe Situation als „ERROR: cannot verify <host>'s certificate, issued by '…'“, gefolgt von „Unable to locally verify the issuer's authority.“

Was der Fehler bedeutet

GnuTLS, die TLS-Bibliothek, mit der Debian wget baut, konnte das Zertifikat des Servers nicht prüfen, deshalb verweigert wget den Download. Diese erste Zeile ist allgemein; die Zeile, die wget direkt danach ausgibt, nennt den eigentlichen Grund, meistens „doesn't have a known issuer“ (kein Pfad zu einem vertrauenswürdigen Root-Zertifikat) oder „has expired“. wget beendet sich mit Status 5 (Fehler bei der SSL-Prüfung).

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Nächste Zeile lesen

    Die zweite ERROR-Zeile ist die eigentliche Diagnose. „doesn't have a known issuer“ deutet auf ein Problem mit CA oder Kette hin, „has expired“ und „is not yet activated“ auf die Datumsangaben, „owner does not match hostname“ auf nicht übereinstimmende Namen.

    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.

    wget mitteilen, welcher CA es vertrauen soll

    --ca-certificate nimmt eine PEM-Datei mit einem oder mehreren CA-Zertifikaten entgegen; ca_certificate in ~/.wgetrc oder /etc/wgetrc macht die Einstellung dauerhaft. --ca-directory arbeitet mit einem per Hash indizierten Zertifikatsverzeichnis.

    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.

    CA im System-Bundle installieren

    Unter Debian und Ubuntu fügt update-ca-certificates Zertifikate mit der Endung .crt, die in /usr/local/share/ca-certificates liegen, zu /etc/ssl/certs/ca-certificates.crt hinzu – der Datei, die GnuTLS standardmäßig liest.

    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.

    Eigener Server: vollständige Kette senden

    Steht im Handshake nur ein Zertifikat und ist sein Aussteller eine Zwischen-CA, konfiguriere den Server mit der Fullchain-Datei.

    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.

    Vorübergehende Diagnose: Prüfung einmalig überspringen

    --no-check-certificate zeigt, ob außer dem Vertrauen noch etwas anderes nicht stimmt. Die Option schaltet jede Prüfung ab, sodass ein Proxy oder Angreifer unbemerkt austauschen könnte, was du herunterlädst; verwende sie nie für Installer oder Skripte.

    bash
    # Diagnostic only: proves the download works when trust is ignored
    wget --no-check-certificate -O /dev/null https://api.example.com/

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen