Che cos'è HSTS e come si imposta?

0
224
Shutterstock/Pavel Ignatov

HTTPS è molto sicuro, ma ha un difetto: non è attivo per impostazione predefinita. Un utente malintenzionato nel mezzo potrebbe dirottare la connessione di un utente prima che tu possa dirgli di utilizzare HTTPS. HSTS risolve questo problema e abilita HTTPS a livello di sito.

Avere la crittografia SSL in primo luogo è un prerequisito per HSTS, perché altrimenti l'abilitazione di HSTS renderà il tuo sito inaccessibile. Puoi leggere la nostra guida sulla configurazione di certificati SSL gratuiti con LetsEncrypt per abilitare HTTPS sul tuo sito web.

Come funziona HSTS?

HSTS sta per HTTP Strict Transport Security e regola il modo in cui il browser di un utente deve connettersi al tuo sito web.

Ecco come funziona di solito la connessione al tuo sito. Un utente desidera connettersi al tuo sito Web e invia al tuo server una richiesta di connessione. Il tuo server fa la cosa responsabile e invia una risposta 301 Moved Permanently al browser, dicendogli che l'indirizzo HTTP richiesto deve essere reindirizzato a HTTPS. L'utente continua normalmente, navigando in sicurezza.

Tuttavia, un utente malintenzionato con il controllo della connessione (come nel caso degli attacchi man-in-the-middle) potrebbe facilmente bloccare la risposta 301 e assumere il controllo della sessione di navigazione di quell'utente. Questo è un grosso problema, in quanto vanifica in primo luogo lo scopo di crittografare il sito.

Pubblicità

Con HSTS abilitato, il server invia la stessa risposta 301 Moved Permanently, ma invia anche un'intestazione che dice “Ehi, non supporto HTTP. Non provare nemmeno a fare più richieste HTTP, perché le reindirizzerò tutte.” Il browser riceve il messaggio e si reindirizzerà a HTTPS prima di inviare qualsiasi cosa. Questo assicura che il tuo sito sia completamente HTTPS, per impostazione predefinita, sempre.

Precaricamento HSTS

Tuttavia, HSTS standard ne ha uno difetto principale: la prima connessione che un utente effettua è ancora insicura. Se un utente ha già utilizzato il tuo sito, in futuro il browser rispetterà la richiesta HSTS. Ma la risposta HSTS iniziale non è sicura, quindi se un utente sta navigando in un bar e apre il tuo sito per la prima volta (o, per la prima volta su un dispositivo mobile), la sua connessione può comunque essere dirottata.

Il precaricamento HSTS è un'iniziativa del progetto Chromium per risolvere questo problema. Il progetto Chromium mantiene un elenco di siti Web che sono sempre abilitati per HSTS. Questo elenco è integrato nella maggior parte dei browser principali e il browser lo verifica prima di effettuare richieste a nuovi siti.

Se sei nell'elenco, anche se un utente non ha mai interagito con il tuo sito prima, l'utente si comporterà come se avesse già visto la tua intestazione HSTS e non comunicherà mai con HTTP. Ciò rende la connessione completamente sicura fin dall'inizio.

Abilitazione di HSTS e adesione all'elenco di precaricamento

HSTS può essere attivato con un intestazione semplice, che viene aggiunta a tutte le risposte inviate dal server:

Strict-Transport-Security: max-age=300; includeSottodomini; preload

Puoi includerlo nel file di configurazione del tuo server web. Ad esempio, in Nginx, puoi impostare l'intestazione includendo una riga add_header nel blocco del server:

add_header Strict-Transport-Security 'max-age=300; includeSottodomini; precarico; sempre;' Pubblicità

E per Apache, il comando è simile, utilizzando la riga Header sempre imposta:

Header imposta sempre Strict-Transport-Security “max-age=300; includeSubDomains; preload”

Tuttavia , ci sono ancora alcuni passaggi per assicurarti che tutto funzioni correttamente e per essere idoneo per il precaricamento.

