Pular para o conteúdo
ecdsa.com
GNU Wget built with OpenSSL (Ubuntu 22.04+, Alpine, RHEL/CentOS)curl

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

Como corrigir

  1. 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. 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. 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. 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. 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

Ver toda a base de erros de assinatura