Saltar al contenido
ecdsa.com
npm (Node.js)Gestores de paquetes

Mensaje de error

npm error code DEPTH_ZERO_SELF_SIGNED_CERT

También se muestra como

  • npm ERR! code DEPTH_ZERO_SELF_SIGNED_CERT

npm 10 y posteriores imprimen «npm error code DEPTH_ZERO_SELF_SIGNED_CERT»; npm 9 y anteriores, «npm ERR! code DEPTH_ZERO_SELF_SIGNED_CERT». La línea del motivo dice «self-signed certificate», con la sugerencia de --use-system-ca en las versiones recientes de Node.js.

npm (Node.js) — registry request over HTTPS

Qué significa

El registro al que se conectó npm presentó un único certificado autofirmado en el que Node.js no confía. No hay ninguna cadena de CA, así que las únicas salidas son confiar deliberadamente en ese certificado concreto o dar al registro un certificado emitido por una CA. Es típico de los registros locales o autoalojados que se iniciaron con un certificado generado.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Confiar exactamente en este certificado

    Obtén el certificado, compara su huella digital SHA-256 con la que se muestra en el host del registro y después añádelo con NODE_EXTRA_CA_CERTS (o con el cafile de npm).

    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.

    Limitar el registro privado a tu ámbito

    Si solo diriges el ámbito (scope) de tu organización al registro privado, todos los paquetes públicos siguen viniendo de registry.npmjs.org, así que un problema de certificado en el host privado no puede afectarlos.

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

    Dar al registro un certificado emitido por una CA

    Un certificado de una CA pública (ACME) o de la CA de la empresa en la que ya confían tus equipos elimina la necesidad de excepciones certificado por certificado.

    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

Errores relacionados

Explorar toda la base de datos de errores de firma