El nombre de host se incluye en el protocolo de enlace SSL inicial para admitir servidores que tienen varios nombres de host (con certificados diferentes) en la misma dirección IP (SNI: Indicación del nombre del servidor). Esto es similar al encabezado de host en las solicitudes HTTP simples. El nombre se incluye en el primer mensaje del cliente (ClientHello), es decir, antes de que se realice cualquier identificación e intercambio de claves, de modo que el servidor pueda ofrecer el certificado correcto para la identificación.
Si bien el cifrado del nombre de host sería bueno, la pregunta sería qué clave utilizar para el cifrado. El intercambio de claves se realiza solo después de la identificación del sitio mediante un certificado, ya que de lo contrario podría intercambiar claves con un intermediario. Pero la identificación con certificados ya necesita el nombre de host para que el servidor pueda ofrecer el certificado correspondiente. Por lo tanto, el cifrado del nombre de host debe realizarse con una clave basada en algún otro tipo de identificación o de una manera que no sea segura contra el hombre en el medio.
Podría haber formas de proteger el nombre de host en el protocolo de enlace de SSL, pero al costo de una sobrecarga adicional en el protocolo de enlace y la infraestructura. Hay una discusión continua sobre si y cómo incluir SNI cifrado en TLS 1.3. Le sugiero que eche un vistazo a esta presentación y la lista de correo IETF TLS .
Aparte de eso, la filtración del nombre de host también puede ocurrir por otros medios, como la búsqueda de DNS anterior para el nombre. Y, por supuesto, el certificado enviado en la respuesta del servidor no está cifrado también (el mismo problema, aún no hay clave) y, por lo tanto, se puede extraer el destino solicitado de la respuesta del servidor.
Hay una gran cantidad de sitios que no funcionarán sin SNI, como toda la oferta gratuita de SSL de Cloudflares. Si un cliente que no es compatible con SNI (como IE8 en Windows XP) accedió a esto, se producirá un certificado incorrecto o un error de reconocimiento SSL como 'unknown_name'.