Cómo configurar HSTS en Nginx

Dificultad: Fácil
Tiempo de Lectura: 2 minutos

HSTS es la abreviación para HTTP Strict Transport Security, que en su mejor traducción significaría «Seguridad Estricta para el Transporte HTTP». Se trata de una política de seguridad donde un servidor (en este caso Nginx) especifica a los navegadores web por ejemplo, que el uso de HTTPS es requerido para establecer una conexión con ellos. ¿Qué quiere decir esto? Qué al usar HSTS estarás forzando a tus visitantes a usar SSL siempre que establezcan una conexión con tu web.

¿Cómo funciona HSTS?

Esta política de seguridad de HSTS se transmite desde el servidor web hacia el usuario a través de los headers (cabeceras) HTTP usando un campo llamado: «Strict-Transport-Security«. El usuario se verá obligado a usar SSL durante el tiempo especificado en el campo «max-age».

Configurar HSTS en Nginx

Como comentamos antes, HSTS se establece desde los headers, por lo tanto lo que haremos será agregar esta línea en nuestra configuración de Nginx para el sitio que corra con HTTPS:

add_header Strict-Transport-Security "max-age=31536000";

En tu bloque de configuración seguramente se vea parecido a esto:

server {
access_log off;
error_log  logs/error_log warn;
        listen xx.xx.xx.xx:443 ssl spdy;
        server_name  www.tusitio.com;
        add_header Strict-Transport-Security "max-age=31536000";

En este ejemplo la variable ‘max-age’ define cuanto tiempo estarás forzando a tus usuarios a usar HTTPS, es un valor en segundos. El que hemos usado aquí es de 1 año.

Para dejarlo efectivo hagamos un reload del servicio:

service nginx reload

Otras opciones de HSTS

‘includeSubdomains’: se usa para asegurarte de que todos tus subdominios también esten forzados a usar HTTPS.

‘preload’: le indica al navegador que te incluya en la lista de sitios que corren HSTS por defecto, esta lista es mantenida por Google Chrome (aunque también usada por Firefox y Safari también).

Para agregar estas dos opciones basta con agregarlas a la línea que ya anteriormente habíamos cargado en Nginx de esta manera:

add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";

Luego corre un reload de Nginx para tomar los cambios:

service nginx reload

 

¿Cómo puedo verificar que HSTS está funcionando en mi sitio?

Simplemente basta con correr curl desde la consola:

[esteban@localhost ~]$ curl -I https://guiadev.com
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 21 Apr 2015 13:24:49 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Pingback: https://guiadev.com/xmlrpc.php
Strict-Transport-Security: max-age=31536000

Como verán, en los headers vemos Strict-Transport-Security: max-age=31536000; eso quiere decir que está forzando la conexión de manera correcta para usar SSL.

Conclusión

El uso de Certificados SSL es de vital importancia para proteger el tránsito de información sensible a través de un servidor, y el agregar HSTS hace que todo este proceso sea aún más robusto para proteger la seguridad de los datos. Este tipo de configuraciones se pueden realizar en cualquier sitio, pero sobre todo está muy orientado a las tiendas online y lugares donde se aloja información de tarjetas de crédito o personal. A nivel técnico puede implementarse en cualquier servidor con acceso root, sea un Cloud VPS o Dedicado.

Tip importante: al implementar esto no olviden realizar una redirección 301 desde HTTP a HTTPS para asegurarte de que ningún tipo de tráfico se pierde.


¿Te resultó útil el artículo? Compártelo con tus colegas: