Come appare il messaggio
curl: (60) SSL certificate problem: certificate has expiredCause frequenti
- Il rinnovo automatico è fallito, ad es. porta 80 bloccata o DNS cambiato.
- Il certificato è stato rinnovato ma nginx, Postfix o Dovecot non sono stati ricaricati.
- Il timer o cron di certbot non esiste più, ad es. dopo una migrazione.
- Il certificato è stato copiato a mano e sta fuori da
/etc/letsencrypt/live. - L'orologio del client è sbagliato: anche un certificato valido sembra scaduto.
Verifica
- Mostra la validità del certificato effettivamente servito
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -dates - Mostra le scadenze dei certificati di certbot
certbot certificates 2>/dev/null | grep -E 'Certificate Name|Expiry' - Verifica che il timer di rinnovo sia attivo
systemctl list-timers | grep -i certbot - Prova il rinnovo senza ottenere certificati veri
certbot renew --dry-run
Soluzione
- Rinnova subito:
certbot renewe ricarica il servizio. - Rendi stabile il reload:
--deploy-hook 'systemctl reload nginx'o uno script in/etc/letsencrypt/renewal-hooks/deploy/. - Correggi gli errori di
certbot renew --dry-run, tipicamente firewall, DNS o vhost cambiati. - Monitora le scadenze: basta un avviso 14 giorni prima.
- Sui mail server ricorda che anche Postfix e Dovecot vanno ricaricati.
Domande frequenti
Perché il certificato è scaduto se certbot l'ha rinnovato?
Il servizio tiene il vecchio certificato in memoria. Senza reload nginx continua a servire il vecchio anche se il file su disco è nuovo.
Può scadere un certificato intermedio?
Sì. Se il server invia una catena vecchia, i client falliscono anche con un certificato server valido. Usa sempre la fullchain.pem attuale.