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