SNI, o Server Name Indication, è un'aggiunta al protocollo di crittografia TLS che consente a un dispositivo client di specificare il nome di dominio che sta cercando di raggiungere nel primo passaggio dell'handshake TLS, prevenendo errori di mancata corrispondenza dei nomi comuni.
Dopo aver letto questo articolo sarai in grado di:
Argomenti correlati
Che cosa è l’SSL?
Handshake SSL
Tipi di certificati SSL
Crittografia a chiave pubblica
Cos'è una chiave di sessione?
Abbonati a theNET, il riepilogo mensile di Cloudflare sulle tematiche più discusse in Internet.
Copia link dell'articolo
SNI è un po' come spedire un pacco a un condominio invece che a un appartamento specifico. Quando si spedisce qualcosa all'indirizzo di una determinata persona, il solo indirizzo è sufficiente per consegnare il pacco a tale individuo. Ma quando un pacco è indirizzato a un condominio, ha bisogno del numero dell'appartamento oltre all'indirizzo; in caso contrario, il pacco potrebbe non essere consegnato alla persona giusta o potrebbe non essere consegnato affatto.
Molti server Web sono più simili a condomini che ad appartamenti: ospitano diversi nomi di dominio, quindi il solo indirizzo IP non è sufficiente per indicare quale dominio un utente sta cercando di raggiungere. Questo può comportare che il server mostri il certificato SSL errato, che impedisce o termina una connessione HTTPS, proprio come un pacco non può essere consegnato a un indirizzo se la persona corretta non lo firma.
Quando più siti Web sono ospitati su un server e condividono un unico indirizzo IP, e ogni sito Web ha il proprio certificato SSL, il server potrebbe non sapere quale certificato SSL mostrare quando un dispositivo client tenta di connettersi in modo sicuro a uno dei siti Web. Questo perché l'handshake SSL/TLS si verifica prima che il dispositivo client indichi su HTTP a quale sito Web si sta connettendo.
Server Name Indication (SNI) è progettato per risolvere questo problema. SNI è un'estensione per il protocollo TLS (precedentemente noto come protocollo SSL), utilizzato in HTTPS. È incluso nel processo di handshake TLS/SSL per garantire che i dispositivi client siano in grado di visualizzare il certificato SSL corretto per il sito Web che stanno cercando di raggiungere. L'estensione consente di specificare il nome host, o il nome di dominio, del sito Web durante l'handshake TLS, anziché quando la connessione HTTP si apre dopo l'handshake.
In parole povere, SNI consente al dispositivo di un utente di aprire una connessione sicura con https://www.example.com anche se tale sito Web è ospitato nello stesso posto (stesso indirizzo IP) di https://www.something.com, https://www.another-website.com, e https://www.example.io.
SNI impedisce quello che è noto come "errore di mancata corrispondenza del nome comune": quando un dispositivo (utente) client raggiunge l'indirizzo IP corretto per un sito Web, ma il nome sul certificato SSL non corrisponde al nome del sito Web. Spesso questo tipo di errore si traduce in un messaggio di errore "La connessione non è riservata" nel browser dell'utente.
SNI è stato aggiunto come estensione a TLS/SSL nel 2003; in origine non faceva parte del protocollo. Quasi tutti i browser, i sistemi operativi e i server Web lo supportano, ad eccezione di alcuni dei browser e dei sistemi operativi più obsoleti ancora in uso.
Sebbene SNI stia per Server Name Indication, quello che SNI effettivamente "indica" è il nome host, o nome di dominio, di un sito Web, che può essere separato dal nome del server Web che ospita effettivamente il dominio. In effetti, è comune che più domini siano ospitati su un server, nel qual caso vengono chiamati nomi host virtuali.
Un nome server è semplicemente il nome di un computer. Per i server Web, questo nome in genere non è visibile agli utenti finali a meno che il server non ospiti un solo dominio e il nome del server non sia equivalente al nome di dominio.
Spesso un server Web è responsabile di più nomi host o nomi di dominio (che sono i nomi dei siti Web leggibili dall'uomo). Ogni nome host avrà il suo certificato SSL se i siti Web utilizzano HTTPS.
Il problema è che tutti questi nomi host su un server si trovano al livello dello stesso indirizzo IP. Questo non è un problema su HTTP, perché non appena viene aperta una connessione TCP, il client indicherà quale sito Web sta cercando di raggiungere in una richiesta HTTP.
Ma in HTTPS, un handshake TLS avviene prima, ovvero prima che la conversazione HTTP possa iniziare (HTTPS utilizza comunque HTTP: crittografa semplicemente i messaggi HTTP). Senza SNI, quindi, il client non ha modo di indicare al server con quale nome host sta comunicando. Di conseguenza, il server potrebbe produrre il certificato SSL per il nome host errato. Se il nome sul certificato SSL non corrisponde al nome che il client sta cercando di raggiungere, il browser del client restituisce un errore e di solito termina la connessione.
SNI aggiunge il nome di dominio al processo di handshake TLS, in modo che il processo TLS raggiunga il nome di dominio corretto e riceva il certificato SSL corretto, consentendo alle altre fasi dell'handshake TLS di procedere normalmente.
In particolare, SNI include il nome host nel messaggio del client Hello o il primo passaggio di un handshake TLS.
Un nome host è il nome di un dispositivo che si connette a una rete. Nel contesto di Internet, un nome di dominio, o il nome di un sito Web, è un tipo di nome host. Entrambi sono separati dall'indirizzo IP associato al nome di dominio.
Un nome host virtuale è un nome host che non ha un proprio indirizzo IP ed è ospitato su un server insieme ad altri nomi host. È "virtuale" in quanto non ha un server fisico dedicato, proprio come la realtà virtuale esiste solo digitalmente, non nel mondo fisico.
L'SNI crittografato (ESNI) si aggiunge all'estensione SNI crittografando la parte SNI del client Hello. Questo impedisce a chiunque stia curiosando tra il client e il server di essere in grado di vedere quale certificato sta richiedendo il client, proteggendo e tutelando ulteriormente il client. Cloudflare e Mozilla Firefox hanno introdotto il supporto di ESNI nel 2018.
In questo raro caso, l'utente probabilmente non sarà in grado di raggiungere determinati siti Web e il browser dell'utente restituirà un messaggio di errore come "La connessione non è riservata".
La stragrande maggioranza dei browser e dei sistemi operativi supporta SNI. Solo le versioni molto obsolete di Internet Explorer, le vecchie versioni del sistema operativo BlackBerry e altre versioni software obsolete non supportano SNI.
Per saperne di più sul protocollo TLS/SSL, i certificati SSL e sul funzionamento di HTTPS, consulta Cos'è un certificato SSL? oppure ottieni un certificato SSL gratuito da Cloudflare.