UNA VISITA BEN PROTETTA

Certificato TLS e header di sicurezza HTTP: che cosa succede dietro HTTPS

Una visita in HTTPS mette insieme una connessione cifrata, un server identificabile e regole precise per il browser. Ecco il ruolo di ogni livello, dal certificato ai cookie, e come mantenerlo nel tempo.

Illustrazione concettuale: due torri collegate da un condotto trasparente avvolto da strati protettivi, con una forma a chiave a ciascuna estremità
Illustrazione concettuale

Immagina di prenotare un tavolo sul sito di un ristorante ipotetico. Apri la pagina, scegli l’orario, accedi al tuo account e confermi con un servizio di pagamento incorporato. Dietro questa visita lavorano più sistemi collegati, ma per te resta un’unica esperienza semplice.

TLS e header di sicurezza aiutano quei sistemi a collaborare. TLS stabilisce la connessione cifrata e permette al browser di verificare l’identità del server; gli header della risposta, cioè le intestazioni HTTP, danno al browser istruzioni su contenuti, cookie e visite successive.

Ambito di questa guida

Lo snapshot gratuito di Sitelemetry non è un penetration test. Da un solo handshake TLS ricava il protocollo negoziato, non le versioni e le suite supportate; degli header verifica soprattutto la presenza, nei cookie ignora SameSite e prova il redirect da HTTP a HTTPS solo se inserisci http://.

1. Che cosa fa il certificato durante una visita

Quando il browser si collega in HTTPS, TLS stabilisce un canale cifrato e il server presenta il proprio certificato. Il browser controlla che copra il nome richiesto, che sia nel periodo di validità e che risalga, attraverso la catena, a una CA (un’autorità che emette certificati) di cui si fida. Se uno di questi controlli fallisce, al posto della pagina compare un errore.

Fai l’elenco dei nomi pubblici: dominio principale, www e sottodomini di servizio come area clienti o assistenza. Per ognuno annota chi gestisce il certificato e come si rinnova. CDN e server di origine possono avere certificati distinti, con rinnovi separati: il visitatore vede quello della CDN, ma se la CDN si collega all’origine in HTTPS anche quel tratto usa un certificato che può scadere.

I rinnovi stanno diventando più frequenti. Secondo il calendario approvato dal CA/Browser Forum, i certificati pubblici emessi dal 15 marzo 2026 durano al massimo 200 giorni; il limite scende a 100 giorni dal 15 marzo 2027 e a 47 dal 15 marzo 2029. Let’s Encrypt, inoltre, ha smesso di inviare le email di avviso di scadenza nel giugno 2025. Conviene quindi affidarsi al rinnovo automatico e affiancargli un controllo indipendente della scadenza, che avvisi se il rinnovo non è avvenuto.

Sul protocollo, le linee guida dell’ACN su TLS (versione 2.0, maggio 2026) considerano obsolete tutte le versioni di SSL e TLS 1.0 e 1.1 e raccomandano TLS 1.3 e TLS 1.2, con preferenza per la prima; per TLS 1.2 ammettono solo un elenco ristretto di suite crittografiche, perché molte di quelle previste dal protocollo sono oggi considerate insicure. La guida TLS di OWASP aiuta a tradurre queste scelte nella configurazione del server. Annotare il protocollo negoziato in una connessione reale è un’osservazione concreta; una singola connessione, però, mostra solo la versione concordata, non tutte quelle che il server accetterebbe.

2. Che cosa aggiunge ogni livello

LivelloChe cosa ottieniPratica utile
Certificato TLSUna connessione cifrata con un server identificatoTenere un registro di nomi, scadenze e responsabili dei rinnovi
Content Security PolicyRegole esplicite su quali risorse la pagina può caricareCostruire la policy a partire dalle risorse realmente usate
HSTSIl browser usa solo HTTPS nelle visite successiveAumentare la durata per gradi e decidere consapevolmente sui sottodomini
Attributi dei cookieUna sessione che viaggia solo dove serve e che gli script non leggonoProvare accesso, servizi incorporati e ritorni da siti esterni
Controllo dei frameLa scelta di chi può incorporare la pagina in altri sitiIndicare i siti autorizzati, oppure nessuno

