Zum Inhalt springen
ecdsa.com
Node.js tls / https / fetchNode.js crypto

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

So behebst du den Fehler

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

Gesamte Signaturfehler-Datenbank durchsuchen