Come noto, HTTPS è uno standard che garantisce la sicurezza nella comunicazione tra un sito web e il browser del visitatore, tramite una connessione criptata, che funziona grazie al certificato di sicurezza del sito.
Tuttavia, esiste la possibilità che la comunicazione avvenga anche con canale HTTP, ad esempio prima del Redirect in HTTPS oppure per un attacco che ne forza il downgrade.
Se vogliamo indicare al browser che il sito deve essere accessibile solo in HTTPS possiamo fare una dichiarazione HTTP Strict Transport Security o HSTS nel web server, ad esempio per il web server Apache:
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
Che indica sostanzialmente che Strict-Transport-Security è attivo e che questa direttiva "vale" per un valore di max-age (1 anno espresso in secondi) dopo la prima richiesta.
Attenzione: implementare HSTS su siti esistenti è una operazione delicata perché di fatto impedisce ai browser di accedere a delle risorse in
http://
dopo un primo accesso, si consiglia quindi di iniziare con un valore dimax-age
dapprima basso (per poter porre rimedio in caso di problemi).
Ma se è la prima volta che il nostro browser accede al sito? Come fa a stabilire una comunicazione esclusivamente in HTTPS? Probabilmente potrebbe tentare HTTP per poi fare un redirect. Esiste una soluzione anche per questo.
HSTS preload list
Supponendo che un sito rispetti i seguenti requisiti:
- dispone di un certificato valido
- effettua redirect da HTTP a HTTPS sullo stesso server (solo se risponde sulla porta 80/tcp)
- tutti gli eventuali sottodomini sono serviti in HTTPS
- il web server implementa HSTS con attributi minimi richiesti
Il gestore del sito può validare e sottoporre il sito tramite:
Effettuato il Sumbit, i maggiori browser (Chrome, Firefox, Opera, Safari, IE 11 and Edge) incorporeranno l'indirizzo in modo da sapere a priori che il sito in questione dovrà essere accessibile solo in HTTPS: senza se e senza ma, anche se è la prima volta che si accede a quel sito, inclusi tutti i sottodomini.