Mensagem de erro
x509: certificate has expired or is not yet valid: current time 2026-08-20T15:47:41+03:00 is after 2026-08-19T12:47:41Z
Os dois timestamps são preenchidos a cada falha: o relógio de quem verifica e o limite do certificado. “is after” significa expirado; “is before” significa ainda não válido.
Go crypto/x509 — CertificateInvalidError (Expired)
O que significa
O momento da verificação fica fora da janela [NotBefore, NotAfter] do certificado. O Go informa os dois lados da comparação na mensagem, o que faz deste um dos poucos erros que trazem o próprio diagnóstico: leia os dois timestamps e veja qual está errado — o do certificado ou o do relógio.
Por que acontece
A automação da renovação parou de funcionar
comumUm timer do certbot que parou, uma conta ACME que perdeu a autorização ou um balanceador de carga que serve um certificado antigo depois que a renovação deu certo em outro lugar. Com a vida útil máxima dos certificados públicos diminuindo para 47 dias até 2029, a renovação manual deixou de ser viável.
O relógio da máquina que verifica está errado
comumFalhas com “is before” em dispositivos recém-iniciados (Raspberry Pi sem RTC, VMs restauradas de snapshots, hardware de IoT) geralmente significam que o relógio marca 1970 ou o mês passado — e então todo certificado atual parece ainda não válido ou expirado.
Desvio de relógio no limite da validade
ocasionalUm certificado emitido há poucos segundos (NotBefore = agora) e verificado por um host com o relógio um minuto atrasado falha como ainda não válido; com os certificados de curta duração de uma mesh, é fácil cair nessa janela.
Como corrigir
- 1.
Ler as datas reais do certificado servido
Confirme qual certificado o endpoint serve neste momento — depois de uma renovação, “expired” muitas vezes significa “o certificado novo existe, mas não está sendo servido”. Recarregue ou reinicie o proxy que faz a terminação TLS se as datas no disco e na rede forem diferentes.
bash echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \ | openssl x509 -noout -dates # notBefore=... notAfter=... - 2.
Corrigir e monitorar a sincronização de horário
Nos casos de “is before”, acerte o relógio e mantenha-o certo; a validação de certificados só é tão confiável quanto a hora local.
bash timedatectl status # NTP active? sudo timedatectl set-ntp true - 3.
Automatizar a renovação e alertar sobre a vida útil restante
Renove aos 2/3 da vida útil (o padrão do certbot) e monitore a expiração de fora do host. Nosso health check de assinaturas do domínio (Signature Health) avalia exatamente isso — cadeia, datas e as novas regras de vida útil reduzida — com alertas de expiração gratuitos.