Aller au contenu
ecdsa.com
Node.js tls / https / fetchNode.js crypto

Message d’erreur

code: 'DEPTH_ZERO_SELF_SIGNED_CERT'

Également affiché sous la forme

  • 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 affiche le message sous la forme « self-signed certificate; if the root CA is installed locally, try running Node.js with --use-system-ca » ; les versions plus anciennes affichent seulement « self-signed certificate » (« self signed certificate » avant Node.js 17). Le code est la partie stable à rechercher.

Node.js tls / https / fetch — error.message "self-signed certificate" (OpenSSL X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT, 18)

Ce que cela signifie

Le certificat du serveur est auto-signé (il est son propre émetteur, la « profondeur zéro » de la chaîne) et ne figure pas parmi les certificats auxquels Node.js fait confiance. Node.js le signale avec le message « self-signed certificate » et le code DEPTH_ZERO_SELF_SIGNED_CERT. C’est typique des serveurs de développement locaux, des outils internes et des services qui utilisent encore le certificat généré à l’installation.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Faire confiance à ce seul certificat pour un seul agent

    Passez le certificat du serveur dans l’option ca. Seul ce certificat est accepté, et les contrôles du nom d’hôte et de validité restent actifs ; notez que ca remplace les racines par défaut pour cet agent.

    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.

    Ajouter le certificat pour tout le processus

    NODE_EXTRA_CA_CERTS fonctionne aussi bien pour https et tls que pour fetch(), et ne nécessite aucune modification du code.

    bash
    # Whole process, including fetch(): add the certificate to the trusted set
    NODE_EXTRA_CA_CERTS=./localhost.pem node app.js
  3. 3.

    Utiliser une AC locale pour le développement

    Une racine locale approuvée une seule fois (mkcert, step-ca) émet des certificats correctement signés pour chaque hôte de développement et évite les exceptions certificat par certificat.

    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.

    Diagnostic temporaire : rejectUnauthorized: false

    Accepte n’importe quel certificat sur cet agent, y compris celui d’un attaquant. Acceptable uniquement pour une vérification locale rapide ; jamais dans du code livré.

    js
    // Temporary diagnostic in a test only: accepts ANY certificate on this agent
    const agent = new https.Agent({ rejectUnauthorized: false });

Erreurs associées

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