HTTP Strict Transport Security (HSTS)

HTTP Strict Transport Security

Hlavička přikazuje prohlížeči že má po stanovenou dobu komunikovat pouze přes HTTPS protokol.

Hlavička Strict Transport Security je určena pro konfiguraci prohlížečů (user-agents) aby komunikovali pouze a jen prostřednictvím bezpečného protokolu. Používá se k ochraně před útoky typu "man-in-the-middle" vynucením veškeré komunikace, po prvním přístupu na www stránky, na HTTPS protokolu. Hlavička vlastně prohlížeči říká, aby po příštích X-sekund vždy na web přistupoval přes HTTPS. Je možné požádat o umístění domény do seznamu distrubuovaného do prohlížeče (preload list) a mít tak zajištěnu HTTPS komunikaci vždy. Podmínkou pro akceptování hlavičky HSTS je zajištění HTTPS komunikace a platný, důvěryhodný SSL certifikát (komerční nebo Let's Encrypt).

Proč používat HSTS

Zajištění HTTPS komunikace je na internetu více než žádoucí. I díky krokům prohlížeče Chrome, který nezabezpečenou HTTP komunikaci označuje jako "Not secure / Nezabezpečeno". Nastavení hlavičky HTTP Strict Transport Security na webových stránkách je dalším krokem ke zvýšení bezpečnosti stránek a uživatelů.

Syntaxe

Strict-Transport-Security: max-age=<expire-time>; includeSubDomains; preload

Definice parametrů hlavičky HSTS

Definování doby vyžadující HTTPS
Strict-Transport-Security: max-age=31536000

Nastavení doby (sekundy), po kterou má prohlížeč komunikovat s doménou pouze přes bezpečný protokol HTTPS.

Vyžadování HTTPS i pro subdomény
Strict-Transport-Security: max-age=31536000; includeSubDomains

Direktiva includeSubDomains nastaví, že i subdomény musí být zabezpečeny a mít SSL certifikát.

Požadavek na vložení do preload listu
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Direktiva "preload" zajistí, po otestování, umístění do preload seznamu distribuovaného do prohlížeče.

Nastavení HSTS

.htaccess
# HSTS settings
Header set Strict-Transport-Security "max-age=300; includeSubdomains"

Nastavení HSTS na 5 minut pro otestování funkčnosti (300sec/60 = 5 minut).

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

Nastavení HSTS na 1 rok (365 dnů) + zabezpečení všech subdomén + bude požadováno vložení domény do preload listu.

Nginx
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains';

Potenciální chyby v nastavení

max-age=31536000 includeSubDomain Chybná konfigurace s mezerou. Rozdělení musí být se středníkem.
max-age=31536000, includeSubDomain Chybná konfigurace s čárkou.
max-age=0 Validní konfigurace, neznamená však že nula = neomezeně.

Nastavení includeSubDomains znamená, že pokud subdoména nebude dostupná na HTTPS protokolu, prohlížeč na ni neumožní přístup a zobrazení obsahu.

Užitečné zdroje

Žádost o vložení do HSTS preload listu
Žádost o vložení do HSTS preload listu