Mensagem de erro
ERROR: cannot verify api.example.com's certificate, issued by 'CN=Example Private CA':
Também aparece como
- Unable to locally verify the issuer's authority.
O nome do host e o nome distinto do emissor mudam de um site para outro. Builds do wget com GnuTLS (Debian) relatam a mesma falha como “ERROR: The certificate of '<host>' is not trusted.”
O que significa
O backend OpenSSL do wget não conseguiu verificar o certificado do servidor, cujo emissor aparece entre aspas depois de “issued by”. A linha recuada que o wget imprime em seguida traz o motivo informado pelo OpenSSL; “Unable to locally verify the issuer's authority” significa que o emissor não está no bundle de CAs local e que o servidor não enviou um certificado que leve a uma delas. O wget sai com o código de saída 5.
Por que acontece
O emissor é uma CA privada ou da empresa
comumSe o emissor citado for a CA da sua organização ou a de uma ferramenta, como a CA do Kubernetes ou do Vault, a raiz dele não está no bundle público desta máquina.
O servidor não envia o intermediário
comumSe o emissor for um intermediário público (“R13”, “GTS CA 1C3”, “Sectigo RSA Domain Validation…”), o servidor não o enviou; sem ele, o OpenSSL não consegue ligar o certificado folha a uma raiz confiável.
Um proxy com inspeção de TLS emitiu o certificado
ocasionalUm nome de emissor que pertence a um fornecedor de segurança ou à sua empresa, em um site público, significa que um proxy está reassinando o tráfego. A raiz desse proxy precisa estar instalada na máquina que executa o wget.
O bundle de CAs está desatualizado
raraSistemas que não atualizam o ca-certificates há anos podem não ter as raízes em que terminam as cadeias dos certificados públicos mais novos.
Como corrigir
- 1.
Ler a linha recuada com o motivo
A linha abaixo do ERROR diz qual das verificações do OpenSSL falhou e, portanto, se é preciso corrigir a confiança, a cadeia do servidor ou as datas.
text ERROR: cannot verify api.example.com's certificate, issued by 'CN=Example Private CA': Unable to locally verify the issuer's authority. <- issuer unknown: CA or chain problem Self-signed certificate encountered. <- server certificate is self-signed Issued certificate has expired. <- date problem - 2.
Apontar o wget para a CA
Passe a raiz (ou um bundle) com --ca-certificate, ou defina ca_certificate em ~/.wgetrc ou /etc/wgetrc.
bash wget --ca-certificate=/opt/certs/corp-root-ca.pem https://api.example.com/ echo 'ca_certificate = /opt/certs/corp-root-ca.pem' >> ~/.wgetrc - 3.
Instalar a raiz no bundle do sistema
O wget baseado em OpenSSL lê o bundle da distribuição, então adicionar a raiz ali corrige de uma vez o wget, o curl e a maioria das outras ferramentas da máquina.
bash # Ubuntu / Alpine sudo cp corp-root-ca.pem /usr/local/share/ca-certificates/corp-root-ca.crt && sudo update-ca-certificates # RHEL / Fedora sudo cp corp-root-ca.pem /etc/pki/ca-trust/source/anchors/ && sudo update-ca-trust - 4.
Donos do servidor: servir a cadeia completa
Quando o emissor for um intermediário público, configure o servidor com o certificado folha seguido dos certificados intermediários.
bash # Server side: serve leaf + intermediates cat api.example.com.crt intermediate.crt > fullchain.pem - 5.
Diagnóstico temporário: pular a verificação uma única vez
O --no-check-certificate confirma se, fora isso, o download funcionaria. Ele aceita qualquer certificado, inclusive o de um atacante, então não o use para nada que você vá executar ou em que vá confiar.
bash # Diagnostic only wget --no-check-certificate -O /dev/null https://api.example.com/
Erros relacionados
ERROR: The certificate of 'api.example.com' is not trusted.GNU Wget built with GnuTLS (Debian, Ubuntu before 22.04 used it too)curl: (60) SSL certificate problem: unable to get local issuer certificatecurl (OpenSSL backend)verify error:num=20:unable to get local issuer certificateOpenSSL CLI (openssl s_client / openssl verify)