Mensaje de error
npm error code ERR_TLS_CERT_ALTNAME_INVALID
También se muestra como
- npm ERR! code ERR_TLS_CERT_ALTNAME_INVALID
- npm error request to https://registry.example.com/lodash failed, reason: Hostname/IP does not match certificate's altnames: Host: registry.example.com. is not in the cert's altnames: DNS:www.example.com
npm 10 y posteriores imprimen «npm error code ERR_TLS_CERT_ALTNAME_INVALID»; npm 9 y anteriores, «npm ERR! code ERR_TLS_CERT_ALTNAME_INVALID». El host y los altnames de la línea del motivo proceden de tu configuración y del certificado del servidor.
npm (Node.js) — registry request over HTTPS
Qué significa
El certificado del registro es de confianza, pero no se emitió para el nombre de host de la URL del registro que usó npm. La línea del motivo detalla ambos lados: el host que pidió npm y los nombres que contiene el certificado. Es típico después de que un registro cambie de nombre, o cuando la URL del registro usa un alias, una dirección IP o el entorno equivocado.
Por qué ocurre
La URL del registro usa un nombre que el certificado no cubre
frecuenteUn alias, una dirección IP, un nombre de host antiguo que sigue en .npmrc o en las URL resueltas de package-lock.json, o un host de preproducción reutilizado en producción.
Un proxy responde con un certificado para otro nombre
ocasionalLos proxies de reenvío mal configurados y los portales cautivos presentan su propio certificado, que no nombra al registro.
Al certificado del registro le falta un nombre
ocasionalUn certificado que se volvió a emitir sin uno de los nombres que usan los clientes, por ejemplo, el nombre de host antiguo que se mantiene como alias.
Cómo solucionarlo
- 1.
Comparar la configuración de registro de npm con el certificado
Imprime el registro configurado (y la configuración del proxy) y la lista SAN del certificado. Los lockfiles también contienen URL resueltas, que deben usar el mismo host.
bash npm config get registry npm config list | grep -iE 'registry|proxy' echo | openssl s_client -connect registry.example.com:443 -servername registry.example.com 2>/dev/null \ | openssl x509 -noout -ext subjectAltName - 2.
Apuntar npm al nombre del certificado
Actualiza la configuración de registro en todos los niveles de .npmrc (y regenera los lockfiles si contienen el host antiguo).
bash # Use the host name the registry's certificate was issued for npm config set registry https://npm.example.com/ - 3.
Propietarios del registro: cubrir todos los nombres en uso
Vuelve a emitir el certificado del registro con todos los nombres de host que usan los clientes, incluidos los alias que se mantienen por compatibilidad.
bash # Registry owners: include every name clients use sudo certbot certonly --nginx -d npm.example.com -d registry.example.com