Fehlermeldung
error Error: unable to get local issuer certificate
Auch ausgegeben als
- YN0001: RequestError: unable to get local issuer certificate
Yarn 1.x gibt „error Error: unable to get local issuer certificate“ aus, gefolgt von einem Stacktrace von Node.js. Sendet die Registry nur ihr Leaf-Zertifikat, lautet der Text stattdessen „unable to verify the first certificate“.
Was der Fehler bedeutet
Yarn Classic hat von der Registry eine Zertifikatskette (Leaf- und Zwischenzertifikat) erhalten, aber Node.js vertraut dem darüberliegenden Root-Zertifikat nicht. Yarn gibt den Fehler von Node.js unverändert aus. Die Registry selbst ist meist in Ordnung; diesem Rechner fehlt das Root-Zertifikat der Firma oder des Proxys, zu dem die Kette führt.
Warum der Fehler auftritt
Eine private Registry mit einem von einer Firmen-CA signierten Zertifikat
häufigArtifactory, Nexus oder Verdaccio mit Zertifikaten einer internen CA, deren Root-Zertifikat Node.js unbekannt ist.
Ein Proxy mit TLS-Inspektion, der sein ausstellendes Zwischenzertifikat mitsendet
häufigProxys, die Leaf- und Zwischenzertifikat, aber nicht ihr Root-Zertifikat senden, erzeugen diesen Code statt „self-signed certificate in certificate chain“.
Das Lockfile verweist auf einen anderen Registry-Host
gelegentlichyarn.lock speichert vollständige Tarball-URLs. Ein Lockfile, das mit einem privaten Mirror erzeugt wurde, lädt weiterhin von diesem Host herunter, auch wenn sich die Registry-Einstellung ändert.
So behebst du den Fehler
- 1.
cafile von Yarn 1 setzen
Verweise Yarn auf das Root-Zertifikat der Firma (oder auf ein Bundle, das auch die öffentlichen Root-Zertifikate enthält, denn cafile ersetzt bei Registry-Anfragen die Standard-Root-Zertifikate).
bash yarn config set cafile /etc/ssl/private-ca/corp-root-ca.pem - 2.
Oder NODE_EXTRA_CA_CERTS verwenden
Fügt das Root-Zertifikat der eingebauten Liste von Node.js hinzu – für Yarn und für jeden anderen Node.js-Prozess, in dessen Umgebung die Variable gesetzt ist.
bash export NODE_EXTRA_CA_CERTS=/etc/ssl/private-ca/corp-root-ca.pem yarn install --frozen-lockfile - 3.
Yarn 4: httpsCaFilePath
Yarn 4 meldet den Fehler als „YN0001: RequestError: unable to get local issuer certificate“ und bezieht die CA-Datei aus der Einstellung httpsCaFilePath in .yarnrc.yml.
yaml # Yarn 4: .yarnrc.yml httpsCaFilePath: /etc/ssl/private-ca/corp-root-ca.pem - 4.
Prüfen, welche Hosts das Lockfile verwendet
Verweisen die aufgelösten URLs auf einen internen Mirror, behebst du das Problem am Zertifikat dieses Mirrors oder in deinem Trust Store, nicht in der Registry-Einstellung.
bash # Which hosts does the lockfile download from? grep -oE 'resolved "https://[^/]+' yarn.lock | sort | uniq -c