La seguridad en Internet es fu­n­da­me­n­tal. Por este motivo se trata de proteger a usuarios y se­r­vi­do­res de ataques ma­li­cio­sos tanto con es­tá­n­da­res como con ce­r­ti­fi­ca­dos y pro­to­co­los 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 In­di­ca­tion (SNI), en ca­s­te­llano, indicador del nombre del servidor.

¿Para qué sirve el Server Name In­di­ca­tion?

Para poder entender los motivos que im­pu­l­sa­ron el de­sa­rro­llo de SNI, hay que co­m­pre­n­der primero el fu­n­cio­na­mie­n­to 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 co­rre­s­po­n­der con el navegador y la página web, in­te­r­ca­m­bian in­fo­r­ma­ción incluso antes de que empiecen a tra­n­s­fe­ri­r­se los datos. En esta pre­se­n­ta­ción virtual, el servidor se ide­n­ti­fi­ca ante al cliente enviando el ce­r­ti­fi­ca­do de seguridad co­rre­s­po­n­die­n­te. Una vez que este lo ha ve­ri­fi­ca­do, ambas partes inician la co­mu­ni­ca­ción e in­te­r­ca­m­bian datos. Por el contrario, si la ve­ri­fi­ca­ción falla, no tiene lugar la tra­n­s­fe­re­n­cia 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 di­re­c­cio­nes IP muy limitado y, en co­n­se­cue­n­cia, 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 pro­ba­bi­li­dad muy alta de que responda la web equi­vo­ca­da, no envíe un ce­r­ti­fi­ca­do correcto con el nombre de host adecuado y no se es­ta­ble­z­ca la conexión. Por eso, es im­po­r­ta­n­te que el cliente comunique al servidor con qué dominio (host) quiere iniciar una conexión, actividad ad­ju­di­ca­da al Server Name In­di­ca­tion.

Hecho

Si al comparar el ce­r­ti­fi­ca­do aparece alguna di­s­cre­pa­n­cia (por ejemplo, el nombre de la página web so­li­ci­ta­da no coincide en absoluto con el nombre del ce­r­ti­fi­ca­do), el cliente in­te­rru­m­pe la co­mu­ni­ca­ción. El motivo se debe a que tal tipo de in­co­n­grue­n­cia puede traer consigo un gran riesgo para la seguridad en forma de ataque man in the middle.

¿Cuál es el fu­n­cio­na­mie­n­to 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á es­ti­pu­la­do que se indique en el en­ca­be­za­do 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 In­di­ca­tion se encarga de tra­n­s­mi­tir el nombre del host antes de que servidor y cliente in­te­r­ca­m­bien el ce­r­ti­fi­ca­do.

SNI es una extensión del protocolo de cifrado TLS que a su vez forma parte de la pila de pro­to­co­los TCP/IP y se encarga de ampliar el protocolo Tra­n­s­mi­s­sion 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 In­di­ca­tion, el protocolo de seguridad pro­po­r­cio­na un campo adicional para el acuerdo mutuo. En el campo Clie­n­tHe­lloE­x­te­n­sion se encuentra el campo opcional Se­r­ve­r­Na­me, donde el cliente introduce el nombre del host al que se quiere dirigir (lo que el navegador asume au­to­má­ti­ca­me­n­te), ase­gu­rá­n­do­se de que responde el host adecuado.

Server Name In­di­ca­tion en el navegador

Como usuarios de Internet ha­bi­tua­les no te­n­dría­mos por qué siquiera conocer los procesos en torno a SNI. La mayoría de los usuarios no tienen que instalar ni co­n­fi­gu­rar nada y basta con usar un sistema operativo y un navegador ac­tua­li­za­dos: Firefox, Chrome, Edge, Opera y Safari son co­m­pa­ti­bles por defecto con la extensión. No obstante, Server Name In­di­ca­tion no está di­s­po­ni­ble para los usuarios que siguen uti­li­za­n­do Windows XP u otras versiones de Windows antiguas junto a Internet Explorer. Si se usa un sistema operativo que no puede seguir siendo ac­tua­li­za­do, se puede utilizar un navegador que sí soporte el indicador del nombre del servidor. También la mayoría de los na­ve­ga­do­res de los di­s­po­si­ti­vos móviles utilizan SNI.

Servidor: IIS, Nginx y Apache con SNI

La situación cambia cuando se trata de ad­mi­ni­s­trar 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 In­di­ca­tion 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á­si­ca­me­n­te solo es necesario ejecutar el módulo con las ex­te­n­sio­nes TLS, que vienen por defecto a partir de la versión 0.9.8k. Para poder ver las in­s­tru­c­cio­nes de­ta­lla­das sobre la in­s­ta­la­ció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, fu­n­cio­na­n­do en principio como Apache. Para comprobar si la versión del operador es co­m­pa­ti­ble con Server Name In­di­ca­tion, basta con in­tro­du­cir 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 ce­r­ti­fi­ca­do correcto. La do­cu­me­n­ta­ción oficial de Nginx ofrece más in­fo­r­ma­ció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 in­co­n­ve­nie­n­tes de SNI?

El Server Name In­di­ca­tion no solo trae ventajas consigo. Por una parte, hay que tener en cuenta que no todos los na­ve­ga­do­res son co­m­pa­ti­bles, 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 tra­n­si­to­ria, ya que tra­n­s­fie­re los datos sin cifrar. Aunque solo se trate del nombre del host, esta in­fo­r­ma­ció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 di­re­c­cio­nes IP di­s­po­ni­bles son muy limitadas, al menos hasta que IPv6 se im­ple­me­n­te a nivel mundial. Hasta entonces, hay que encontrar so­lu­cio­nes al­te­r­na­ti­vas: una de las po­si­bi­li­da­des es el Server Name In­di­ca­tion, aunque no la única. El ce­r­ti­fi­ca­do Subject Al­te­r­na­ti­ve Name (SAN) permite in­tro­du­cir varios dominios o nombres de host. Esto si­g­ni­fi­ca­ría que al servidor no le importa a qué dominio quiere responder el cliente, pues el ce­r­ti­fi­ca­do vale para todos los dominios del servidor. Sin embargo, en co­m­pa­ra­ción, estos ce­r­ti­fi­ca­dos tienen un coste superior, lo que ex­pli­ca­ría por qué muchos gestores de páginas web no están pre­pa­ra­dos para im­ple­me­n­tar­los. Antes que no utilizar nada, SNI se presenta como una buena solución pro­vi­sio­nal.

Ir al menú principal