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:

| Tipo | Durata tipica | Emittente | |------|---------------|-----------| | Let's Encrypt | 90 giorni | Automatizzabile con certbot | | DV (Domain Validation) | 1 anno | DigiCert, Sectigo, GlobalSign | | OV (Organization Validation) | 1-2 anni | DigiCert, Sectigo | | EV (Extended Validation) | 1 anno | DigiCert, 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:

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

| Servizio | Tipo | Prezzo | |----------|------|--------| | UptimeRobot | Monitoraggio uptime + SSL | Gratuito (base) | | Better Uptime | Monitoraggio + SSL + pagina di stato | Gratuito (base) | | SSL Labs | Test approfondito della configurazione | Gratuito | | WarDek Scanner | Scansione completa sicurezza + SSL | Gratuito (piano base) |

Troubleshooting: certificato scaduto

Sintomi

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

| Causa | Soluzione | |-------|----------| | Cron job disabilitato | Verificare systemctl status certbot.timer | | Porta 80 bloccata | Let's Encrypt necessita la porta 80 per la validazione HTTP | | DNS non aggiornato | Il dominio deve puntare al server corretto | | Firewall troppo restrittivo | Permettere il traffico da Let's Encrypt | | Spazio disco pieno | Liberare 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:

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.

Retour à Sécurité