Considera questi controlli come istruzioni complementari. Il certificato riguarda la connessione; gli header descrivono come il browser deve trattare una risposta specifica. Pagine diverse hanno esigenze diverse: un articolo pubblico, l’area account e un widget pensato per essere incorporato altrove richiedono regole adatte al loro ruolo. Secondo OWASP, header configurati bene aiutano a prevenire problemi come cross-site scripting, clickjacking e divulgazione di informazioni; non sostituiscono però un codice scritto con attenzione.

3. Costruisci la CSP sulle risorse che usi davvero

La Content Security Policy dice al browser da quali origini la pagina può caricare script, stili, immagini, font, connessioni e frame. Il suo scopo principale è ridurre l’impatto di un cross-site scripting: se uno script estraneo finisce nella pagina, il browser si rifiuta di eseguirlo quando la policy non lo consente. Come ricorda la guida di MDN, è una difesa in profondità e non sostituisce la validazione dell’input.

Parti da un inventario di script, immagini, font, chiamate di rete e frame. Percorri tutto il flusso, non solo la home, così da includere pagamento, autenticazione e widget di assistenza che compaiono dopo un’interazione. Poi pubblica la policy proposta con l’header Content-Security-Policy-Report-Only: il browser segnala le violazioni nella console o all’endpoint configurato, senza bloccare nulla. Associa ogni segnalazione alla risorsa che la genera e decidi la regola. Quando i percorsi rappresentativi non producono più segnalazioni inattese, applica la policy con l’header Content-Security-Policy.

Alcuni dettagli che fanno risparmiare tempo:

  • per gli script, MDN raccomanda una policy basata su nonce o hash, la cosiddetta strict CSP, invece di un lungo elenco di domini; con script di terze parti che ne caricano altri può essere difficile da applicare;
  • 'unsafe-inline' annulla buona parte della protezione: evitalo dove puoi;
  • la modalità Report-Only e la direttiva frame-ancestors funzionano solo come header HTTP, non dentro un tag <meta>;
  • frame-ancestors non eredita da default-src: una policy con default-src 'none' lascia comunque incorporare la pagina da chiunque.

Un inventario documentato delle risorse rende più semplice valutare le aggiunte future e dà al team una spiegazione per ogni permesso concesso.

4. Fai di HTTPS un’abitudine del browser con HSTS

L’header Strict-Transport-Security dice al browser di usare solo HTTPS per quell’host per il numero di secondi indicato in max-age, trasformando in HTTPS anche i tentativi futuri in HTTP. Il browser impara la regola da una risposta HTTPS valida; se l’header arriva su HTTP, lo ignora. Per questo il redirect da HTTP a HTTPS resta necessario: meglio se permanente (301 o 308) e verso la stessa risorsa sullo stesso host. Il redirect non deve contenere l’header, che va invece sulla risposta HTTPS. HSTS non protegge la primissima visita, prima che il browser abbia ricevuto l’header.

C’è un effetto da conoscere prima di attivarlo: su un host con HSTS il browser non permette di proseguire ignorando un errore di certificato. Se il certificato scade, chi ha già visitato il sito non riesce ad aprirlo finché non viene rinnovato. Il registro dei certificati della sezione 1 diventa quindi parte integrante della gestione di HSTS.

Il sito hstspreload.org suggerisce di aumentare max-age per gradi (cinque minuti, una settimana, un mese), controllando a ogni passo che non si rompa nulla. L’opzione includeSubDomains estende la regola a tutti i sottodomini: confrontala con il tuo inventario, perché un sottodominio ancora servito solo in HTTP smetterebbe di funzionare. Anche con includeSubDomains, ogni sottodominio dovrebbe inviare il proprio header. Per disattivare HSTS si pubblica max-age=0, ma solo su HTTPS.

Il precaricamento (preload) inserisce il dominio in un elenco distribuito con i browser, valido anche per la prima visita. Oggi però lo stesso hstspreload.org raccomanda HSTS e sconsiglia il precaricamento: browser come Chrome e Safari portano già automaticamente su HTTPS le navigazioni in HTTP, e il preload serve solo quando questo passaggio fallisce per l’intervento di un attaccante. Uscire dall’elenco richiede mesi, e chi distribuisce configurazioni o strumenti non dovrebbe inserire preload per impostazione predefinita. La pagina di MDN su HSTS descrive tutte le opzioni.

