La Indicación de Nombre de Servidor ( SNI ) es una extensión de Seguridad de la Capa de Transporte (TLS) donde un cliente indica a qué nombre de host está intentando conectarse al inicio del proceso de establecimiento de conexión. [ 1 ] La extensión permite que un servidor presente uno de varios certificados posibles en la misma dirección IP y número de puerto , lo que permite que varios servicios (incluidos sitios web HTTPS ) sean servidos por la misma dirección IP sin usar un solo certificado. Para HTTPS, es el equivalente conceptual del alojamiento virtual HTTP/1.1 . En la especificación original, el nombre de host no está cifrado; la especificación posterior de Encrypted Client Hello corrige esto. La extensión SNI se especificó en 2003 en RFC 3546 .
Antecedentes del problema
Antes de SNI, al establecer una conexión TLS, el cliente no podía especificar a qué sitio intentaba conectarse. Por lo tanto, si un servidor alojaba varios sitios en un único oyente, no podía saber qué certificado usar en el protocolo TLS. En detalle, al establecer una conexión TLS, el cliente solicita un certificado digital al servidor web. Una vez que el servidor envía el certificado, el cliente lo examina y compara el nombre al que intentaba conectarse con los nombres incluidos en el certificado. Si coinciden, la conexión se establece con normalidad. Si no coinciden, se advierte al usuario de la discrepancia y la conexión puede interrumpirse, ya que la discrepancia podría indicar un intento de ataque de intermediario (man-in-the-middle). Sin embargo, algunas aplicaciones permiten al usuario omitir la advertencia y continuar con la conexión, asumiendo este la responsabilidad de confiar en el certificado y, por extensión, en la conexión.
Sin embargo, puede resultar difícil —o incluso imposible, debido a la falta de una lista completa de todos los nombres— obtener un único certificado que cubra todos los nombres de los que será responsable un servidor. Un servidor responsable de varios nombres de host probablemente necesitará presentar un certificado diferente para cada nombre (o pequeño grupo de nombres). Es posible utilizar subjectAltName para incluir varios dominios controlados por una misma persona [ 2 ] en un solo certificado. Dichos «certificados de comunicaciones unificadas» deben reemitirse cada vez que cambie la lista de dominios.
El alojamiento virtual basado en nombres permite que un único servidor (generalmente un servidor web) aloje varios nombres de host DNS en la misma dirección IP. Para ello, el servidor utiliza el nombre de host que el cliente proporciona como parte del protocolo (en HTTP, el nombre se incluye en la cabecera de host). Sin embargo, al usar HTTPS, el protocolo de enlace TLS se ejecuta antes de que el servidor reciba las cabeceras HTTP. Por lo tanto, el servidor no podía utilizar la información de la cabecera de host HTTP para determinar qué certificado presentar, y, en consecuencia, solo se podían servir nombres protegidos por el mismo certificado desde la misma dirección IP.
En la práctica, esto significaba que un servidor HTTPS solo podía servir un dominio (o un pequeño grupo de dominios) por dirección IP para una navegación segura y eficiente. Asignar una dirección IP independiente a cada sitio web aumenta el costo del alojamiento, ya que las solicitudes de direcciones IP deben justificarse ante el registro regional de Internet y las direcciones IPv4 ya están agotadas. En el caso de IPv6 , aumenta la carga administrativa al tener varias direcciones IP en una sola máquina, aunque el espacio de direcciones no esté agotado. Como resultado, muchos sitios web se vieron prácticamente impedidos de utilizar comunicaciones seguras.
Principios técnicos
SNI soluciona este problema haciendo que el cliente envíe el nombre del dominio virtual como parte del mensaje ClientHello de la negociación TLS. [ 3 ] Esto permite al servidor seleccionar el dominio virtual correcto con anticipación y presentar al navegador el certificado que contiene el nombre correcto. Por lo tanto, con clientes y servidores que implementan SNI, un servidor con una sola dirección IP puede dar servicio a un grupo de nombres de dominio para los que no es práctico obtener un certificado común.
SNI se incorporó a los RFC de Internet del IETF en junio de 2003 mediante el RFC 3546, Extensiones de seguridad de la capa de transporte (TLS) . La versión más reciente del estándar es el RFC 6066.
Implicaciones de seguridad
La carga útil de Indicación de Nombre de Servidor no está cifrada, por lo que el nombre de host del servidor al que el cliente intenta conectarse es visible para un intruso pasivo. Esta vulnerabilidad del protocolo fue explotada por software de seguridad para filtrado y monitoreo de redes [ 4 ] [ 5 ] [ 6 ] y por gobiernos para implementar censura. [ 7 ]
Actualmente, existen múltiples tecnologías que intentan ocultar la indicación del nombre del servidor:
Frente de dominio
El enmascaramiento de dominio es una técnica que consiste en reemplazar el nombre de host deseado en SNI por otro alojado en el mismo servidor o, más frecuentemente, en una red de servidores conocida como red de entrega de contenido . Cuando un cliente utiliza el enmascaramiento de dominio, reemplaza el dominio del servidor en SNI (sin cifrar), pero lo mantiene en el encabezado de host HTTP (que está cifrado por TLS) para que el servidor pueda servir el contenido correcto. El enmascaramiento de dominio viola el estándar que define SNI, por lo que su compatibilidad es limitada (muchos servicios verifican que el host de SNI coincida con el host del encabezado HTTP y rechazan las conexiones con SNI enmascarado como no válidas). Si bien el enmascaramiento de dominio se utilizó en el pasado para evitar la censura gubernamental, [ 8 ] su popularidad disminuyó porque los principales proveedores de la nube (Google, AWS de Amazon y CloudFront) lo prohíben explícitamente en sus términos de servicio y tienen restricciones técnicas al respecto. [ 9 ]
Hola de cliente cifrado
El mensaje Encrypted Client Hello ( ECH ) es una extensión del protocolo TLS 1.3 definida en el RFC 9849 en marzo de 2026 que permite el cifrado de todo el mensaje Client Hello, que se envía durante la etapa inicial de la negociación TLS 1.3. [ 10 ] ECH cifra la carga útil con una clave pública que la parte que confía en ella (un navegador web) necesita conocer de antemano, lo que significa que ECH es más eficaz con grandes CDN . La transmisión de las claves públicas y la información de configuración a través de HTTPS y los registros DNS SVCB se define en el RFC 9848. [ 11 ]
La versión inicial de 2018 de esta extensión se denominó SNI cifrado (ESNI). [ 12 ] En marzo de 2020, ESNI se rediseñó e integró en la extensión ECH, tras un análisis que demostró que cifrar únicamente el SNI resulta insuficiente. Por ejemplo, las especificaciones permiten que la extensión de clave precompartida contenga cualquier dato para facilitar la reanudación de la sesión, incluso la transmisión de una copia en texto plano del mismo nombre de servidor que está cifrado por ESNI. Además, cifrar las extensiones una por una requeriría una variante cifrada de cada extensión, cada una con posibles implicaciones para la privacidad, e incluso eso expondría el conjunto de extensiones anunciadas. Por último, la implementación real de ESNI ha puesto de manifiesto limitaciones de interoperabilidad. [ 13 ] El nombre abreviado era ECHO en marzo de 2020 [ 14 ] y cambió a ECH en mayo de 2020. [ 15 ] En julio de 2023, en la reunión IETF117 , los miembros que trabajaban en ECH informaron que Chrome y Firefox estaban realizando una prueba de muestra del 1%, y el equipo espera que el borrador final se presente a la evaluación del IESG en enero de 2024. [ 16 ] [ 17 ]
En septiembre de 2023, Cloudflare comenzó a admitir ECH para dominios alojados. [ 18 ]
En septiembre de 2023, Chromium versión 117 (utilizada en Google Chrome , Microsoft Edge , Samsung Internet y Opera ) habilitó ECH de forma predeterminada, requiriendo también que las claves se implementaran en los registros de recursos HTTPS en DNS. [ 19 ] [ 20 ] ECH está habilitado en Firefox de forma predeterminada desde la versión 119 lanzada en octubre de 2023, y Mozilla recomienda su uso junto con DNS sobre HTTPS . [ 21 ]
En abril de 2026, OpenSSL 4.0 incluyó soporte para ECH. [ 22 ] Desde su lanzamiento en diciembre de 2025, NGINX admite ECH con OpenSSL 4.0. [ 23 ]
ESNI (2018–2020)
La versión inicial de esta extensión de 2018 se denominó Encrypted SNI (ESNI) [ 12 ] y sus implementaciones se desplegaron de forma "experimental" para abordar este riesgo de interceptación de dominios. [ 24 ] [ 25 ] [ 26 ] A diferencia de ECH, Encrypted SNI cifraba solo el SNI en lugar de todo el Client Hello. [ 14 ] La compatibilidad opcional con esta versión se incorporó a Firefox en octubre de 2018 [ 27 ] y requería habilitar DNS sobre HTTPS (DoH). [ 28 ] Pero se eliminó en enero de 2021 con el lanzamiento de Firefox 85. [ 29 ]
Tanto ESNI como ECH son compatibles únicamente con TLS 1.3 porque dependen de KeyShareEntry, que se definió por primera vez en TLS 1.3. [ 30 ] [ 31 ]
En agosto de 2020, el Gran Cortafuegos de China comenzó a bloquear el tráfico ESNI, aunque seguía permitiendo el tráfico ECH. [ 32 ]
En octubre de 2020, el ISP ruso Rostelecom y su operador móvil Tele2 comenzaron a bloquear el tráfico ESNI. [ 33 ] En septiembre del mismo año, el ministerio de censura ruso Roscomnadzor planeó prohibir una serie de protocolos de cifrado, entre los que se encontraban TLS 1.3 y ESNI, lo que dificultó la censura del acceso a sitios web. [ 34 ] [ 35 ] [ 36 ]
Implementación
En 2004, el proyecto EdelKey creó un parche para agregar TLS/SNI a OpenSSL . [ 37 ] En 2006, este parche se adaptó a la rama de desarrollo de OpenSSL, y en 2007 se adaptó a OpenSSL 0.9.8 (lanzado por primera vez en 0.9.8f [ 38 ] ). Los primeros navegadores web con soporte para SNI aparecieron en 2006 (Mozilla Firefox 2.0, Internet Explorer 7), y los servidores web más tarde (Apache HTTP Server en 2009, Microsoft IIS en 2012).
Para que una aplicación implemente SNI, la biblioteca TLS que utiliza debe implementarlo y la aplicación debe pasarle el nombre de host. Para complicar aún más las cosas, la biblioteca TLS puede estar incluida en la aplicación o ser un componente del sistema operativo subyacente. Por este motivo, algunos navegadores implementan SNI en cualquier sistema operativo, mientras que otros solo lo hacen en determinados sistemas operativos.
Apoyo
Referencias
- ↑ Blake-Wilson, Simon; Nystrom, Magnus; Hopwood, David; Mikkelsen, Jan; Wright, Tim (junio de 2003). "Indicación del nombre del servidor" . Extensiones de seguridad de la capa de transporte (TLS) . IETF . pág. 8. sec. 3.1. doi : 10.17487/RFC3546 . ISSN 2070-1721 . RFC 3546. Consultado el 26 de marzo de 2026 .
- ↑ "¿Qué es un certificado SSL de dominio múltiple (UCC)?" . GoDaddy .
- ↑ "Indicación del nombre del servidor TLS" . Diario de Paul . Consultado el 3 de julio de 2024 .
- ↑ "Filtro web: función de extensión SNI y bloqueo HTTPS" . www3.trustwave.com . Consultado el 3 de julio de 2024 .
- ↑ "Sophos UTM: Entendiendo el filtrado web de Sophos" . Comunidad de Sophos . Consultado el 20 de febrero de 2019 .
- ↑ Chrisment, Isabelle; Goichot, Antoine; Cholez, Thibault; Shbair, Wazen M. (11 de mayo de 2015). "Evitando eficazmente el filtrado HTTPS basado en SNI" . Simposio Internacional IFIP/IEEE de 2015 sobre Gestión Integrada de Redes (IM) (PDF) . págs. 990–995 . doi : 10.1109/INM.2015.7140423 . ISBN 978-1-4799-8241-7. S2CID 14963313 .
- ↑ "Corea del Sur está censurando Internet espiando el tráfico SNI" . BleepingComputer . Consultado el 18 de febrero de 2019 .
- ↑ "La aplicación de chat encriptado Signal elude la censura gubernamental" . Engadget . 21 de diciembre de 2016. Consultado el 3 de julio de 2024 .
- ↑ "Amazon amenaza con suspender la cuenta de Signal en AWS por eludir la censura" . Signal . Consultado el 2 de mayo de 2018 .
- ↑ Rescorla, Eric; Oku, Kazuho; Sullivan, Nick; Wood, Christopher A. (marzo de 2026). TLS Encrypted Client Hello . IETF . doi : 10.17487/RFC9849 . ISSN 2070-1721 . RFC 9849. Consultado el 26 de marzo de 2026 .
- ↑ Schwartz, Benjamin M.; Bishop, Mike; Nygren, Erik (3 de marzo de 2026). "Arranque de ClientHello cifrado con TLS mediante enlaces de servicio DNS" . Grupo de trabajo de ingeniería de Internet . Consultado el 12 de abril de 2026 .
- 1 2 Rescorla, Eric; Oku, Kazuho; Sullivan, Nick; Wood, Christopher A. (6 de abril de 2023). "Draft-ietf-TLS-esni-14" .
- ↑ Jacobs, Kevin (7 de enero de 2021). "Encrypted Client Hello: el futuro de ESNI en Firefox" . Blog de seguridad de Mozilla . Consultado el 9 de enero de 2021 .
- 1 2 "ESNI -> ECHO · tlswg/draft-ietf-tls-esni" . GitHub .
- ↑ "s/ECHO/ECH · tlswg/draft-ietf-tls-esni" . GitHub .
- ↑ Grupo de Trabajo TLS (26 de julio de 2023). "Acta IETF117: tls: Miércoles 20:00" . IETF Datatracker . Archivado del original el 2 de agosto de 2023. Consultado el 2 de agosto de 2023 .
- ↑ Grupo de trabajo TLS (26 de julio de 2023). IETF117-TLS-20230726-2000 . YouTube (vídeo). San Francisco: Grupo de trabajo de ingeniería de Internet . Consultado el 2 de agosto de 2023 .
- ↑ Achiel van der Mandele; Alessandro Ghedini; Christopher Wood; Rushil Mehra. "Encrypted Client Hello: la última pieza del rompecabezas para la privacidad" . El blog de Cloudflare . Consultado el 1 de octubre de 2023 .
- ↑ "Cómo deshabilitar el ClientHello cifrado con TLS en Google Chrome usando PowerShell" . Chaser Systems Ltd. 9 de octubre de 2023.
- ↑ "Función: TLS Encrypted Client Hello (ECH)" . Estado de la plataforma Chrome . Google . 12 de diciembre de 2023. Consultado el 21 de febrero de 2024 .
- ↑ "Encrypted Client Hello (ECH) - Preguntas frecuentes | Ayuda de Firefox" . support.mozilla.org . Consultado el 1 de diciembre de 2024 .
- 1 2 "La biblioteca OpenSSL ahora admite Encrypted Client Hello (ECH)" . Proyecto OpenSSL. 11 de marzo de 2026. Consultado el 12 de abril de 2026 .
- 1 2 Arutyunyan, Roman (19 de febrero de 2026). "El saludo de cliente cifrado llega a NGINX" . Blog de la comunidad de NGINX . Recuperado el 12 de abril de 2026 .
- ↑ "ESNI: Una actualización de HTTPS que protege la privacidad" . Blog de EFF DeepLinks . 24 de septiembre de 2018.
- ↑ Claburn, Thomas (17 de julio de 2018). "No se alarmen por el enmascaramiento de dominios, se está pirateando una solución para SNI" . The Register . Consultado el 10 de octubre de 2018 .
- ↑ Ghedini, Alessandro (24 de septiembre de 2018). "Encriptarlo o perderlo: cómo funciona SNI encriptado" . El blog de Cloudflare . Recuperado el 13 de mayo de 2019 .
- ↑ Eric, Rescorla (18 de octubre de 2018). "SNI cifrado llega a Firefox Nightly" . Blog de seguridad de Mozilla . Consultado el 15 de junio de 2020 .
- ↑ Daniel, Stenberg. "Curl: Re: Soporte de SNI cifrado (archivo de la lista de correo de la biblioteca curl)" . curl.se. Consultado el 15 de junio de 2020 .
- ↑ "1667743 - Limpiar código esni no utilizado" . bugzilla.mozilla.org . Consultado el 7 de abril de 2022 .
- ↑ Ghedini, Alessandro (24 de septiembre de 2018). "Encriptarlo o perderlo: cómo funciona SNI encriptado" . El blog de Cloudflare . Consultado el 13 de mayo de 2019.
Esta es una extensión para TLS versión 1.3 y superior, y no funciona con versiones anteriores del protocolo
. - ↑ "Hacer compatible ESNI con TLS 1.2 · Problema n.º 38 · tlswg/draft-ietf-tls-esni" . GitHub . Consultado el 9 de agosto de 2020 .
- ↑ Cimpanu, Catalin. "China ahora bloquea todo el tráfico HTTPS cifrado que utiliza TLS 1.3 y ESNI" . ZDNet . Consultado el 9 de agosto de 2020 .
- ^ "Почему Ростелеком блокирует ESNI трафик?" . qna.habr.com (en ruso). 11 de octubre de 2020 . Consultado el 30 de octubre de 2020 .
- ↑ "El Ministerio de Desarrollo Digital de Rusia quiere prohibir las últimas tecnologías de cifrado en la RuNet" . Meduza . Consultado el 18 de junio de 2021 .
- ↑ Cimpanu, Catalin. "Rusia quiere prohibir el uso de protocolos seguros como TLS 1.3, DoH, DoT, ESNI" . ZDNet . Consultado el 18 de junio de 2021 .
- ↑ Sherman, Justin (25 de septiembre de 2020). "Rusia está probando algo nuevo para aislar su internet del resto del mundo" . Revista Slate . Consultado el 18 de junio de 2021 .
- ↑ "Proyecto EdelKey" . edelweb.fr . Consultado el 20 de febrero de 2019 .
- ↑ "CAMBIOS EN OpenSSL" . Archivado del original el 20 de abril de 2016.
- ↑ "Alojamiento público de Git - alpine.git/Commit" .
- ↑ "Cómo mejorar la privacidad en Microsoft Edge habilitando Encrypted Client Hello" . Neowin . 25 de julio de 2023. Archivado del original el 5 de diciembre de 2022. Consultado el 25 de julio de 2023 .
- 1 2 "Desarrollo de ECH para OpenSSL (DEfO)" . defo.ie. Tolerant Networks Limited. 24 de agosto de 2022. Archivado del original el 1 de septiembre de 2022.
- ↑ "Entender el mensaje Encrypted Client Hello (ECH) | Ayuda de Firefox" . support.mozilla.org . Consultado el 4 de octubre de 2023 .
- ↑ "curl/docs/ECH.md en cbe7fad20d969626a5c4eb0501a273dfe812bcd3 · curl/curl" . GitHub . Consultado el 26 de julio de 2023 .
- ↑ "curl/docs/ROADMAP.md en 50490c0679fcd0e50bb3a8fbf2d9244845652cf0 · curl/curl" . GitHub . Consultado el 26 de julio de 2023 .
- ↑ "Función: TLS Encrypted Client Hello (ECH)" . Estado de la plataforma Chrome . Archivado del original el 28 de mayo de 2023. Consultado el 25 de julio de 2023.
Safari: Sin señal
. - ↑ "Notas de la versión 7.8" . Campus@Barracuda . Septiembre de 2013. Consultado el 5 de enero de 2021 .
- ↑ "Notas de la versión 5.2" . Campus@Barracuda . Septiembre de 2015. Consultado el 5 de enero de 2021 .
- ↑ "Error 765064: HttpClient utilizado por Sync y otros servicios no admite SNI" . Bugzilla@Mozilla . 29 de octubre de 2017. Consultado el 9 de noviembre de 2017 .
- ↑ "Firefox para Android versión 143.0" . Firefox . Consultado el 24 de mayo de 2026 .
- ↑ "Preguntas y respuestas sobre SSL del servidor HTTP de IBM" . IBM . Consultado el 8 de marzo de 2011 .
- ↑ "¿IHS 8 con tecnología Apache 2.2.x ?" . IBM . 17 de octubre de 2013. Archivado del original el 26 de diciembre de 2015. Consultado el 9 de noviembre de 2017 .
- ↑ «Caddy v2.10.0» . GitHub .
- ↑ "Mejoras de rendimiento" . help.hcltechsw.com . Consultado el 6 de febrero de 2024 .
- ↑ "ECH por kazuho · Solicitud de extracción n.° 3164 · h2o/h2o" . GitHub . Consultado el 6 de julio de 2023 .
- ↑ "Directivas básicas - Configurar" . H2O: el servidor HTTP/2 optimizado . Archivado del original el 29 de mayo de 2023. Consultado el 18 de julio de 2023 .
- ↑ "Actualización a draft-ietf-tls-esni-13" . Repositorio de código BoringSSL . Consultado el 6 de julio de 2023 .
- ↑ "Aviso de lanzamiento de Dell BSAFE Micro Edition Suite 5.0" . Consultado el 18 de octubre de 2022 .
- ↑ "Soporte para ECH (#595) · Problemas · gnutls / GnuTLS · GitLab" . GitLab . 27 de octubre de 2018 . Consultado el 26 de julio de 2023 .
- ↑ "Soporte ESNI · Problema n.° 546 · libressl/portable" . GitHub . Consultado el 26 de julio de 2023 .
- ↑ "116168 - Compatibilidad con la extensión de indicación de nombre de servidor TLS en NSS" . bugzilla.mozilla.org . Consultado el 6 de julio de 2023 .
- ↑ "D101050 Error 1681585 - Agregar soporte ECH a selfserv" . phabricator.services.mozilla.com . Consultado el 6 de julio de 2023 .
- ↑ "Error 360421: Implementar la indicación del nombre del servidor TLS para servidores" . Bugzilla@Mozilla . 11 de noviembre de 2006. Consultado el 30 de octubre de 2012 .
- ↑ " [ ech ] reescritura de ESNI a ECH borrador 15 por kazuho · Solicitud de extracción n.° 437 · h2o/picotls" . GitHub . Recuperado el 6 de julio de 2023 .
- ↑ McCarney, Daniel (31 de mayo de 2024). "Soporte para Encrypted Client Hello (ECH) del lado del servidor" . GitHub . Recuperado el 22 de agosto de 2024 .
- ↑ "Falta la selección de certificados para servidores · Problema n.° 310 · apple/swift-nio-ssl" . GitHub . Consultado el 26 de julio de 2023 .
- ↑ "Añade soporte para TLS v1.3 Encrypted Client Hello (ECH) draft-ietf-tls… · wolfSSL/wolfssl@6b6ad38" . GitHub . Consultado el 25 de julio de 2023 .
- ↑ "crypto/tls: implementar draft-ietf-tls-esni-13 · cloudflare/go@4c13101" . GitHub . Consultado el 25 de julio de 2023 .
- ↑ "src/tls.c · master · Hugo Leisink / Hiawatha web server · GitLab" . GitLab . 5 de abril de 2023 . Consultado el 26 de julio de 2023 .
- ↑ "lighttpd TLS ECH" .
- ↑ "Registro de cambios de HAProxy 1.5" . Consultado el 28 de diciembre de 2020 .
- ↑ Desde la versión 3.3 "Soporte para ECH (Encrypted client hello) · Problema n.° 1924 · haproxy/haproxy" . GitHub . Consultado el 4 de marzo de 2026 .
- ↑ "Novedades de OpenBSD 6.1" . Consultado el 13 de junio de 2021 .
- ↑ "src/lib/libtls/tls.c en master · openbsd/src" . GitHub . Consultado el 26 de julio de 2023 .
Enlaces externos
- RFC 6066 (sustituye a RFC 4366 , que a su vez sustituyó a RFC 3546 )
- Wiki de Mozilla - Saludo de cliente cifrado (ECH)
- Protocolos de Internet
- Comunicación segura
- Seguridad de la capa de transporte
- Alojamiento web