La sicurezza gioca un ruolo molto im­por­tan­te su Internet. Perciò gli standard, i cer­ti­fi­ca­ti e i pro­to­col­li cercano di pro­teg­ge­re sia l’utente che il server da pe­ri­co­lo­si attacchi. Uno di questi pro­to­col­li si chiama Transport Layer Security (TLS). Poiché però questo pro­to­col­lo porta con sé parecchi problemi, è stato ampliato con il Server Name In­di­ca­tion (SNI).

Per cosa è ne­ces­sa­rio il Server Name In­di­ca­tion?

Prima di poter com­pren­de­re perché l’SNI è stato svi­lup­pa­to, occorre com­pren­de­re come funziona il TLS. Il suc­ces­so­re di Secure Sockets Layer (SSL) è un co­sid­det­to handshake TLS. Nel processo, client e server, nella maggior parte dei casi il browser e il sito web, scambiano in­for­ma­zio­ni prima ancora che inizi il tra­sfe­ri­men­to vero e proprio dei dati. In questa stretta di mano virtuale il server si iden­ti­fi­ca di fronte al client e invia anche il relativo cer­ti­fi­ca­to di sicurezza. Solo quando il client li ha ve­ri­fi­ca­ti, inizia la co­mu­ni­ca­zio­ne e lo scambio di dati. Se la verifica ha esito negativo, non vengono scambiati ulteriori dati.

Ma cosa succede se diversi siti web sono in ese­cu­zio­ne at­tra­ver­so un indirizzo IP, come per esempio con il virtual hosting? Dato che l’IPv6 non si è ancora affermato come standard, gli indirizzi IP risultano ancora molto limitati e non tutti i domini possono pre­ten­de­re di avere un indirizzo IP tutto per sé. Ma quindi a chi indirizza il client il proprio “Hello” (il primo passo di un handshake TLS)? Ci sono molte pro­ba­bi­li­tà che risponda il sito sbagliato, che non invii il cer­ti­fi­ca­to corretto con il giusto nome dell’host, e che quindi non venga stabilita la con­nes­sio­ne. Per cui è im­por­tan­te che il client comunichi al server a quale dominio (host) sta cercando di con­net­ter­si. Proprio per questo è stato in­tro­dot­to il Server Name In­di­ca­tion.

Fatto

Se si dovesse ve­ri­fi­ca­re una di­scre­pan­za nella disamina del cer­ti­fi­ca­to (il nome del sito web cercato non coincide con il nome del cer­ti­fi­ca­to), il client in­ter­rom­pe la tra­smis­sio­ne. Il motivo è che una simile in­con­gruen­za può rap­pre­sen­ta­re un grande rischio per la sicurezza nella forma di un attacco Man in the Middle Attacke.

Come funziona l’SNI?

Quando in una con­nes­sio­ne non protetta più siti web uti­liz­za­no uno stesso indirizzo IP, non ci sono problemi di sorta. Nell’HTTP è previsto che il nome dell’host sia indicato nell’header nel momento in cui si accede ad un sito. Con il TLS deve però avvenire l’handshake prima che il browser possa inviare questi dati. Il Server Name In­di­ca­tion fa in modo che il nome dell’host sia co­mu­ni­ca­to prima dello scambio di cer­ti­fi­ca­ti tra server e client.

L’SNI è un’esten­sio­ne di TLS. Il pro­to­col­lo criptato è parte dello stack di pro­to­col­lo TCP/IP. Come tale, il TLS amplia il Tra­smis­sion Control Protocol (TCP) con una cifratura. Con questo passo ag­giun­ti­vo HTTP diventa così HTTPS. Ampliando il TLS con il Server Name In­di­ca­tion, il pro­to­col­lo di sicurezza mette a di­spo­si­zio­ne con l’handshake un ulteriore campo: sotto il campo Clien­tHel­loEx­ten­sion si trova quello opzionale Ser­ver­Na­me. In questo campo il client (e di questo si fa carico au­to­ma­ti­ca­men­te il browser) inserisce il nome dell’host con il quale vorrebbe col­le­gar­si. In questo modo è as­si­cu­ra­to che risponda l’host corretto.

Server Name In­di­ca­tion nel browser