5. Adatta cookie e header al percorso dell’utente

Un cookie di sessione permette al servizio di riconoscere una visita che prosegue. I suoi attributi decidono dove viaggia e chi può leggerlo (vedi MDN su Set-Cookie):

  • Secure: il browser invia il cookie solo su HTTPS, con l’eccezione di localhost. Non lo nasconde agli script della pagina.
  • HttpOnly: impedisce a JavaScript di leggere il cookie, per esempio tramite document.cookie. Il browser però continua a inviarlo con ogni richiesta pertinente, comprese quelle avviate da JavaScript, e il cookie non viene cifrato. Riduce il rischio che un attacco XSS rubi la sessione, ma non impedisce l’XSS.
  • SameSite: decide se il cookie accompagna le richieste che partono da altri siti (Strict, Lax o None); None richiede anche Secure. Non tutti i browser applicano lo stesso valore predefinito, quindi conviene indicarlo esplicitamente. È una difesa aggiuntiva contro il CSRF, non un sostituto dei token anti-CSRF.

Scegli i valori in base al flusso reale. Il ritorno da un fornitore di pagamento o da un accesso esterno è una richiesta che arriva da un altro sito: con Strict il cookie non viene inviato e la sessione può sembrare persa, quindi prova questi passaggi prima di decidere. I prefissi __Host- e __Secure- nel nome del cookie fanno sì che il browser lo accetti solo se impostato con Secure da un’origine HTTPS.

Altri header completano il quadro:

  • X-Content-Type-Options: nosniff fa sì che il browser blocchi script e fogli di stile serviti con un tipo MIME errato e non cerchi di indovinare il tipo delle altre risposte; funziona solo se il Content-Type è corretto ovunque.
  • Referrer-Policy stabilisce quanta parte dell’indirizzo viene inviata nell’header Referer. Se la policy non è indicata, i browser applicano strict-origin-when-cross-origin; OWASP suggerisce comunque di inviarlo in modo esplicito.
  • Per decidere chi può incorporare la pagina usa la direttiva CSP frame-ancestors; X-Frame-Options con DENY o SAMEORIGIN resta come ripiego per i browser più vecchi. Il valore ALLOW-FROM è obsoleto e fa ignorare l’intero header, e X-Frame-Options inserito in un tag <meta> non ha effetto.
  • X-XSS-Protection è deprecato e può introdurre problemi: non inviarlo, oppure impostalo a 0, e affidati alla CSP.

Il riferimento OWASP sugli header aiuta a scegliere i valori. Documenta lo scopo di ogni header, così che applicazione, proxy e CDN esprimano una policy coerente. Un dettaglio pratico: in nginx, add_header senza il parametro always invia l’header solo con alcuni codici di stato, quindi le pagine di errore possono restarne prive.

6. Osserva il risultato come lo vede il visitatore

Apri gli strumenti per sviluppatori del browser, carica una pagina normale e segui i reindirizzamenti fino alla risposta finale. Esamina il certificato, gli header e i cookie effettivamente consegnati. È il modo più diretto per collegare la configurazione all’esperienza del visitatore e per capire quale componente, tra applicazione, proxy e CDN, aggiunge ciascuna impostazione.

  1. Visita via HTTPS tutti i nomi pubblici previsti, e prova anche l’indirizzo con http:// per controllare il redirect.
  2. Annota i dettagli del certificato e gli header della risposta finale.
  3. Completa accesso, recupero della password, pagamento incorporato e ritorni da servizi esterni.
  4. Controlla la console e la destinazione delle segnalazioni CSP.

Conserva una copia datata della configurazione e indica chi gestisce ogni livello. Quando cambia l’hosting o arriva una nuova integrazione, ripeti lo stesso percorso per verificare che il comportamento sia quello previsto. Un rilascio pianificato e la configurazione precedente a portata di mano permettono di tornare indietro senza improvvisare. La checklist che ne risulta è anche una buona introduzione al sito per chi lo gestirà in futuro.

Per controllare subito gli header di un sito, usa la verifica degli header di sicurezza HTTP gratuita.

