Il nome host è incluso nell'handshake SSL iniziale per supportare i server che hanno più nomi host (con certificati diversi) sullo stesso indirizzo IP (SNI: Server Name Indication). Questo è simile all'intestazione Host in semplici richieste HTTP. Il nome è incluso nel primo messaggio dal client (ClientHello), ovvero prima che venga effettuata l'identificazione e lo scambio di chiavi, in modo che il server possa offrire il certificato corretto per l'identificazione.
Sebbene la crittografia dell'hostname sia piacevole, la domanda dovrebbe essere la chiave da utilizzare per la crittografia. Lo scambio di chiavi arriva solo dopo l'identificazione del sito per certificato, perché altrimenti potresti scambiare le chiavi con un man-in-the-middle. Ma l'identificazione con i certificati richiede già il nome host in modo che il server possa offrire il certificato corrispondente. Pertanto, la crittografia del nome host dovrebbe essere eseguita con una chiave basata su un altro tipo di identificazione o in un modo non sicuro rispetto a man-in-the-middle.
Potrebbero esserci modi per proteggere il nome host nell'handshake SSL, ma al costo di un sovraccarico aggiuntivo nell'handshake e nell'infrastruttura. Ci sono discussioni in corso se e come includere SNI crittografato in TLS 1.3. Suggerisco di dare un'occhiata a questa presentazione e la mailing list IETF TLS .
Oltre a ciò, la perdita del nome host può verificarsi anche con altri mezzi, come la precedente ricerca DNS per il nome. E ovviamente il certificato inviato nella risposta del server non è crittografato (stesso problema, nessuna chiave ancora) e quindi si può estrarre il target richiesto dalla risposta del server.
Ci sono molti siti là fuori che non funzionano senza SNI, come tutta l'offerta SSL gratuita di Cloudflares. Se si accede da un client che non supporta SNI (come IE8 su Windows XP), ciò comporterà la pubblicazione del certificato errato o un errore di handshake SSL come "nome sconosciuto".