HSTS (HTTP Strict Transport Security, RFC 6797) è un meccanismo di sicurezza con cui un server web istruisce il browser a connettersi al sito esclusivamente tramite HTTPS — mai tramite HTTP in chiaro — per un periodo di tempo definito. È la difesa principale contro gli attacchi di SSL Stripping e i downgrade da HTTPS a HTTP, in cui un attaccante MitM intercetta la prima connessione HTTP (prima che il redirect a HTTPS avvenga) e sostituisce tutti i link HTTPS con HTTP, mantenendo la vittima su una connessione non cifrata senza che se ne accorga.
Funzionamento
Il server trasmette l’header HSTS nella risposta HTTPS:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
max-age: durata in secondi per cui il browser memorizza la policy (31.536.000 s = 1 anno). Durante questo periodo, qualsiasi tentativo di connessione HTTP viene convertito internamente dal browser in HTTPS prima di effettuare la richiesta — senza mai toccare la rete in chiaro.includeSubDomains: estende la policy a tutti i sottodomini del dominio corrente.preload: dichiara il consenso a essere inclusi nella HSTS Preload List (vedi sotto).
Il problema della prima visita
HSTS ha un limite strutturale: la policy viene appresa solo dalla prima connessione HTTPS riuscita. Se un utente visita il sito per la prima volta tramite HTTP (prima che il redirect avvenga), un attaccante MitM posizionato in quel momento può intercettare la connessione prima che il browser apprenda la policy HSTS. Questo è detto TOFU (Trust On First Use) problem.
HSTS Preload List
La soluzione è la HSTS Preload List: un database mantenuto da Google (hstspreload.org) di domini con HSTS abilitato, distribuito direttamente nel codice sorgente di Chrome, Firefox, Safari, Edge e Opera. I domini in lista sono accessibili solo via HTTPS sin dalla prima visita, eliminando il problema TOFU.
I requisiti per l’inclusione sono stringenti:
- HTTPS valido su tutti i sottodomini
- Header HSTS con
max-age≥ 1 anno,includeSubDomainsepreload - Nessun redirect HTTP su nessun sottodominio
L’inclusione è quasi irreversibile: rimuovere un dominio dalla lista richiede mesi di processo e un periodo di transizione durante cui il dominio deve essere raggiungibile via HTTP per gli utenti che hanno versioni di browser aggiornate ma non ancora aggiornate alla lista senza il dominio. È una decisione permanente da pianificare con cura.
HSTS e certificati scaduti
Con HSTS attivo, un certificato scaduto o non valido blocca completamente l’accesso al sito — il browser mostra un errore non bypassabile (a differenza dei normali warning HTTPS, che l’utente può ignorare cliccando «Continua»). Questo è intenzionale: con HSTS, l’utente non può essere indotto ad accettare un certificato fraudolento. La conseguenza operativa è che la gestione del rinnovo del certificato diventa critica — un’interruzione del certificato su un dominio HSTS causa downtime reale.
Relazione con altri meccanismi
HSTS non sostituisce DNSSEC — protegge il canale HTTP, non la risoluzione DNS. La catena di protezione completa richiede entrambi: DNSSEC garantisce che il DNS non sia avvelenato, HSTS garantisce che la connessione sia sempre cifrata. Analogamente, HSTS non sostituisce il certificate pinning: HSTS dice «usa sempre HTTPS», il pinning dice «usa HTTPS solo con questo specifico certificato».