SNI, o Indicación del nombre del servidor, es una adición al protocolo de encriptación TLS que permite que un dispositivo cliente especifique el nombre de dominio que está tratando de alcanzar en el primer paso del protocolo de enlace TLS, lo cual evita errores habituales de coincidencia de nombres.
Después de leer este artículo podrás:
Contenido relacionado
¿Qué es SSL?
Enlace SSL
Tipos de certificados SSL
Criptografía de clave pública
¿Qué es una clave de sesión?
Suscríbase a theNET, el resumen mensual de Cloudflare sobre las ideas más populares de Internet.
Copiar enlace del artículo
La SNI es algo así como enviar un paquete a un edificio de viviendas en lugar de a una vivienda. Cuando se envía algo a una casa unifamiliar, basta con la dirección de la calle para que el paquete llegue a la persona correcta. Pero cuando un paquete va a un edificio de viviendas, se necesita el número de apartamento además de la dirección; de lo contrario, puede que el paquete no llegue a la persona correcta o que no sea entregado.
Muchos servidores web se parecen más a edificios de viviendas que a casas unifamiliares: alojan varios nombres de dominio, así que la dirección IP por sí sola no es suficiente para indicar a qué dominio intenta llegar un usuario. Esto puede dar lugar a que el servidor muestre el certificado SSL incorrecto, lo que impide o pone fin a una conexión HTTPS, al igual que un paquete no puede ser entregado en una dirección si la persona correcta no firma haberlo recibido.
Cuando varios sitios web están alojados en un servidor y comparten una única dirección IP, y cada sitio web tiene su propio certificado SSL, puede que el servidor no sepa qué certificado SSL mostrar cuando un dispositivo cliente intenta conectarse de forma segura a uno de los sitios web. Esto es porque el protocolo de enlace SSL/TLS se produce antes de que el dispositivo cliente indique a través de HTTP a qué sitio web se está conectando.
La Indicación del nombre del servidor (SNI) está diseñada para resolver este problema. La SNI es una extensión del protocolo TLS (anteriormente conocido como el protocolo SSL), que se utiliza en HTTPS. Se incluye en el proceso de protocolo de enlace TLS/SSL para garantizar que los dispositivos de los clientes puedan ver el certificado SSL correcto para el sitio web al que intentan acceder. La extensión permite especificar el nombre de host, o nombre de dominio, del sitio web durante el protocolo de enlace TLS, en lugar de cuando se abre la conexión HTTP después del protocolo de enlace.
Dicho de forma más simple, SNI hace posible que un dispositivo de usuario abra una conexión segura con https://www.example.com, aunque ese sitio web esté alojado en el mismo lugar (misma dirección IP) que https://www.something.com, https://www.another-website.com y https://www.example.io.
SNI evita lo que se conoce como "error habitual de coincidencia de nombres": cuando un dispositivo cliente (usuario) llega a la dirección IP correcta para un sitio web, pero el nombre del certificado SSL no coincide con el nombre del sitio web. Con frecuencia, este tipo de error da lugar al mensaje de error "Tu conexión no es privada" en el navegador del usuario.
SNI se añadió como una extensión de TLS/SSL en 2003; originalmente no formaba parte del protocolo. Es compatible con casi todos los navegadores, sistemas operativos y servidores web, con la excepción de algunos de los navegadores y sistemas operativos más antiguos que todavía están en uso.
Aunque SNI significa Indicación del nombre del servidor, lo que SNI "indica" en realidad es el nombre del host de un sitio web, o nombre de dominio, que puede ser distinto del nombre del servidor web que aloja realmente el dominio. De hecho, es habitual que varios dominios estén alojados en un mismo servidor, en cuyo caso se denominan nombres de host virtuales.
Un nombre de servidor es simplemente el nombre de un ordenador. En el caso de los servidores web, este nombre no suele ser visible para los usuarios finales, a menos que el servidor aloje solo un dominio y el nombre del servidor sea equivalente al nombre del dominio.
A menudo, un servidor web es responsable de varios nombres de host, o nombres de dominio (que son los nombres legibles por el ser humano de los sitios web). Cada nombre de servidor tendrá su propio certificado SSL si los sitios web utilizan HTTPS.
El problema es que todos estos nombres de servidor en un servidor están en la misma dirección IP. Esto no es un problema a través de HTTP, porque en cuanto se abre una conexión TCP, el cliente indicará qué sitio web está tratando de alcanzar en una solicitud HTTP.
Pero en HTTPS, primero tiene lugar un protocolo de enlace TLS, antes de que pueda comenzar la conversación HTTP (HTTPS sigue utilizando HTTP, solo encripta los mensajes HTTP). Entonces, sin SNI no hay manera de que el cliente indique al servidor con qué nombre de servidor está hablando. Como resultado, el servidor puede producir el certificado SSL para el nombre de servidor equivocado. Si el nombre en el certificado SSL no coincide con el nombre que el cliente está tratando de alcanzar, el navegador del cliente devuelve un error y suele cortar la conexión.
SNI añade el nombre de dominio al proceso de protocolo de enlace TLS, para que el proceso TLS llegue al nombre de dominio correcto y recibe el certificado SSL correcto, permitiendo que el resto del protocolo de enlace TLS proceda con normalidad.
En concreto, SNI incluye el nombre de servidor en el mensaje Client Hello, o el primer paso de un protocolo de enlace TLS.
Un nombre de servidor es el nombre de un dispositivo que se conecta a una red. En el contexto de Internet, un nombre de dominio, o el nombre de un sitio web, es un tipo de nombre de servidor. Ambos son independientes de la dirección IP asociada al nombre de dominio.
Un nombre de servidor virtual es un nombre de servidor que no tiene su propia dirección IP y está alojado en un servidor junto con otros nombres de servidor. Es "virtual" en el sentido de que no tiene un servidor físico dedicado, al igual que la realidad virtual solo existe digitalmente, no en el mundo físico.
SNI encriptado (ESNI) se suma a la extensión SNI encriptando la parte SNI del Hola del Cliente. Esto evita que cualquiera que se entrometa entre el cliente y el servidor pueda ver qué certificado solicita el cliente, lo que protege y asegura todavía más al cliente. Cloudflare y Mozilla Firefox lanzaron la compatibilidad con ESNI en 2018.
En este raro caso, es probable que el usuario no pueda acceder a ciertos sitios web, y el navegador del usuario devolverá un mensaje de error como "Tu conexión no es privada."
La gran mayoría de los navegadores y sistemas operativos son compatibles con SNI. Solo las versiones muy antiguas de Internet Explorer, las versiones antiguas del sistema operativo de BlackBerry y otras versiones de software obsoletas no son compatibles con SNI.
Para más información acerca del protocolo TLS/SSL, los certificados SSL y cómo funciona HTTPS, consulta ¿Qué es un certificado SSL? o consigue un certificado SSL gratuito de Cloudflare.