Mensaje de error
npm error code CERT_HAS_EXPIRED
También se muestra como
- npm ERR! code CERT_HAS_EXPIRED
- npm error request to https://registry.example.com/lodash failed, reason: certificate has expired
npm 10 y posteriores imprimen «npm error code CERT_HAS_EXPIRED»; npm 9 y anteriores, «npm ERR! code CERT_HAS_EXPIRED». Las líneas siguientes indican la URL con «reason: certificate has expired».
npm (Node.js) — registry request over HTTPS
Qué significa
Un certificado de la cadena que npm recibió del registro (o de un proxy que haya entre ambos) ha superado su fecha de caducidad según el reloj de este equipo. En el registro público, esto casi nunca significa que haya caducado el propio certificado de npm: apunta a una CA antigua fijada en tu configuración de npm, a una lista de raíces de Node.js obsoleta, a un certificado de proxy o a un reloj mal configurado. En los registros privados, el certificado del servidor puede haber caducado de verdad.
Por qué ocurre
El certificado del registro privado caducó
frecuenteInstancias autoalojadas de Nexus, Artifactory o Verdaccio y proxies corporativos cuyos certificados se renuevan a mano.
Un Node.js muy antiguo con raíces obsoletas
ocasionalNode.js incluye su lista de raíces en el binario; las versiones anteriores al cambio de raíz de una CA pueden conocer solo la raíz caducada y fallar donde las versiones actuales funcionan.
Una CA antigua fijada con el ajuste ca o cafile
ocasionalUna entrada ca= o cafile= que quedó en .npmrc hace años sustituye las raíces predeterminadas de Node.js en las solicitudes al registro, así que npm sigue validando contra ese certificado antiguo, ya caducado.
El reloj del sistema está mal
ocasionalComprueba la fecha en las VM, los contenedores y los dispositivos sin reloj con batería antes de cambiar la configuración.
Cómo solucionarlo
- 1.
Comprobar qué registro y qué certificado intervienen
Consulta el registro configurado y la fecha de fin de validez del certificado que sirve. Un certificado caducado en un registro privado debe renovarse en el servidor.
bash npm config get registry echo | openssl s_client -connect registry.example.com:443 -servername registry.example.com 2>/dev/null \ | openssl x509 -noout -subject -enddate - 2.
Eliminar los ajustes ca o cafile obsoletos
npm config list muestra la configuración de todos los niveles de .npmrc; elimina las entradas ca o cafile que apunten a certificados antiguos (o actualiza el archivo al que hacen referencia).
bash # An old CA pinned in .npmrc replaces the default roots: list and remove it npm config list | grep -E '^;? *(ca|cafile)' npm config delete ca npm config delete cafile - 3.
Actualizar Node.js y npm
Una versión de Node.js con mantenimiento trae una lista de raíces actual; actualiza npm después.
bash node -v && npm -v # Node.js bundles its root list; very old releases carry expired roots # upgrade Node.js to a maintained release (nvm, fnm, volta or your OS packages), then: npm install -g npm@latest