Innanzitutto, assicurati di reindirizzare tutte le richieste HTTP a HTTPS. Su Nginx, puoi farlo ascoltando tutte le richieste della porta 80 (HTTP) e inviando una richiesta 301 con l'URL modificato nell'equivalente HTTPS:

server { listen 80; restituisce 301 https://$host$request_uri; }

Per qualificarti per il precaricamento, devi anche assicurarti che tutti i tuoi sottodomini siano coperti dal tuo certificato SSL e che li stai servendo tramite HTTPS. Puoi farlo con un certificato jolly, che puoi ottenere gratuitamente da LetsEncrypt. Se non stai effettuando il precaricamento, questo non è necessario ma è comunque consigliabile.

Puoi verificare se HSTS funziona correttamente caricando il tuo sito con l'intestazione abilitata, quindi andando su chrome://net-internals/#hsts e inserendo il nome del tuo sito nel “Dominio Query HSTS/PKP” strumento di ricerca. Se il tuo sito visualizza un output come questo, HSTS è abilitato.

Inoltre, dovresti controllare se l'intestazione strict-transport-security è inclusa nelle intestazioni di risposta del tuo sito, cosa che puoi fare dalla scheda Rete nella console di sviluppo di Chrome:

Pubblicità

Una volta che hai fatto tutto questo, dovresti verificare che tutto funzioni, e che nulla si è rotto quando hai attivato HSTS. Se non ci sono problemi, puoi andare alla pagina di invio del precaricamento, inserire il tuo nome di dominio e inviare il tuo sito web.

Problemi con HSTS e Precaricamento HSTS

Con HSTS, il tuo sito è ora costretto a utilizzare HTTPS per tutto. Ciò include ogni sottodominio, anche gli strumenti interni. Ogni sottodominio che possiedi deve avere un certificato SSL valido ed essere protetto con HTTPS, altrimenti sarà inaccessibile per la durata dell'intestazione HSTS (che può essere fino a due anni). Se disponi di un certificato con caratteri jolly, puoi risolvere alcuni di questi problemi, ma devi eseguire dei test prima di abilitarlo per un lungo periodo di tempo.

Il problema principale con il precaricamento HSTS è che è molto permanente. L'età massima è di un anno e, una volta che il tuo sito è stato inserito nell'elenco, non puoi uscire dall'elenco senza passare attraverso un lungo processo di rimozione che richiede a ciascun utente di eseguire un aggiornamento del browser per applicare le modifiche.

Puoi dare un'occhiata a questo meta-buglist di richieste di rimozione per vedere quali sono i problemi principali in pratica. Uber ha avuto problemi con i sottodomini. I sottodomini di terzo e livello superiore potrebbero non essere supportati dalle normali certificazioni con caratteri jolly. Un sito web svedese riporta addirittura entrate pubblicitarie significativamente inferiori, poiché gli inserzionisti locali non caricano le proprie risorse su HTTPS e HSTS blocca ogni richiesta HTTP non sicura effettuata mentre l'utente è connesso al tuo sito web.

Il modo migliore per evitare questi problemi è implementare HSTS in più fasi prima di passare in modo permanente al precarico. Il progetto Chromium consiglia di eseguire test a intervalli impostando il valore max-age prima di cinque minuti per verificare che funzioni:

max-age=300; includeSubDomains

Poi a una settimana per un test più lungo:

max-age=604800; includeSubDomains

Poi per un mese, finché non sei sicuro che non ci siano problemi.:

max-age=2592000; includeSubDomains Advertisement

Se qualcosa va storto e imposti una proprietà di età massima molto lunga, puoi cancellare il flag locale dalla pagina net-internals di Chrome.

Una volta che hai 8217;sicuro che nulla andrà storto con solo HTTPS sempre attivo, puoi impostare la tua età massima su due anni, aggiungere la direttiva sul precaricamento e inviare il tuo sito per il precaricamento.