7. Tieni la mappa delle protezioni vicino al sito

Raccogli in un unico posto nomi pubblici, responsabili dei certificati, risorse caricate dal browser e percorsi importanti. Per un primo controllo dall’esterno puoi usare lo snapshot gratuito di Sitelemetry: otto controlli passivi su un’origine pubblica, senza registrazione; non è un penetration test. Restituisce un punteggio, un voto separato di rafforzamento (hardening) per header di sicurezza e TLS e al massimo tre segnali da guardare per primi. Per TLS esegue un solo handshake e verifica che la catena sia attendibile, che il certificato non sia scaduto né in scadenza entro 30 giorni e che il protocollo negoziato sia TLS 1.2 o 1.3; non elenca tutte le versioni e le suite accettate dal server. Per gli header guarda la risposta finale dopo al massimo 5 reindirizzamenti e controlla soprattutto la presenza di CSP, HSTS, protezione dai frame, nosniff e Referrer-Policy, oltre ai cookie privi di HttpOnly o Secure; SameSite non viene valutato. Il redirect da HTTP a HTTPS viene provato solo se inserisci un indirizzo che inizia con http://, e in quel caso il controllo TLS viene saltato. La guida all’audit di sicurezza del sito collega questi livelli ad account, permessi e manutenzione quotidiana.

Domande frequenti

Come lavorano insieme TLS e header di sicurezza?

TLS cifra la comunicazione e permette al browser di verificare l’identità del server tramite il certificato. Gli header arrivano dentro quella connessione e dicono al browser come trattare contenuti, cookie e visite successive.

Come si introduce una CSP senza bloccare il sito?

Fai l’inventario delle risorse usate nei percorsi principali, pubblica la policy con l’header Content-Security-Policy-Report-Only, analizza le segnalazioni e passa all’header definitivo quando i percorsi rappresentativi non ne generano più di inattese.

HttpOnly rende sicuro un cookie?

HttpOnly impedisce agli script della pagina di leggere il cookie, ma non lo cifra e non ne blocca l’invio: il browser continua a mandarlo con le richieste verso il sito. Limita il furto della sessione tramite XSS senza impedire l’XSS, quindi va usato insieme a Secure, SameSite e a una CSP.

Conviene attivare il preload di HSTS?

Il sito che gestisce l’elenco, hstspreload.org, oggi lo sconsiglia: raccomanda HSTS ma non il precaricamento, perché Chrome e Safari portano già le navigazioni su HTTPS, e uscire dall’elenco richiede mesi. Se lo valuti comunque, verifica prima che tutti i sottodomini funzionino in HTTPS.

Che cosa annotare nel registro dei certificati?

Nomi pubblici, fornitore del certificato, scadenza, metodo di rinnovo, responsabile e differenze tra CDN e origine. La durata massima dei certificati pubblici è già scesa a 200 giorni e calerà ancora, quindi affianca al rinnovo automatico un controllo indipendente della scadenza.

Fonti e approfondimenti

  1. MDN: Content-Security-Policy-Report-Onlydeveloper.mozilla.org
  2. MDN: guida a Content Security Policydeveloper.mozilla.org
  3. MDN: Strict-Transport-Securitydeveloper.mozilla.org
  4. MDN: Set-Cookiedeveloper.mozilla.org
  5. OWASP: HTTP Headers Cheat Sheetcheatsheetseries.owasp.org
  6. OWASP: Transport Layer Security Cheat Sheetcheatsheetseries.owasp.org
  7. OWASP: Session Management Cheat Sheetcheatsheetseries.owasp.org
  8. HSTS Preload List Submissionhstspreload.org
  9. CA/Browser Forum: Ballot SC081v3, riduzione della durata dei certificaticabforum.org
  10. Let’s Encrypt: fine del servizio di avviso di scadenzaletsencrypt.org
  11. ACN: Linee guida Funzioni crittografiche, Transport Layer Security (TLS), v2.0www.acn.gov.it
Team Sitelemetry

A cura della redazione di Sitelemetry. Le fonti collegate permettono di approfondire gli argomenti.

SITELEMETRY

Metti in pratica ciò che hai imparato.

Esplora struttura, impostazioni e segnali del tuo sito con Sitelemetry.