Gli utenti non si accorgono del fun­zio­na­men­to dell’SNI, dato che nella maggior parte dei casi non devono nemmeno in­stal­la­re o con­fi­gu­ra­re nulla. È suf­fi­cien­te disporre di un sistema operativo recente e di un browser moderno: infatti Firefox, Chrome, Edge, Opera e Safari sup­por­ta­no questa esten­sio­ne di default.

Soltanto gli utenti che uti­liz­za­no ancora Windows XP (o versioni ancora più datate di Windows) con Internet Explorer non hanno a di­spo­si­zio­ne il Server Name In­di­ca­tion. Nel caso dell’utilizzo di un sistema operativo che non supporta più gli ag­gior­na­men­ti, si ha comunque la pos­si­bi­li­tà di in­stal­la­re un altro browser che supporta l’SNI. Anche la maggior parte dei browser per di­spo­si­ti­vi mobili utilizza l’SNI.

Server: IIS, Nginx e Apache con SNI

Diverso è il caso in cui siate voi stessi a gestire il server web, poiché allora in de­ter­mi­na­te cir­co­stan­ze dovete agire, a seconda di quale server uti­liz­za­te: da IIS 8 Microsoft ha integrato nel proprio software un’opzione di default per il Server Name In­di­ca­tion. Con Apache HTTP Server invece è diverso: qui è possibile integrare l’SNI usando OpenSSL (o mod_ssl). In linea generale dovreste far fun­zio­na­re il modulo soltanto con le esten­sio­ni TLS (come è del resto già pre­im­po­sta­to a partire dalla versione 0.9.8k). Potete trovare precise istru­zio­ni per l’in­stal­la­zio­ne dell’SNI con Apache nel wiki di Apache HTTP server.

Anche Nginx dispone di un supporto SNI di default a partire dalla versione 0.5.23 e funziona in linea generale come con Apache. Per con­trol­la­re se la vostra versione supporta il Server Name In­di­ca­tion, basta inserire il comando nginx –V. Una volta che lo avete ve­ri­fi­ca­to, in qualità di webmaster date ad ogni virtual host un nome specifico e as­so­cia­te­lo al cer­ti­fi­ca­to corretto. Potete trovare maggiori in­for­ma­zio­ni nella do­cu­men­ta­zio­ne ufficiale Nginx.

Consiglio

Se il vostro sito non è ancora crit­to­gra­fa­to, leggete il nostro articolo su come impostare il vostro sito in HTTPS.

Quali sono gli svantaggi di SNI?

Il Server Name In­di­ca­tion non ha soltanto vantaggi: in­nan­zi­tut­to non è sup­por­ta­to da tutti i browser, anche se questo riguarda un numero molto limitato di utenti. Non si tratta però di un modello perfetto, ma di una soluzione di tran­si­zio­ne, come si riconosce dal fatto che sono trasmesse in­for­ma­zio­ni non criptate. Anche se si tratta soltanto del nome dell’host, uti­liz­zan­do una cifratura accurata è difficile che queste in­for­ma­zio­ni finiscano in mano a terzi. Insomma sarebbe si­cu­ra­men­te più sicuro se ogni sito web avesse il proprio indirizzo IP specifico, senza quindi dover in­stal­la­re nessun SNI.

Poiché purtroppo questo non si può cambiare a causa della quantità ridotta di indirizzi IP (almeno fino a quando l’IPv6 non verrà in­tro­dot­to a livello globale), occorre trovare altre soluzioni, una delle quali è appunto offerta dall’SNI. Un’al­ter­na­ti­va sarebbe il cer­ti­fi­ca­to Subject Al­ter­na­ti­ve Name (SAN): con questi cer­ti­fi­ca­ti si possono re­gi­stra­re più domini o nomi host, il che significa che al server non importa con quale dominio il client voglia con­net­ter­si, poiché il cer­ti­fi­ca­to è valido per tutti i domini sul server. Lo svan­tag­gio di questi cer­ti­fi­ca­ti è che sono re­la­ti­va­men­te costosi, perciò molti gestori di siti web sono com­pren­si­bil­men­te poco disposti ad im­ple­men­tar­li. Se l’al­ter­na­ti­va è quella di ri­nun­cia­re ad avere una pagina crit­to­gra­fa­ta, di sicuro l’SNI rap­pre­sen­ta una buona soluzione in­ter­me­dia.

Vai al menu prin­ci­pa­le