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

Mensaje de error

npm error code SELF_SIGNED_CERT_IN_CHAIN

También se muestra como

  • npm ERR! code SELF_SIGNED_CERT_IN_CHAIN
  • npm error request to https://registry.example.com/lodash failed, reason: self-signed certificate in certificate chain

npm 10 y posteriores imprimen «npm error code SELF_SIGNED_CERT_IN_CHAIN»; npm 9 y anteriores, «npm ERR! code SELF_SIGNED_CERT_IN_CHAIN». Las líneas siguientes repiten el código como errno e indican la URL con «reason: self-signed certificate in certificate chain».

npm (Node.js) — registry request over HTTPS

Qué significa

La conexión con el registro presentó una cadena de certificados que termina en una raíz autofirmada que Node.js no conoce. En el caso de registry.npmjs.org, esto significa que el tráfico se está interceptando y volviendo a firmar; casi siempre lo hace un proxy de la empresa o un antivirus con análisis de HTTPS, en cuya raíz confía el navegador, pero npm no.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Pasar a npm la raíz del proxy con cafile

    Exporta como PEM el certificado raíz (obtenido de tu departamento de TI o del almacén de confianza del sistema operativo) y configúralo como cafile de npm. A partir de ahí, npm solo confía en las CA de ese archivo, así que en los portátiles que también se usan fuera de la red de la empresa, añade las raíces públicas al mismo archivo o usa preferentemente NODE_EXTRA_CA_CERTS.

    bash
    npm config set cafile /etc/ssl/private-ca/corp-proxy-root.pem
    npm install
  2. 2.

    O definir NODE_EXTRA_CA_CERTS

    Añade la raíz para npm y para cualquier otra herramienta de Node.js sin sustituir las raíces públicas de Node.js. En Windows, defínela como variable de entorno de usuario y abre una terminal nueva.

    bash
    # Windows (PowerShell): setx NODE_EXTRA_CA_CERTS C:\certs\corp-proxy-root.pem
    export NODE_EXTRA_CA_CERTS=/etc/ssl/private-ca/corp-proxy-root.pem
    npm install
  3. 3.

    O dejar que Node.js use el almacén del sistema operativo

    NODE_USE_SYSTEM_CA=1 hace que Node.js (y npm) confíe en lo mismo que el sistema operativo, lo que en los equipos gestionados incluye la raíz del proxy.

    bash
    # Managed machines already trust the proxy root in the OS store
    NODE_USE_SYSTEM_CA=1 npm install
  4. 4.

    Diagnóstico temporal: --strict-ssl=false

    Solo para confirmar que el problema es de confianza. Los paquetes ejecutan scripts de instalación, así que aceptar descargas sin verificar es la vía por la que los ataques a la cadena de suministro llegan a los equipos de los desarrolladores; nunca pongas strict-ssl=false en .npmrc.

    bash
    # Temporary diagnostic for one command only
    npm install --strict-ssl=false

Errores relacionados

Explorar toda la base de datos de errores de firma