Fehlermeldung
npm error code ERR_TLS_CERT_ALTNAME_INVALID
Auch ausgegeben als
- 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 und neuer geben „npm error code ERR_TLS_CERT_ALTNAME_INVALID“ aus, npm 9 und älter „npm ERR! code ERR_TLS_CERT_ALTNAME_INVALID“. Host und altnames in der reason-Zeile stammen aus deiner Konfiguration und dem Zertifikat des Servers.
npm (Node.js) — registry request over HTTPS
Was der Fehler bedeutet
Das Zertifikat der Registry ist vertrauenswürdig, wurde aber nicht für den Hostnamen in der Registry-URL ausgestellt, die npm verwendet hat. Die reason-Zeile nennt beide Seiten: den Host, den npm angefragt hat, und die Namen, die das Zertifikat enthält. Typisch nach einem Umzug der Registry auf einen neuen Namen oder wenn die Registry-URL einen Alias, eine IP-Adresse oder die falsche Umgebung verwendet.
Warum der Fehler auftritt
Die Registry-URL verwendet einen Namen, den das Zertifikat nicht abdeckt
häufigEin Alias, eine IP-Adresse, ein alter Hostname, der in der .npmrc oder in den aufgelösten URLs der package-lock.json stehen geblieben ist, oder ein Staging-Host, der in Produktion weiterverwendet wird.
Ein Proxy antwortet mit einem Zertifikat für einen anderen Namen
gelegentlichFalsch konfigurierte Forward-Proxys und Captive Portals präsentieren ihr eigenes Zertifikat, das die Registry nicht nennt.
Dem Zertifikat der Registry fehlt ein Name
gelegentlichEin Zertifikat, das ohne einen der Namen neu ausgestellt wurde, die Clients verwenden, zum Beispiel ohne den alten Hostnamen, der als Alias erhalten geblieben ist.
So behebst du den Fehler
- 1.
Registry-Einstellung von npm mit dem Zertifikat vergleichen
Gib die konfigurierte Registry (und die Proxy-Einstellungen) sowie die SAN-Liste des Zertifikats aus. Auch Lockfiles enthalten aufgelöste URLs; sie müssen denselben Host verwenden.
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.
npm auf den Namen des Zertifikats umstellen
Aktualisiere die Einstellung registry in jeder .npmrc-Ebene (und erzeuge Lockfiles neu, wenn sie den alten Host enthalten).
bash # Use the host name the registry's certificate was issued for npm config set registry https://npm.example.com/ - 3.
Für Betreiber der Registry: jeden verwendeten Namen abdecken
Stelle das Zertifikat der Registry mit allen Hostnamen neu aus, die Clients verwenden, einschließlich der Aliasse, die aus Kompatibilitätsgründen erhalten bleiben.
bash # Registry owners: include every name clients use sudo certbot certonly --nginx -d npm.example.com -d registry.example.com