X

HSTS: ¿qué es y cómo activarlo?

Vivimos una época en la cual las amenazas cibernéticas están a la orden del día, y esto ha llevado a la creación de tecnologías que permitan combatirlas. Entre estas tecnologías encontramos a HSTS, una herramienta que permite proteger nuestros sitios web frente a varias amenazas.

Introducción a HSTS

El acrónimo HSTS viene del inglés “HTTP Strict Transport Security”. Se trata de un header que actúa como mecanismo de seguridad, protegiendo a los sitios web frente a diversos tipos de ataque, como por ejemplo man-in-the-middle (MitM – también conocido como ataque de intermediario) y ataques de degradación (llamado protocol downgrade en inglés).

Cuando visitamos un sitio web, nuestro navegador de Internet se comunica con un servidor utilizando los protocolos HTTP y HTTPS. El protocolo HTTP transmite la información como texto plano, lo cual la hace muy vulnerable, mientras que HTTPS la transmite de forma encriptada, que por supuesto es mucho más seguro.

Si bien la adopción del protocolo HTTPS y de los certificados SSL ha sido gigantesca, la mayoría de los sitios web aún permiten una conexión mediante HTTP, lo cual puede dejar una pequeña puerta de entrada para los atacantes. Y aquí es donde interviene HSTS.

Básicamente, lo que HSTS hace es informarle al navegador que se debe interactuar con nuestro sitio web sólo mediante HTTPS, lo cual básicamente anula la posibilidad de usar conexiones inseguras que no estén encriptadas. Una vez el navegador recibe la orden del header HSTS, automáticamente convertirá cualquier petición HTTP en HTTPS, estableciendo una conexión segura.

El funcionamiento de HSTS paso a paso

La forma en que HSTS funciona en realidad es más sencilla de lo que parece, pero igualmente vamos a explicarlo paso a paso.

HSTS comienza a funcionar cuando se establece una conexión HTTPS entre el navegador y el sitio web. Esta conexión inicial es extremadamente importante porque es cuando el servidor enviará las políticas de HSTS al navegador.

El navegador, al recibir el header HSTS, recibe la información que el mismo contiene, en donde se especifica por cuánto tiempo se debe forzar el protocolo HTTPS, también se indica si se debe aplicar la misma medida para algún subdominio e incluso se puede incluir una directiva de precarga, la cual permite que el sitio esté cargado en una lista de webs que funcionan con HSTS, la cual es conservada por el navegador. Todo esto se configura en el servidor como veremos más abajo.

Y a partir de ese momento el navegador sabe que debe enviar las peticiones a ese sitio mediante HTTPS en lugar de HTTP, por el tiempo que el header haya especificado. Esta carga forzada de HTTPS consiste en lo siguiente:

  • Redirección automática a HTTPS: si el usuario intenta acceder al sitio mediante HTTP, por ejemplo escribiendo “http://eldominio.com” en la barra de direcciones, el navegador automáticamente convertirá la petición a HTTPS, evitando que el usuario pueda utilizar una conexión insegura.
  • Validación del certificado: el navegador solo procederá a realizar la conexión si el certificado SSL del sitio web es válido. Si el certificado presenta algún problema, por ejemplo si está vencido o si el dominio no coincide, entonces el navegador bloqueará la conexión.
  • Protección para subdominio: si el header HSTS incluye la protección para subdominios, entonces la misma política se aplicará a los subdominios indicados, lo cual es muy útil para proteger otras secciones de un sitio web.

La directiva de precarga que mencionamos previamente es muy útil porque permite que un sitio web integre una lista de sitios que deben forzar HTTPS. Esta lista es mantenida por los distintos proveedores de navegadores. La precarga permite que el navegador sepa de antemano que para acceder a ese sitio tiene que hacerlo vía HTTPS.

Por supuesto para poder integrar dicha lista se deben cumplir con ciertos requerimientos específicos, que básicamente son una configuración mínima de max-age en el header, incluir subdominios, tener un SSL válido, redirigir el tráfico HTTP a HTTPS, entre otros. La solicitud se realiza directamente mediante una web de lista de precarga.

Explicación de los componentes

Como venimos comentado, este header es relativamente simple, y también lo son sus componentes. HSTS básicamente consiste en tres directivas:

  • max-age: esta directiva es obligatoria e indica durante cuánto tiempo el navegador debe recordar usar una conexión HTTPS al acceder a un sitio web. Se especifica en segundos, por ejemplo la configuración max-age=31536000 es muy común, e indica al navegador que debe establecer la conexión HTTPS por un período de un año, que por supuesto equivale a 31536000 segundos.
  • includeSubDomains: es una directiva opcional pero muy recomendada, y se utiliza para indicar que se debe forzar la misma política de carga HTTPS en los subdominios.
  • preload: esta es la directiva de precarga, y también es opcional. Como ya mencionamos, se utiliza cuando deseamos que nuestro sitio web integre una lista de precarga, de forma que el navegador sepa de antemano que debe acceder al sitio vía HTTPS, incluso si es la primera vez que ingresamos.

Beneficios de usar HSTS

