HSTS — HTTP Strict Transport Security
HTTP Strict Transport Security (HSTS) je vlastnost webové stránky sdělit prohlížeči, že má se serverem komunikovat pouze přes zabezpečený protokol HTTPS a nikdy pomocí nezabezpečeného HTTP.
HSTS je účinná prevence proti MITM útokům, např. na veřejných Wi-fi sítích. Pointa nastává ve chvíli, kdy je uživatel přesměrován z protokolu HTTP na zabezpečený HTTPS. V tu chvíli může být útočníkem přesměrován na stránku s podvrženýnm obsahem, například banky. Protože banka používá HSTS, webový prohlížeč ví, že má na stránky přistoupit přímo přes protokol HTTPS. Podmínkou však je, aby uživatel dříve alespoň jednou takovou stránku navštívil a webový prohlížeč tak tuto informaci již měl.
HSTS není žádná komplexní technologie, ale pouze HTTP hlavička, která prohlížeči říká, že má používat pouze HTTPS a jak dlouho. Nastavení je tedy otázkou několika vteřin.
Konfigurace HSTS na Apache
HSTS můžete nastavit dvěma způsoby — přímo ve VirtualHost (doporučeno) nebo pomocí souboru .htaccess, pokud nemáte možnost VirtualHost upravovat.
1. metoda — VirtualHost:
Ujistěte se, že je aktivní modul headers_module
. Pokud není, aktivujte jej příkazem sudo a2enmod headers
a v souboru s VirtualHost, například /etc/apache2/sites-enabled/example.com.conf
, přidejte dva řádky:
<VirtualHost 1.2.3.4:443> Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" Header always set X-Frame-Options DENY </VirtualHost>
Apache restartujte /etc/init.d/apache2 restart
nebo service apache2 restart
.
Toto nastavení může být pouze na zabezpečeném HTTPS VirtualHost. Pro nezabezpečený VirtualHost nenastavujte.
Hodnota 63072000
prohlížeči říká, že má používat přímo HTTPS po dobou dvou let. Tato hodnota se nastaví při každé návštěvě stránky. Znovu tedy bude nastavena i při další návštěvě stránky příští týden, opět dva roky. includeSubDomains
znamená, že se nastavení vztahuje i na subdomény a preload
prohlížeči říká, aby doménu přidal do tzv. preload seznamu (více).
Stále však platí, že nezabezpečený VirtualHost musí mít nastaveno přesměrování na HTTPS. Čtěte, jak nastavit přesměrování na HTTPS.
2. metoda — .htaccess:
Do souboru .htaccess v kořenovém adresáři přidejte:
Header set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" env=HTTPS
Nastavením proměnné env
na konci řádku splníme podmínku specifikace dle RFC 6797, že HSTS nesmí být nastaveno pro nezabezpečený protokol HTTP, ale pouze HTTPS.