Cos'è HSTS
HTTP Strict Transport Security (HSTS) è un'header HTTP che istruisce il browser a comunicare con il sito esclusivamente via HTTPS per un periodo di tempo specificato. Una volta ricevuto l'header e memorizzato dal browser, qualsiasi successivo tentativo di connessione HTTP viene convertito automaticamente in HTTPS, anche se l'utente digita esplicitamente http://.
Perché serve oltre al redirect 301
Il redirect HTTP→HTTPS lato server è il primo passo, ma lascia una finestra di vulnerabilità: la prima connessione HTTP iniziale può essere intercettata da un'attacco MITM (SSL Stripping) prima che il redirect venga seguito. HSTS chiude questa finestra: dopo la prima visita riuscita, il browser non parlerà più con il sito in chiaro, indipendentemente da cosa l'utente o un'attaccante facciano.
Sintassi dell'header
L'header HSTS ha tre direttive:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
- max-age: durata in secondi della politica HSTS. 31536000 = 1 anno, valore standard
- includeSubDomains: estende la politica a tutti i sottodomini
- preload: dichiara l'intenzione di iscriversi alla lista preload dei browser
Configurazione su Nginx
Nel blocco server HTTPS:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Importante: aggiungi always, altrimenti l'header non viene incluso in alcune risposte di errore. Non inserire HSTS nel blocco HTTP, sarebbe inutile e ignorato dal browser.
Configurazione su Apache
Nel VirtualHost HTTPS (richiede mod_headers):
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Configurazione su IIS
In web.config, sezione <system.webServer>:
<httpProtocol>
<customHeaders>
<add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains" />
</customHeaders>
</httpProtocol>
Rollout sicuro
Una volta che il browser memorizza HSTS, NON puoi tornare indietro: se HTTPS smette di funzionare, il sito è inaccessibile per gli utenti recidivi finché il max-age non scade. Per evitare disastri, segui un rollout graduale:
- Verifica che HTTPS funzioni perfettamente su tutto il sito
- Imposta
max-age=300(5 minuti) e monitora - Sali a
max-age=86400(1 giorno) per una settimana - Aggiungi
includeSubDomainssolo dopo aver verificato che TUTTI i sottodomini abbiano HTTPS - Porta
max-agea 31536000 (1 anno) quando sei sicuro - Aggiungi
preloadsolo per ultimo, quando vuoi iscriverti alla lista
Disabilitare HSTS
Per revocare HSTS prima della scadenza naturale, imposta max-age=0. Il browser lo memorizzerà come revoca e tornerà ad accettare HTTP. Però gli utenti che non visitano nel frattempo manterranno la vecchia regola.
Verifica il setup
Strumenti utili per testare la configurazione: SSL Labs Server Test mostra HSTS nei dettagli, hstspreload.org verifica l'idoneità alla preload list, securityheaders.com dà un voto complessivo agli header di sicurezza. Verifica anche con curl -I https://tuosito.it che l'header sia presente.
Hai bisogno di aiuto?
Se vuoi gestione SSL dal team di G Tech Group, scrivici tramite il modulo di contatto.