Zum Inhalt springen
ecdsa.com
npm (Node.js)Paketmanager

Fehlermeldung

npm error code DEPTH_ZERO_SELF_SIGNED_CERT

Auch ausgegeben als

  • npm ERR! code DEPTH_ZERO_SELF_SIGNED_CERT

npm 10 und neuer geben „npm error code DEPTH_ZERO_SELF_SIGNED_CERT“ aus, npm 9 und älter „npm ERR! code DEPTH_ZERO_SELF_SIGNED_CERT“. Die reason-Zeile lautet „self-signed certificate“, bei neueren Node.js-Versionen mit dem Hinweis auf --use-system-ca.

npm (Node.js) — registry request over HTTPS

Was der Fehler bedeutet

Die Registry, mit der sich npm verbunden hat, hat ein einzelnes selbstsigniertes Zertifikat präsentiert, dem Node.js nicht vertraut. Es gibt überhaupt keine CA-Kette, also bleiben nur zwei Wege: genau diesem Zertifikat bewusst zu vertrauen oder der Registry ein von einer CA ausgestelltes Zertifikat zu geben. Typisch für lokale oder selbst gehostete Registrys, die mit einem generierten Zertifikat gestartet wurden.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Genau diesem Zertifikat vertrauen

    Rufe das Zertifikat ab, vergleiche seinen SHA-256-Fingerabdruck mit dem, der auf dem Registry-Host angezeigt wird, und füge es dann mit NODE_EXTRA_CA_CERTS (oder über cafile von npm) hinzu.

    bash
    # Save the registry's certificate, check its fingerprint, and trust exactly this file
    openssl s_client -connect registry.example.com:443 -servername registry.example.com </dev/null 2>/dev/null \
      | openssl x509 -out registry.pem
    openssl x509 -in registry.pem -noout -fingerprint -sha256
    NODE_EXTRA_CA_CERTS=$PWD/registry.pem npm install
  2. 2.

    Private Registry auf deinen Scope beschränken

    Leitest du nur den Scope deiner Organisation an die private Registry, bleiben alle öffentlichen Pakete auf registry.npmjs.org, und ein Zertifikatsproblem auf dem privaten Host kann sie nicht beeinträchtigen.

    ini
    ; .npmrc — only @acme packages come from the private registry; the rest from npmjs
    @acme:registry=https://registry.example.com/
  3. 3.

    Der Registry ein von einer CA ausgestelltes Zertifikat geben

    Ein Zertifikat einer öffentlichen CA (ACME) oder der Firmen-CA, der deine Rechner bereits vertrauen, macht Ausnahmen für einzelne Zertifikate überflüssig.

    bash
    # Give the registry a certificate from a CA your machines trust (public ACME or company CA)
    sudo certbot certonly --standalone -d registry.example.com

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen