HSTS es un requisito para poder dar de alta una página web en el listado estático de Google Chrome de las páginas web que solo tienen soporte HTTPS, la lista “HTTP Strict Transport Security (HSTS)”.
Si tenemos una página con HTTPS podemos comprobar aquí https://hstspreload.appspot.com/ si se cumplen los requisitos y solicitar la inclusión en el listado de sitios HTTPS.
OJO: Que nos borren de este listado es bastante complicado por lo que hay que tener claro que queremos que nos incluyan (no hay que olvidar que es un listado estático incluido en el navegador).
¿Qué significa estar incluido en el listado de Google Chrome? Que el dominio y todos sus subdominios solo son accesibles a través de HTTPS.
Por otro lado los principales navegadores como Firefox, Opera, Safari, Internet Explorer 11 y Microsoft Edge también tienen una lista HSTS basada en el listado de Chrome.
¿Qué requisitos tiene que cumplir una web para ser incluida en la lista HSTS?
- Tener un certificado SSL válido.
- Redirigir de http a https.
- Que todos los subdominios sean https. Sobre todo es importante que el subdominio www sea accesible a través de https y exista en el DNS.
- Que haya un encabezado HSTS en base las peticiones HTTPS del dominio:
- Max-age: Por lo menos 18 semanas (10886400 segundos).
- Especificar la directiva includeSubDomains
- Especificar la directiva Preload.
- Si hay una redirección de una página, la página que hace la redirección tiene que tener también el encabezado HSTS y no solo la página de destino.
¿Cómo podemos conseguir cumplir el envío correcto del encabezado?
En WordPres debemos añadir al principio del archivo .htaccess y antes de las directivas de WordPress (que empiezan en la línea de «# BEGIN WordPress») lo siguiente:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Header always set Strict-Transport-Security “max-age=31536000; includeSubDomains; preload”
Con este código ya se pasará correctamente la validación de
https://hstspreload.appspot.com/
Actualización 03/sep/2016: También se puede añadir este encabezado editando el archivo nginx.conf
Añadir la siguiente línea al archivo nginx.conf (normalmente está en: /etc/nginx/nginx.conf):
add_header Strict-Transport-Security "max-age=15768000" always;
y así no tenemos que añadirlo en el archivo htaccess.
O si queremos incluir los subdominios se puede añadir:
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;
Para comprobar la sintaxis del archivo de configuración de Nginx (/etc/nginx/nginx.conf) podemos usar:
sudo nginx -t
que nos dirá si está todo correcto.
Hacemos un restart y a funcionar.
Hola buenas,
gracias por el tutorial.
Y esas reglas en el htaccess permiten que mi web esté accesible con www y sin www? Quiero decir, cubre todas las posibilidades?
Y qué ocurre si quiero mi wordpress en un subdominio de mi dominio principal y sólo quiero el subdominio con hsts?
Gracias, un saludo.
Buenas tardes Pablo,
Esas reglas son independientes de que la web sea accesible con o sin las www. Eso lo hace el código de WordPress / configuración de WordPress que va después en el .htaccess.
Si lo quieres en un subdominio, pones el código solo en el .htaccess del subdominio y no en el principal.
Un saludo.