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
Das Zertifikat stammt von einer privaten CA
häufigDie Ketten von Firmen-, Labor- und Kubernetes-Zertifikaten enden bei Root-Zertifikaten, die nicht im Bundle ca-certificates von Debian stehen; GnuTLS meldet das als unbekannten Aussteller.
Der Server sendet sein Zwischenzertifikat nicht
häufigGnuTLS lädt fehlende Zwischenzertifikate nicht nach. Ein Server, der nur mit dem Leaf-Zertifikat konfiguriert ist, scheitert hier, obwohl Browser, die Zwischenzertifikate zwischenspeichern und nachladen, die Website als sicher anzeigen.
Ein Proxy mit TLS-Inspektion signiert die Verbindung neu
gelegentlichFirmenproxys präsentieren Zertifikate, die von ihrem eigenen Root-Zertifikat ausgestellt wurden. Solange dieses Root-Zertifikat nicht im System-Bundle dieses Rechners (oder Containers) installiert ist, scheitert jeder HTTPS-Download.
Das System hat kein CA-Bundle
gelegentlichMinimale Debian- und Ubuntu-Images enthalten ca-certificates nicht. Dann gelten selbst bekannte öffentliche Websites als „not trusted“.
So behebst du den Fehler
- 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.
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.
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.
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.
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
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)