A HSTS (HTTP Strict Transport Security) egy biztonsági mechanizmus: a weboldal egy fejléccel arra utasítja a látogató böngészőjét, hogy egy megadott ideig kizárólag titkosított HTTPS-kapcsolaton keresztül nyissa meg az oldalt, akkor is, ha a látogató http:// címet ír be vagy egy régi linkre kattint.
Miért van rá szükség?
Az SSL tanúsítvány és a HTTPS-átirányítás önmagában nem véd teljesen. Ha egy látogató HTTP-vel nyitja meg az oldalt, az első kérés titkosítatlanul indul, és csak a szerver válasza irányítja át HTTPS-re. Egy nyilvános wifin egy támadó ezt az első kérést elfoghatja, és a látogatót egy hamis, titkosítatlan oldalon tarthatja (SSL stripping). A HSTS ezt a rést zárja be: a böngésző már a kérés elküldése előtt HTTPS-re vált.
A HSTS egy további védelmet is ad: ha a tanúsítvány hibás, a böngésző nem engedi a látogatónak, hogy a figyelmeztetést átugorva mégis belépjen.
A fejléc felépítése
Strict-Transport-Security: max-age=31536000; includeSubDomains
- max-age: hány másodpercig jegyezze meg a böngésző a szabályt (31 536 000 másodperc = 1 év).
- includeSubDomains: a szabály az összes aldomainre is érvényes.
- preload: jelzi, hogy a domaint fel szeretné vetetni a böngészőkbe beépített HSTS-listára (lásd lent).
A böngésző csak HTTPS-en kapott fejlécet vesz figyelembe; HTTP-n küldve hatástalan.
Bekapcsolás
Apache vagy LiteSpeed (.htaccess):
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>
Nginx: a HTTPS server blokkban:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Cloudflare: ha a domain Cloudflare mögött van, az SSL/TLS > Edge Certificates oldalon a HTTP Strict Transport Security (HSTS) résznél kapcsolhatja be.
Bekapcsolás után a böngésző fejlesztői eszközeiben (Hálózat fül, a dokumentum válaszfejlécei között) vagy a curl -sI https://pelda.hu | grep -i strict paranccsal ellenőrizheti, hogy a fejléc megérkezik-e.
Fokozatos bevezetés
Mivel a böngésző a szabályt a max-age idejére megjegyzi, és közben a beállítás nem vonható vissza a látogatóknál, érdemes lépésenként haladni:
- Ellenőrizze, hogy minden oldal és erőforrás hibátlanul működik HTTPS-en, vegyes tartalom nélkül.
- Kezdje rövid idővel, például
max-age=300(5 perc), és azincludeSubDomainsnélkül. - Ha néhány napig nincs gond, emelje egy hétre, majd egy évre.
- Az
includeSubDomainscsak akkor kerüljön bele, ha minden aldomainnek (példáulmail.,teszt., belső rendszerek) van érvényes tanúsítványa.
HSTS preload
A böngészők egy beépített listát is tartalmaznak azokról a domainekről, amelyeket már az első látogatáskor is csak HTTPS-en nyitnak meg. Felvételt a hstspreload.org oldalon kérhet, ha a fejléc legalább egyéves max-age értékkel, includeSubDomains és preload kapcsolóval érkezik. A listáról való törlés hónapokig tarthat, ezért ezt csak akkor válassza, ha biztos benne, hogy a domain minden aldomainje tartósan HTTPS-en marad.