Pular para o conteúdo
ecdsa.com
GNU Wget built with GnuTLS (Debian)curl

Mensagem de erro

ERROR: The certificate of 'api.example.com' has expired.

Builds do wget com GnuTLS imprimem esta linha depois da genérica “ERROR: The certificate of '<host>' is not trusted.” e antes de “The certificate has expired”. Builds com OpenSSL imprimem “ERROR: cannot verify <host>'s certificate, issued by '…':” seguido de “Issued certificate has expired.”

O que significa

O certificado do servidor (ou outro certificado da cadeia dele) já passou da data notAfter segundo o relógio desta máquina, e o backend GnuTLS do wget recusa a conexão. A CA é confiável; o problema é só o período de validade. O wget sai com o código de saída 5.

Por que acontece

Como corrigir

  1. 1.

    Verificar as datas do certificado realmente servido

    Compare o notAfter com a hora UTC atual. Se o certificado servido for o antigo, mas já existir um mais novo, o servidor ainda não o carregou.

    bash
    echo | openssl s_client -connect api.example.com:443 -servername api.example.com 2>/dev/null \
      | openssl x509 -noout -subject -startdate -enddate
  2. 2.

    Renovar e recarregar

    Renove pelo seu cliente ACME ou pela sua CA e depois recarregue todos os serviços que fazem a terminação TLS desse nome; automatize as duas etapas para que a próxima renovação não dependa de alguém se lembrar.

    bash
    sudo certbot renew --cert-name api.example.com
    sudo systemctl reload nginx     # or apache2 / haproxy: reload whatever terminates TLS
  3. 3.

    Corrigir a hora do cliente

    Se o certificado for válido quando verificado de outra máquina, ative o NTP na máquina com falha.

    bash
    date -u
    timedatectl status
    sudo timedatectl set-ntp true

Erros relacionados

Ver toda a base de erros de assinatura