Los beneficios de utilizar este header son muchos, veamos a continuación todas sus bondades:

  • Seguridad mejorada: HSTS reduce significativamente el riesgo de ataques de intermediario (man-in-the-middle o MitM). Esto se logra al forzar una conexión mediante HTTPS entre el navegador y el servidor. Esta protección impide que terceros puedan interceptar y modificar la información que viaja entre el navegador y el server.
  • Protección contra ataques de degradación: esta tecnología permite también evitar los ataques de degradación, los cuales básicamente hacen que una conexión pase de HTTPS a HTTP, un protocolo más vulnerable. Afortunadamente al forzarse el uso de HTTPS no quedamos expuestos a esta amenaza.
  • Mejora la confianza del usuario: si forzamos a los navegadores a siempre utilizar una conexión HTTPS, estaremos mejorando la confianza de nuestros visitantes ya que siempre verán nuestra web de forma segura. Recordemos que los navegadores marcan los sitios como inseguros si se usa una conexión HTTP, así que siempre es mejor con HTTPS.
  • Redirección automática a HTTPS: HSTS convierte las peticiones HTTP en HTTPS, incluso si el visitante escribe manualmente “http://” en las barra de direcciones del navegador. Esto asegura que todas las interacciones con nuestra web se produzcan de forma segura.
  • Compromiso a largo plazo: una vez que el navegador recibe el header, se verá obligado a forzar las conexiones HTTPS según se especifique en la directiva max-age, incluso si el usuario intenta acceder mediante HTTP.
  • Mejora de la seguridad mediante precarga: la función de precarga de HSTS es extremadamente útil, permitiendo que se produzca una conexión segura con nuestra web desde la primera vez que un usuario accede a la misma.

Cómo activar HSTS

Lo bueno de este header es que todo lo que a él refiere es extremadamente simple, y por supuesto el proceso de activación también es muy sencillo. A continuación vamos a ver tres escenarios comunes donde aplicarlo: en servidores cPanel, en la configuración de Apache en servidores planos y en la configuración de Nginx también en sistemas planos.

En todos los ejemplos el header se configurará con duración de un año, incluirá la opción de subdominios y la opción de precarga.

Activación en cPanel mediante .htaccess

Lo primero que debemos hacer es acceder a nuestra cuenta cPanel, y una vez dentro ingresamos al Administrador de Archivos.

Hacemos click en la opción de Configuración (arriba a la derecha) y activamos la opción para mostrar archivos ocultos.

Ahora ingresamos a la carpeta que contiene nuestro sitio web, que generalmente es public_html, y allí editamos el archivo “.htaccess”, o si el archivo no existe directamente lo creamos.

Para activar HSTS mediante .htaccess simplemente debemos añadir estas líneas al archivo, en la parte de arriba:

# Activamos HSTS
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule>

Guardamos los cambios y listo, HSTS estará activo.

Activación en cPanel como root

La configuración que veremos a continuación se realiza como root para activar el header a nivel global, es decir en todo el servidor. Recomendamos que este proceso solo lo realicen usuarios avanzados o con suficiente conocimiento técnico.

Primero que nada accedemos a WHM como root.
Ingresamos en Apache Configuration y hacemos click en el editor de includes.
Dentro de Pre-Main Include seleccionamos la opción All Versions, y añadimos la siguiente configuración:

<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule>

Ahora simplemente guardamos los cambios y reiniciamos Apache.

Si queremos probar si el header se activó según lo esperado, podemos ejecutar una consulta mediante curl en una consola/terminal:

[usuario@localhost ~]$ curl -sI https://dominio.com | grep -i Strict-Transport-Security

El resultado debería ser el siguiente:

strict-transport-security: max-age=31536000; includeSubdomains; preload

Por supuesto tenemos que reemplazar «dominio.com» por el dominio real que nos interesa probar.

Activación de HSTS en Apache

Lo primero es definir si queremos activar el header para un solo sitio web o de forma global para todos los sitios dentro de Apache.

Para el primer caso, debemos editar el archivo de configuración del sitio, que generalmente se encuentra en /etc/apache2/sites-available/, y allí añadir la siguiente configuración en el bloque VirtualHost con puerto 443:

# Activamos HSTS
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

Recordemos que esta configuración se añade para el puerto 443 en el bloque mencionado junto al resto de configuraciones de SSL, no se añade para el puerto 80.

Y si deseamos activarlo de forma global, debemos agregar la misma configuración el archivo principal, generalmente ubicado en /etc/apache2/httpd.conf

En este caso cargamos la configuración en donde tengamos configuradas las directivas globales, o bien podemos probar al final del archivo.

En todos los casos podemos probar la nueva configuración con el siguiente comando:

apachectl configtest

Y si el resultado no indica problemas procedemos a reiniciar Apache:

systemctl apache2 restart

Activación de HSTS en Nginx

El proceso para habilitar el header en Nginx es muy sencillo, en el enlace anterior hay una guía completa al respecto pero aquí vamos a simplificarlo. Lo primero es editar el archivo de configuración de nuestro sitio web, cuya ubicación puede variar según cómo esté instalado y configurado Nginx. Generalmente encontramos el archivo dentro de /etc/nginx/conf.d/ o bien /etc/nginx/sites-available/

Al editar el archivo debemos dirigirnos al server block donde tenemos nuestras configuraciones de SSL, y allí ingresar la siguiente configuración:

# Activar HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

Guardamos el cambio y probamos la configuración de Nginx:

nginx -t

Si no hay errores podemos proceder a hacer un reload para tomar los cambios:

systemctl reload nginx

O bien un reinicio:

systemctl restart nginx

Conclusión

HSTS es uno de los mejores headers que existen para mejorar la seguridad de nuestro sitio web, forzando conexiones mediante HTTPS y protegiendo a los visitantes frente a ataques de intermediario y ataques de degradación. Lo mejor de todo es que es muy fácil de configurar, ya sea en entornos cPanel o directamente en servidores sin panel de control.

Artículos relacionados