Mensaje de error
Warning: Ignoring extra certs from `/etc/ssl/private-ca/corp-root-ca.pem`, load failed: error:80000002:system library::No such file or directory
La ruta es el valor de tu variable; el motivo varía: «No such file or directory» si el archivo no existe, «Permission denied» si no se puede leer y un error PEM de OpenSSL si el archivo existe, pero no está en formato PEM.
Node.js start-up — NODE_EXTRA_CA_CERTS could not be read
Qué significa
Node.js leyó NODE_EXTRA_CA_CERTS al arrancar, pero no pudo cargar el archivo que indica, así que arranca sin tus certificados de CA adicionales. El proceso no se detiene; las conexiones que necesitaban esos certificados fallan más tarde con «unable to get local issuer certificate» o «self-signed certificate in certificate chain». El motivo de OpenSSL que sigue a «load failed:» te dice por qué.
Por qué ocurre
La ruta existe en el host, pero no donde se ejecuta Node.js
frecuenteLa variable se copió en un Dockerfile, en una configuración de CI o en un devcontainer, mientras que el archivo del certificado se quedó en el equipo del desarrollador; dentro del contenedor o del runner, la ruta no existe.
Una ruta relativa o un ~ sin expandir
frecuenteValores como ./certs/ca.pem se resuelven a partir del directorio de trabajo actual del proceso, y ninguna shell expande «~/certs/ca.pem» en un archivo .env o en una unidad de systemd.
Archivo que no se puede leer o con un formato incorrecto
ocasionalUn certificado exportado desde Windows como DER (.cer), un archivo que solo puede leer root o un archivo que contiene algo distinto de certificados PEM.
Cómo solucionarlo
- 1.
Comprobar el archivo al que apunta la variable
Confirma que la ruta existe para el usuario que ejecuta Node.js y que openssl puede leer el archivo como un certificado 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.
Contenedores: incluir el archivo junto con la variable
Copia el certificado de la CA en la imagen (o móntalo) en la misma ruta que indica 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.
Usar una ruta absoluta
Expande la ruta al definir la variable, para que no dependa del directorio de trabajo ni de la expansión de la shell.
bash # Absolute path, expanded by the shell before node starts export NODE_EXTRA_CA_CERTS="$HOME/certs/corp-root-ca.pem" - 4.
Convertir DER a PEM
NODE_EXTRA_CA_CERTS espera PEM. Convierte las exportaciones binarias con openssl x509 -inform der; se pueden concatenar varios certificados en un solo archivo 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