Fehlermeldung
code: 'DEPTH_ZERO_SELF_SIGNED_CERT'
Auch ausgegeben als
- self-signed certificate; if the root CA is installed locally, try running Node.js with --use-system-ca
- DEPTH_ZERO_SELF_SIGNED_CERT
Node.js 24.22 gibt die Meldung als „self-signed certificate; if the root CA is installed locally, try running Node.js with --use-system-ca“ aus; ältere Releases geben nur „self-signed certificate“ aus (vor Node.js 17 „self signed certificate“). Der Code ist der stabile Teil, nach dem du suchen solltest.
Node.js tls / https / fetch — error.message "self-signed certificate" (OpenSSL X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT, 18)
Was der Fehler bedeutet
Das Zertifikat des Servers ist selbstsigniert (es ist sein eigener Aussteller, „depth zero“ der Kette) und gehört nicht zu den Zertifikaten, denen Node.js vertraut. Node.js gibt dafür die Meldung „self-signed certificate“ und den Code DEPTH_ZERO_SELF_SIGNED_CERT aus. Das ist typisch für lokale Entwicklungsserver, interne Tools und Dienste, die noch das bei der Installation erzeugte Zertifikat verwenden.
Warum der Fehler auftritt
Ein lokaler HTTPS-Server mit generiertem Zertifikat
häufigEntwicklungsserver (Vite oder webpack mit https, lokale API-Gateways, docker-compose-Stacks) erzeugen ein selbstsigniertes Zertifikat, dem Node.js-Skripte, Tests und SSR-Code nicht vertrauen.
Interne Tools und Appliances
häufigSelbst gehostete Dienste (Jenkins, Grafana, Elasticsearch, Admin-Seiten von Routern oder NAS), die nie ein von einer CA ausgestelltes Zertifikat bekommen haben.
Ein Proxy liefert sein eingebautes Standardzertifikat aus
gelegentlichIngress-Controller und Reverse Proxys präsentieren ein selbstsigniertes Standardzertifikat, wenn kein konfiguriertes Zertifikat zum angefragten Namen passt.
So behebst du den Fehler
- 1.
Diesem einen Zertifikat in einem einzigen Agenten vertrauen
Übergib das Zertifikat des Servers als ca. Akzeptiert wird nur dieses Zertifikat, die Prüfungen von Hostname und Gültigkeit bleiben aktiv; beachte, dass ca für diesen Agenten die Standard-Root-Zertifikate ersetzt.
js // Trust exactly this certificate for this agent (hostname and dates are still checked) import https from "node:https"; import fs from "node:fs"; const agent = new https.Agent({ ca: fs.readFileSync("localhost.pem") }); https.get("https://localhost:8443/", { agent }, (res) => res.resume()); - 2.
Zertifikat für den ganzen Prozess hinzufügen
NODE_EXTRA_CA_CERTS wirkt gleichermaßen für https, tls und fetch() und erfordert keine Codeänderungen.
bash # Whole process, including fetch(): add the certificate to the trusted set NODE_EXTRA_CA_CERTS=./localhost.pem node app.js - 3.
Lokale CA für die Entwicklung verwenden
Eine lokale Root-CA, der du einmal vertraust (mkcert, step-ca), stellt ordnungsgemäß signierte Zertifikate für jeden Entwicklungshost aus und erspart Ausnahmen für einzelne Zertifikate.
bash # Development: a local CA (mkcert) instead of one-off self-signed certificates mkcert -install && mkcert localhost 127.0.0.1 NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem" node app.js - 4.
Vorübergehende Diagnose: rejectUnauthorized: false
Akzeptiert auf diesem Agenten jedes Zertifikat, auch das eines Angreifers. Nur für eine schnelle lokale Prüfung vertretbar; niemals in Code, der ausgeliefert wird.
js // Temporary diagnostic in a test only: accepts ANY certificate on this agent const agent = new https.Agent({ rejectUnauthorized: false });
Verwandte Fehler
self-signed certificate in certificate chainNode.js tls / https / fetchnpm error code DEPTH_ZERO_SELF_SIGNED_CERTnpm (Node.js)curl: (60) SSL certificate problem: self-signed certificatecurl (OpenSSL backend)[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certifi…Python ssl module (OpenSSL)