HSTS (HTTP Strict Transport Security) je varnostni mehanizem: spletna stran z glavo brskalniku obiskovalca naroči, naj stran določen čas odpira izključno prek šifrirane povezave HTTPS, tudi če obiskovalec vpiše naslov http:// ali klikne staro povezavo.
Zakaj je potreben?
Potrdilo SSL in preusmeritev na HTTPS sama po sebi ne ščitita popolnoma. Če obiskovalec stran odpre s HTTP, se prva zahteva začne nešifrirano in šele odgovor strežnika jo preusmeri na HTTPS. V javnem Wi-Fi lahko napadalec to prvo zahtevo prestreže in obiskovalca zadrži na lažni, nešifrirani strani (SSL stripping). HSTS to vrzel zapre: brskalnik preklopi na HTTPS že pred pošiljanjem zahteve.
HSTS da še eno zaščito: če je potrdilo napačno, brskalnik obiskovalcu ne dovoli, da bi opozorilo preskočil in vseeno vstopil.
Zgradba glave
Strict-Transport-Security: max-age=31536000; includeSubDomains
- max-age: koliko sekund naj si brskalnik zapomni pravilo (31 536 000 sekund = 1 leto).
- includeSubDomains: pravilo velja tudi za vse poddomene.
- preload: označuje, da želiš domeno dodati na seznam HSTS, vgrajen v brskalnike (glej spodaj).
Brskalnik upošteva le glavo, prejeto prek HTTPS; poslana prek HTTP je brez učinka.
Vklop
Apache vagy LiteSpeed (.htaccess):
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>
Nginx: v bloku HTTPS server:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Cloudflare: če je domena za Cloudflare, ga vklopiš na strani SSL/TLS > Edge Certificates v razdelku HTTP Strict Transport Security (HSTS).
Po vklopu lahko v razvijalskih orodjih brskalnika (zavihek Omrežje, med glavami odgovora dokumenta) ali z ukazom curl -sI https://pelda.hu | grep -i strict preveriš, ali glava prispe.
Postopna uvedba
Ker si brskalnik pravilo zapomni za čas max-age in nastavitve pri obiskovalcih medtem ni mogoče preklicati, je dobro napredovati po korakih:
- Preveri, ali vse strani in viri brezhibno delujejo prek HTTPS, brez mešane vsebine.
- Začni s kratkim časom, na primer
max-age=300(5 minut), in brezincludeSubDomains. - Če nekaj dni ni težav, ga povišaj na en teden, nato na eno leto.
includeSubDomainsdodaj le, če ima vsaka poddomena (na primermail.,teszt., notranji sistemi) veljavno potrdilo.
HSTS preload
Brskalniki vsebujejo tudi vgrajen seznam domen, ki jih že ob prvem obisku odprejo le prek HTTPS. Za uvrstitev lahko zaprosiš na strani hstspreload.org, če glava prispe z vrednostjo max-age vsaj eno leto ter s stikaloma includeSubDomains in preload. Odstranitev s seznama lahko traja več mesecev, zato to izberi le, če si prepričan, da bodo vse poddomene domene trajno ostale na HTTPS.