Mensagem de erro
Warning: Ignoring extra certs from `/etc/ssl/private-ca/corp-root-ca.pem`, load failed: error:80000002:system library::No such file or directory
O caminho é o valor da sua variável; o motivo varia: “No such file or directory” para um arquivo inexistente, “Permission denied” para um arquivo sem permissão de leitura e um erro PEM do OpenSSL quando o arquivo existe, mas não está no formato PEM.
Node.js start-up — NODE_EXTRA_CA_CERTS could not be read
O que significa
O Node.js leu NODE_EXTRA_CA_CERTS na inicialização, mas não conseguiu carregar o arquivo indicado, por isso inicia sem os seus certificados de CA extras. O processo não para; as conexões que precisavam desses certificados falham depois com “unable to get local issuer certificate” ou “self-signed certificate in certificate chain”. O motivo informado pelo OpenSSL depois de “load failed:” explica por quê.
Por que acontece
O caminho existe no host, mas não onde o Node.js roda
comumA variável foi copiada para um Dockerfile, uma configuração de CI ou um devcontainer, mas o arquivo do certificado ficou na máquina do desenvolvedor; dentro do contêiner ou do runner, o caminho não existe.
Um caminho relativo ou um ~ não expandido
comumValores como ./certs/ca.pem são resolvidos a partir do diretório de trabalho atual do processo, e “~/certs/ca.pem” em um arquivo .env ou em uma unidade do systemd não é expandido por nenhum shell.
Arquivo sem permissão de leitura ou no formato errado
ocasionalUm certificado exportado do Windows como DER (.cer), um arquivo que só o root pode ler ou um arquivo com outra coisa que não certificados PEM.
Como corrigir
- 1.
Verificar o arquivo para o qual a variável aponta
Confirme que o caminho existe para o usuário que executa o Node.js e que o openssl consegue lê-lo como um 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.
Contêineres: levar o arquivo junto com a variável
Copie o certificado da CA para a imagem (ou monte-o) no mesmo caminho que a variável indica.
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 um caminho absoluto
Expanda o caminho ao definir a variável, para que ele não dependa do diretório de trabalho nem da expansão do shell.
bash # Absolute path, expanded by the shell before node starts export NODE_EXTRA_CA_CERTS="$HOME/certs/corp-root-ca.pem" - 4.
Converter DER para PEM
NODE_EXTRA_CA_CERTS espera o formato PEM. Converta exportações binárias com openssl x509 -inform der; vários certificados podem ser concatenados em um único arquivo 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