HSTS Strict-Transport-Security: setup

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:

  1. Verifica che HTTPS funzioni perfettamente su tutto il sito
  2. Imposta max-age=300 (5 minuti) e monitora
  3. Sali a max-age=86400 (1 giorno) per una settimana
  4. Aggiungi includeSubDomains solo dopo aver verificato che TUTTI i sottodomini abbiano HTTPS
  5. Porta max-age a 31536000 (1 anno) quando sei sicuro
  6. Aggiungi preload solo 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.

Hai trovato utile quest'articolo?