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
Un serveur HTTPS local avec un certificat généré
fréquenteLes serveurs de développement (Vite ou webpack avec https, passerelles d’API locales, environnements docker-compose) créent un certificat auto-signé auquel les scripts Node.js, les tests et le code SSR ne font pas confiance.
Outils internes et équipements
fréquenteDes services auto-hébergés (Jenkins, Grafana, Elasticsearch, pages d’administration de routeurs ou de NAS) qui n’ont jamais reçu de certificat émis par une AC.
Un proxy sert son certificat par défaut intégré
occasionnelleLes contrôleurs d’ingress et les proxys inverses présentent un certificat par défaut auto-signé lorsqu’aucun certificat configuré ne correspond au nom demandé.
Comment corriger l’erreur
- 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.
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.
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.
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
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)