Server Name Indication: ¿qué se esconde tras el estándar SNI?

La seguridad en Internet es fundamental. Por este motivo se trata de proteger a usuarios y servidores de ataques maliciosos tanto con estándares como con certificados y protocolos como el protocolo Transport Layer Security (TLS). No obstante, este contiene algunos problemas, de ahí que se haya creado una extensión conocida como Server Name Indication (SNI), en castellano, indicador del nombre del servidor.

¿Para qué sirve el Server Name Indication?

Para poder entender los motivos que impulsaron el desarrollo de SNI, hay que comprender primero el funcionamiento de TLS. El sucesor del protocolo Secure Sockets Layer (SSL) se conoce como protocolo de mutuo acuerdo TLS (handshake TLS). Aquí, tanto el cliente como el servidor, que en la práctica se suelen corresponder con el navegador y la página web, intercambian información incluso antes de que empiecen a transferirse los datos. En esta presentación virtual, el servidor se identifica ante al cliente enviando el certificado de seguridad correspondiente. Una vez que este lo ha verificado, ambas partes inician la comunicación e intercambian datos. Por el contrario, si la verificación falla, no tiene lugar la transferencia de datos.

Pero ¿qué sucede cuando varias páginas web se alojan en una misma dirección IP como en el caso del hosting virtual? Dado que IPv6 no se ha impuesto todavía, se trabaja en un espacio de direcciones IP muy limitado y, en consecuencia, cada dominio no puede reclamar una dirección IP propia. Entonces ¿a quién dirige “su saludo” el cliente, esto es, el primer paso requerido en un protocolo de mutuo acuerdo TLS? Existe una probabilidad muy alta de que responda la web equivocada, no envíe un certificado correcto con el nombre de host adecuado y no se establezca la conexión. Por eso, es importante que el cliente comunique al servidor con qué dominio (host) quiere iniciar una conexión, actividad adjudicada al Server Name Indication.

Hecho

Si al comparar el certificado aparece alguna discrepancia (por ejemplo, el nombre de la página web solicitada no coincide en absoluto con el nombre del certificado), el cliente interrumpe la comunicación. El motivo se debe a que tal tipo de incongruencia puede traer consigo un gran riesgo para la seguridad en forma de ataque man in the middle.

¿Cuál es el funcionamiento de SNI?

No suele haber ningún problema cuando se da el caso de que en una conexión insegura se alojen varias webs en una misma dirección IP. En HTTP está estipulado que se indique en el encabezado el nombre del host cuando se solicita una página web. No obstante, en TLS el acuerdo tiene lugar incluso antes de que el navegador pueda enviar estos datos. El Server Name Indication se encarga de transmitir el nombre del host antes de que servidor y cliente intercambien el certificado.

SNI es una extensión del protocolo de cifrado TLS que a su vez forma parte de la pila de protocolos TCP/IP y se encarga de ampliar el protocolo Transmission Control Protocol (TCP) con un cifrado. HTTP pasa a ser HTTPS a través de una capa adicional. Si se ha ampliado TLS con el Server Name Indication, el protocolo de seguridad proporciona un campo adicional para el acuerdo mutuo. En el campo ClientHelloExtension se encuentra el campo opcional ServerName, donde el cliente introduce el nombre del host al que se quiere dirigir (lo que el navegador asume automáticamente), asegurándose de que responde el host adecuado.

Server Name Indication en el navegador

Como usuarios de Internet habituales no tendríamos por qué siquiera conocer los procesos en torno a SNI. La mayoría de los usuarios no tienen que instalar ni configurar nada y basta con usar un sistema operativo y un navegador actualizados: Firefox, Chrome, Edge, Opera y Safari son compatibles por defecto con la extensión. No obstante, Server Name Indication no está disponible para los usuarios que siguen utilizando Windows XP u otras versiones de Windows antiguas junto a Internet Explorer. Si se usa un sistema operativo que no puede seguir siendo actualizado, se puede utilizar un navegador que sí soporte el indicador del nombre del servidor. También la mayoría de los navegadores de los dispositivos móviles utilizan SNI.

Servidor: IIS, Nginx y Apache con SNI

La situación cambia cuando se trata de administrar un servidor web, ya que entonces hay que tomar una serie de medidas en función del servidor que se utiliza. Desde ISS 8, Microsoft ha integrado por defecto una opción para el Server Name Indication en su software. No obstante, no ocurre igual en el servidor HTTP de Apache, que permite integrar SNI a través de Open SSL (mod_ssl). Básicamente solo es necesario ejecutar el módulo con las extensiones TLS, que vienen por defecto a partir de la versión 0.9.8k. Para poder ver las instrucciones detalladas sobre la instalación en Apache de SNI basta con acceder a Apache HTTP Server Wiki.

También Nginx soporta SNI a partir de la versión 0.5.23, funcionando en principio como Apache. Para comprobar si la versión del operador es compatible con Server Name Indication, basta con introducir el comando nginx –V. Si se obtiene una respuesta positiva, entonces el webmaster ha de atribuir un nombre a cada host virtual y asignar el certificado correcto. La documentación oficial de Nginx ofrece más información al respecto.

Consejo

Si tu página web todavía no está cifrada puedes acceder a la Guía Digital de IONOS para ver cómo cambiar la web a HTTPS.

¿Cuáles son los inconvenientes de SNI?

El Server Name Indication no solo trae ventajas consigo. Por una parte, hay que tener en cuenta que no todos los navegadores son compatibles, aunque esto solo afecta a una cantidad muy reducida de usuarios. Por otra parte, no hay que olvidar que SNI no es un modelo perfecto, sino una solución transitoria, ya que transfiere los datos sin cifrar. Aunque solo se trate del nombre del host, esta información no debería ser accesible a terceros si se llevara a cabo un cifrado completo.

Claro está que la seguridad será mayor si no hay que recurrir a SNI y cada página obtiene una dirección IP. No obstante, como ya se ha indicado, esto no es posible, pues las direcciones IP disponibles son muy limitadas, al menos hasta que IPv6 se implemente a nivel mundial. Hasta entonces, hay que encontrar soluciones alternativas: una de las posibilidades es el Server Name Indication, aunque no la única. El certificado Subject Alternative Name (SAN) permite introducir varios dominios o nombres de host. Esto significaría que al servidor no le importa a qué dominio quiere responder el cliente, pues el certificado vale para todos los dominios del servidor. Sin embargo, en comparación, estos certificados tienen un coste superior, lo que explicaría por qué muchos gestores de páginas web no están preparados para implementarlos. Antes que no utilizar nada, SNI se presenta como una buena solución provisional.