Saltar al contenido

Activar HSTS Apache y nginx

7 noviembre, 2019
Que es HSTS – activar, configurar, precargar, apache y nginx

Que es HSTS (Strict Transport Security)

HSTS es un mecanismo de seguridad que se instala en el servidor Web para evitar los ataques «Man in the middle» evitando que el atacante pueda entrar en la web no segura HTTP y forzándolo a entrar por la web segura HTTPS.
Inicialmente hay un tiempo de carga de la web HTTP que redirecciona la url a HTTPS y es este el momento que puede aprovechar el atacante para redireccionar a una web de apariencia similar a la esperada por el usuario y comprometer sus datos. HSTS es el encargado de gestionar que nunca se cargue la web usando el protocolo HTTP.
Es importante saber que HSTS carga los datos enviando datos desde las cabeceras del servidor web hacia navegador del usuario la primera vez que entra a la web del servidor y esta información se guarda durante un tiempo definido para que este cliente no pueda ser atacado.

Activar y configurar HSTS en Apache

Para poder utilizar HSTS en un servidor Apache es necesario activar el módulo de cabecera Apache (mod_headers). Como administrador del servidor web, deberás escribir el siguiente comando en tu terminal:

sudo a2enmod headers

Ahora que hemos activado el modulo de cabeceras debemos reiniciar el servidor web para que se efectúen los cambios

sudo service apache restart

El servidor Apache HTTP permite instalar varios dominios desde un mismo servidor denominados virtualhosts, con configuraciones individualizadas. HSTS es una extensión de HTTPS, este mecanismo de seguridad solo está disponible para los hosts virtuales con el número de puerto 443, es decir, con el puerto predeterminado para HTTPS. Para garantizar la conexión cifrada a una web HTTPS en futuras visitas, como operador web deberás añadir la siguiente línea de comando para el host virtual deseado en el archivo de configuración de Apache https.conf:

Header always set Strict-Transport-Security "max-age=4838400; includeSubdomains;"

Adicionalmente se añadirán el campo de cabecera Strict-Transport-Security junto con otras directivas del contenedor VirtualHost:

ServerAdmin support@example.com
ServerName www.example.com
SSLEngine on
SSLCertificateFile /path/to/www.example.com.cert
SSLCertificateKeyFile /path/to/www.example.com.key
[…]
Header always set Strict-Transport-Security "max-age=4838400; includeSubdomains;"
DocumentRoot /var/www/

Así, cada vez que un navegador solicita una página web configurada de esta forma, Apache emite una cabecera HSTS con los parámetros deseados. En este ejemplo, el navegador recibe la orden de abrir, durante las próximas ocho semanas, todas las páginas web del dominio example.com, incluyendo sus subdominios, exclusivamente de forma cifrada con el certificado SSL/TLS.
Recuerda que debes reiniciar Apache para que se guarden los cambios realizados en la configuración.

Configurar y activar HSTS para NGINX

NGINX permite generar conexiones cifradas SSL/TLS con tan solo añadir una simple línea de código;

add_header Strict-Transport-Security "max-age=4838400; includeSubDomains";

Este ajuste debe realizarse en el archivo de configuración

 /etc/nginx/nginx.conf

Refiriendonos al VirtualHosts, en NGINX se utilizan los llamados server blocks para definir las directrices:

server {
listen 443 ssl;
server_name example.com;
ssl_certificate www.example.com.crt;
ssl_certificate_key www.example.com.key;
[…]
add_header Strict-Transport-Security "max-age=4838400; includeSubDomains";
}