Mensagem de erro
invalid peer certificate: certificate expired: verification time
Forma completa: “invalid peer certificate: certificate expired: verification time <unix> (UNIX), but certificate is not valid after <unix> (<n> seconds ago)”. Versões anteriores do rustls imprimiam só o nome da variante (“invalid peer certificate: Expired”). Certificados que ainda não são válidos produzem uma variante separada, “not valid yet”.
rustls 0.23 (via reqwest, ureq, hyper-rustls) — CertificateError::ExpiredContext
O que significa
O rustls verificou a cadeia, mas um certificado dela já passou da data notAfter no momento da verificação. O rustls 0.23 informa os dois instantes como timestamps Unix e há quantos segundos o certificado expirou, o que mostra na hora se o errado é o certificado ou o relógio.
Por que acontece
O certificado do servidor expirou
comumA renovação falhou, ou o servidor ainda não apresenta o certificado renovado.
O relógio do cliente está errado
ocasionalDispositivos embarcados e contêineres em hosts sem NTP podem estar com o horário muito errado; compare o horário da verificação na mensagem com a hora real.
Um certificado expirado fixado como âncora de confiança
raraClientes que adicionam o próprio certificado do servidor como raiz continuam validando com base nesse certificado antigo depois que o servidor fez a renovação.
Como corrigir
- 1.
Converter os timestamps
date -u -d @<seconds> converte os dois valores em horários UTC legíveis.
bash # The message gives both instants as Unix seconds date -u -d @1743465600 # certificate's notAfter date -u # this machine's time - 2.
Renovar e implantar de novo
Renove o certificado do servidor, recarregue o serviço e confirme a nova data de término pelo lado da rede.
bash echo | openssl s_client -connect api.example.com:443 -servername api.example.com 2>/dev/null | openssl x509 -noout -enddate sudo certbot renew && sudo systemctl reload nginx