Message d’erreur
Warning: Ignoring extra certs from `/etc/ssl/private-ca/corp-root-ca.pem`, load failed: error:80000002:system library::No such file or directory
Le chemin est la valeur de votre variable ; la raison varie : « No such file or directory » pour un fichier absent, « Permission denied » pour un fichier illisible, et une erreur PEM d’OpenSSL lorsque le fichier existe mais n’est pas au format PEM.
Node.js start-up — NODE_EXTRA_CA_CERTS could not be read
Ce que cela signifie
Node.js a lu NODE_EXTRA_CA_CERTS au démarrage, mais n’a pas pu charger le fichier indiqué : il démarre donc sans vos certificats d’AC supplémentaires. Le processus ne s’arrête pas ; les connexions qui avaient besoin de ces certificats échouent plus tard avec « unable to get local issuer certificate » ou « self-signed certificate in certificate chain ». La raison OpenSSL qui suit « load failed: » en donne la cause.
Pourquoi cela se produit
Le chemin existe sur l’hôte, mais pas là où Node.js s’exécute
fréquenteLa variable a été copiée dans un Dockerfile, une configuration de CI ou un devcontainer, alors que le fichier de certificat est resté sur la machine de développement ; dans le conteneur ou le runner, le chemin n’existe pas.
Un chemin relatif ou un ~ non développé
fréquenteDes valeurs comme ./certs/ca.pem sont résolues à partir du répertoire de travail courant du processus, et « ~/certs/ca.pem » dans un fichier .env ou une unité systemd n’est développé par aucun shell.
Fichier illisible ou mauvais format
occasionnelleUn certificat exporté depuis Windows au format DER (.cer), un fichier lisible uniquement par root, ou un fichier contenant autre chose que des certificats PEM.
Comment corriger l’erreur
- 1.
Vérifier le fichier désigné par la variable
Assurez-vous que le chemin existe pour l’utilisateur qui exécute Node.js et qu’openssl peut le lire comme certificat PEM.
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.
Conteneurs : livrer le fichier avec la variable
Copiez le certificat de l’AC dans l’image (ou montez-le) au chemin indiqué par la variable.
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.
Utiliser un chemin absolu
Développez le chemin au moment de définir la variable, pour qu’il ne dépende ni du répertoire de travail ni du développement effectué par le shell.
bash # Absolute path, expanded by the shell before node starts export NODE_EXTRA_CA_CERTS="$HOME/certs/corp-root-ca.pem" - 4.
Convertir le DER en PEM
NODE_EXTRA_CA_CERTS attend du PEM. Convertissez les exports binaires avec openssl x509 -inform der ; plusieurs certificats peuvent être concaténés dans un même fichier PEM.
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