Sécurité

Certificato SSL/TLS: Gestire la scadenza

Evitare la scadenza del certificato SSL/TLS. Monitoraggio automatico, rinnovo e troubleshooting per siti italiani.

22 mars 20263 min de lectureWarDek Team

Un certificato SSL scaduto blocca l'accesso al vostro sito con un avviso di sicurezza spaventoso per gli utenti. Google Chrome mostra "La connessione non è privata" e i visitatori se ne vanno. Il danno è immediato: perdita di traffico, calo del ranking SEO e perdita di fiducia dei clienti.

Perché i certificati scadono

I certificati SSL/TLS hanno una durata limitata per ragioni di sicurezza:

TipoDurata tipicaEmittente
Let's Encrypt90 giorniAutomatizzabile con certbot
DV (Domain Validation)1 annoDigiCert, Sectigo, GlobalSign
OV (Organization Validation)1-2 anniDigiCert, Sectigo
EV (Extended Validation)1 annoDigiCert, Sectigo

La tendenza è verso durate sempre più brevi — Apple e Google spingono per certificati di 90 giorni massimo.

Verificare il certificato attuale

Da browser

Cliccate sul lucchetto nella barra degli indirizzi → "Certificato" → verificate la data di scadenza.

Da terminale

# Verifica scadenza
echo | openssl s_client -servername vostro-sito.it -connect vostro-sito.it:443 2>/dev/null | openssl x509 -noout -dates

# Output:
# notBefore=Jan 15 00:00:00 2026 GMT
# notAfter=Apr 15 23:59:59 2026 GMT

Verifica completa

# Dettagli certificato
echo | openssl s_client -servername vostro-sito.it -connect vostro-sito.it:443 2>/dev/null | openssl x509 -noout -text | grep -E "Subject:|Issuer:|Not Before:|Not After:"

Configurare il rinnovo automatico

Let's Encrypt con Certbot

La soluzione più diffusa e gratuita:

# Installazione
sudo apt install certbot python3-certbot-nginx

# Primo certificato
sudo certbot --nginx -d vostro-sito.it -d www.vostro-sito.it

# Verifica rinnovo automatico
sudo certbot renew --dry-run

# Il cron job è configurato automaticamente in:
# /etc/cron.d/certbot
# oppure
# systemctl list-timers | grep certbot

Rinnovo con Docker

Se usate Docker con un reverse proxy:

# docker-compose.yml con Traefik
services:
  traefik:
    image: traefik:v3
    command:
      - "--certificatesresolvers.letsencrypt.acme.email=admin@vostro-sito.it"
      - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
      - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
    volumes:
      - "./letsencrypt:/letsencrypt"

Cloudflare

Se usate Cloudflare come CDN, i certificati sono gestiti automaticamente. Verificate:

  • SSL/TLS → Modalità "Full (strict)"
  • Edge Certificates → Rinnovo automatico attivo
  • Origin Server → Certificate valido

Monitoraggio della scadenza

Script di monitoraggio

#!/bin/bash
# check-ssl.sh — Verifica scadenza certificato

DOMAIN="vostro-sito.it"
DAYS_WARNING=30

EXPIRY=$(echo | openssl s_client -servername $DOMAIN -connect $DOMAIN:443 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
EXPIRY_EPOCH=$(date -d "$EXPIRY" +%s)
NOW_EPOCH=$(date +%s)
DAYS_LEFT=$(( (EXPIRY_EPOCH - NOW_EPOCH) / 86400 ))

if [ $DAYS_LEFT -lt $DAYS_WARNING ]; then
  echo "ALLARME: Il certificato di $DOMAIN scade tra $DAYS_LEFT giorni!"
  # Inviare notifica (email, Telegram, Slack)
fi

Servizi di monitoraggio

ServizioTipoPrezzo
UptimeRobotMonitoraggio uptime + SSLGratuito (base)
Better UptimeMonitoraggio + SSL + pagina di statoGratuito (base)
SSL LabsTest approfondito della configurazioneGratuito
WarDek ScannerScansione completa sicurezza + SSLGratuito (piano base)

Troubleshooting: certificato scaduto

Sintomi

  • Browser mostra "NET::ERR_CERT_DATE_INVALID"
  • HTTPS non funziona, HTTP redirect in loop
  • Google rimuove le pagine dall'indice
  • Webhook e API di terze parti falliscono

Azioni immediate

  1. Verificare lo stato del certificato con OpenSSL
  2. Rinnovare manualmente: sudo certbot renew --force-renewal
  3. Riavviare il web server: sudo systemctl reload nginx
  4. Verificare che il sito funzioni
  5. Controllare i log di certbot: sudo journalctl -u certbot

Cause comuni di mancato rinnovo

CausaSoluzione
Cron job disabilitatoVerificare systemctl status certbot.timer
Porta 80 bloccataLet's Encrypt necessita la porta 80 per la validazione HTTP
DNS non aggiornatoIl dominio deve puntare al server corretto
Firewall troppo restrittivoPermettere il traffico da Let's Encrypt
Spazio disco pienoLiberare spazio e rilanciare il rinnovo

Best practice per la configurazione TLS

Versioni TLS supportate

# Nginx
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;

TLS 1.0 e 1.1 sono deprecati e non devono essere utilizzati. TLS 1.2 è il minimo, TLS 1.3 è raccomandato.

Suite crittografiche

ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';

HSTS

Dopo aver verificato che HTTPS funziona correttamente:

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload

OCSP Stapling

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;

Impatto SEO di un certificato scaduto

Google tratta HTTPS come fattore di ranking. Un certificato scaduto:

  • Blocca l'indicizzazione delle nuove pagine
  • Degrada il ranking delle pagine esistenti
  • Aumenta il bounce rate (utenti spaventati dall'avviso)
  • Interrompe il tracking analytics (GA non funziona senza HTTPS)

Il recupero dopo un certificato scaduto può richiedere settimane di re-indicizzazione.

Conclusione

Un certificato SSL scaduto è un incidente di sicurezza evitabile al 100%. Automatizzate il rinnovo con Let's Encrypt, configurate il monitoraggio e non dovrete mai più affrontare l'emergenza di un certificato scaduto in produzione.


Scansiona il tuo sito web gratis con WarDek — OWASP, NIS2, GDPR, AI Act in un'unica scansione.

#ssl#tls#certificato#scadenza#https

Scannez votre site gratuitement

WarDek détecte les vulnérabilités mentionnées dans cet article en quelques secondes.