Fehlermeldung
Warning: Ignoring extra certs from `/etc/ssl/private-ca/corp-root-ca.pem`, load failed: error:80000002:system library::No such file or directory
Der Pfad ist der Wert deiner Variablen; der Grund variiert: „No such file or directory“ bei einer fehlenden Datei, „Permission denied“ bei einer nicht lesbaren und ein OpenSSL-PEM-Fehler, wenn die Datei existiert, aber nicht im PEM-Format vorliegt.
Node.js start-up — NODE_EXTRA_CA_CERTS could not be read
Was der Fehler bedeutet
Node.js hat NODE_EXTRA_CA_CERTS beim Start gelesen, konnte die darin genannte Datei aber nicht laden und startet deshalb ohne deine zusätzlichen CA-Zertifikate. Der Prozess bricht nicht ab; die Verbindungen, die diese Zertifikate gebraucht hätten, scheitern später mit „unable to get local issuer certificate“ oder „self-signed certificate in certificate chain“. Der OpenSSL-Grund nach „load failed:“ verrät dir, warum.
Warum der Fehler auftritt
Der Pfad existiert auf dem Host, aber nicht dort, wo Node.js läuft
häufigDie Variable wurde in ein Dockerfile, eine CI-Konfiguration oder einen Devcontainer übernommen, während die Zertifikatsdatei auf dem Entwicklungsrechner blieb; im Container oder Runner existiert der Pfad nicht.
Ein relativer Pfad oder ein nicht expandiertes ~
häufigWerte wie ./certs/ca.pem werden relativ zum aktuellen Arbeitsverzeichnis des Prozesses aufgelöst, und „~/certs/ca.pem“ in einer .env-Datei oder einer systemd-Unit expandiert keine Shell.
Nicht lesbare Datei oder falsches Format
gelegentlichEin aus Windows als DER (.cer) exportiertes Zertifikat, eine Datei, die nur root lesen kann, oder eine Datei, die etwas anderes als PEM-Zertifikate enthält.
So behebst du den Fehler
- 1.
Datei prüfen, auf die die Variable zeigt
Stelle sicher, dass der Pfad für den Benutzer existiert, unter dem Node.js läuft, und dass openssl die Datei als PEM-Zertifikat lesen kann.
bash echo "$NODE_EXTRA_CA_CERTS" ls -l "$NODE_EXTRA_CA_CERTS" openssl x509 -in "$NODE_EXTRA_CA_CERTS" -noout -subject # must be PEM: -----BEGIN CERTIFICATE----- - 2.
Container: die Datei zusammen mit der Variablen ausliefern
Kopiere das CA-Zertifikat in das Image (oder binde es ein), und zwar unter genau dem Pfad, den die Variable nennt.
text # Dockerfile: put the file where the variable points, inside the image COPY corp-root-ca.pem /usr/local/share/ca-certificates/corp-root-ca.crt ENV NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/corp-root-ca.crt - 3.
Absoluten Pfad verwenden
Schreibe den Pfad beim Setzen der Variablen vollständig aus, damit er weder vom Arbeitsverzeichnis noch von einer Shell-Expansion abhängt.
bash # Absolute path, expanded by the shell before node starts export NODE_EXTRA_CA_CERTS="$HOME/certs/corp-root-ca.pem" - 4.
DER in PEM konvertieren
NODE_EXTRA_CA_CERTS erwartet PEM. Konvertiere binäre Exporte mit openssl x509 -inform der; mehrere Zertifikate lassen sich in einer PEM-Datei aneinanderhängen.
bash # A DER (.cer) export from Windows must be converted to PEM first openssl x509 -inform der -in corp-root-ca.cer -out corp-root-ca.pem