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
Un proxy corporativo que inspecciona TLS
frecuenteZscaler, Netskope, Palo Alto, Fortinet y productos similares se sitúan entre tu equipo y el registro, y presentan su propia raíz en la cadena.
Antivirus o protección de endpoints con análisis de HTTPS
ocasionalAlgunos productos para endpoints interceptan TLS localmente en el equipo e insertan su raíz solo en el almacén del sistema operativo.
Un registro privado que envía su propia raíz
ocasionalLos registros internos firmados por una CA de la empresa que sirven la raíz en su cadena siguen necesitando que Node.js confíe en esa raíz.
Cómo solucionarlo
- 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.
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.
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.
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
self-signed certificate in certificate chainNode.js tls / https / fetchnpm error code UNABLE_TO_GET_ISSUER_CERT_LOCALLYnpm (Node.js)error Error: self-signed certificate in certificate chainYarn Classic (1.x)Error: ERR_PNPM_RESOLVING_NPM_RESOLVER_NETWORK_ERRORpnpm 12 (native binary, rustls)fatal: unable to access 'https://git.example.com/team/app.git/': SSL certificat…git over HTTPS with libcurl + OpenSSL (Git for Windows default, macOS Homebrew, Alpine, RHEL)