Kort svar
HSTS (HTTP Strict Transport Security) er en HTTP-header der instruerer browseren om altid at bruge HTTPS til et domæne i en angiven periode (max-age), selv hvis brugeren skriver http:// eller klikker et HTTP-link. Det eliminerer det sårbare første ukrypterede besøg og beskytter mod SSL-stripping-angreb. De vigtige direktiver er max-age, includeSubDomains og preload — og de to sidste skal håndteres med omtanke.
Problemet HSTS løser
Selv med en perfekt HTTP-til-HTTPS-redirect findes der et hul: det allerførste request går over HTTP, før redirecten når frem. En angriber på netværket (et åbent WiFi) kan opfange det request og lave et SSL-stripping-angreb — holde brugeren på HTTP og videresende ukrypteret. HSTS lukker hullet: efter første besøg husker browseren at domænet kun må tilgås over HTTPS, og opgraderer selv alle fremtidige HTTP-forsøg til HTTPS internt, før noget sendes. Det supplerer redirecten beskrevet i HTTPS forklaret.
Headeren og dens direktiver
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
- max-age — hvor længe (i sekunder) browseren skal huske kun at bruge HTTPS.
31536000er ét år, den anbefalede værdi for produktion. - includeSubDomains — anvend reglen på alle subdomæner, ikke kun det domæne der sendte headeren.
- preload — signalér at domænet må optages på browserens indbyggede preload-liste, så HTTPS gælder allerede ved allerførste besøg.
Sådan sætter du headeren
# nginx — sæt kun HSTS på HTTPS-serveren, aldrig på port 80
server {
listen 443 ssl;
server_name example.com;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}
Den afsluttende always sikrer at headeren også sendes på fejlsvar. Sæt aldrig HSTS-headeren på et HTTP-svar — den ignoreres alligevel og er et tegn på fejlkonfiguration.
Faldgrube 1: includeSubDomains rammer alt
Sætter du includeSubDomains, gælder HTTPS-tvangen for hvert subdomæne — også interne værktøjer, legacy-systemer eller test-subdomæner der måske kun kører HTTP. Hvis blot ét af dem ikke har et gyldigt certifikat, bliver det utilgængeligt i browseren indtil max-age udløber. Kortlæg alle subdomæner før du aktiverer direktivet.
Faldgrube 2: preload er svær at fortryde
At komme på preload-listen er nemt; at komme af den er langsomt. Listen er hårdkodet i browserne og opdateres kun med nye browserudgivelser, så afmelding kan tage måneder. Optag aldrig et domæne på preload-listen før:
- Alle subdomæner har gyldige certifikater og kører HTTPS.
- Du er sikker på at hele domænet skal forblive HTTPS-only på ubestemt tid.
- Du har testet med en lavere
max-ageførst (fx en uge), før du hæver til ét år.
Faldgrube 3: et udløbet certifikat bliver fatalt
Uden HSTS kan en bruger i nødstilfælde klikke sig forbi en certifikat-advarsel. Med HSTS fjerner browseren den mulighed — et udløbet eller fejlende certifikat gør sitet fuldstændig utilgængeligt, uden vej udenom. HSTS hæver dermed indsatsen på certifikat-overvågning betragteligt: et certifikat du før kunne nå at forny med lidt forsinkelse, bliver nu til en hård nedetid i samme øjeblik det udløber.
Hvordan CertControl understøtter en sikker HSTS-udrulning
HSTS er kun sikkert hvis certifikaterne aldrig fejler — og includeSubDomains betyder at alle subdomæner skal være sunde. CertControl opdager jeres subdomæner via Certificate Transparency og DNS, validerer certifikat og kæde på hvert endpoint, tjekker om HSTS-headeren er sat, og advarer i god tid før et certifikat udløber — netop fordi et udløb under HSTS ikke giver nogen nådesfrist. HSTS er den sidste lås oven på et korrekt TLS handshake og en ren HTTPS-redirect.
Ofte stillede spørgsmål
Hvad er forskellen på en HTTPS-redirect og HSTS?
En redirect sender brugeren fra HTTP til HTTPS, men det første request går stadig over HTTP og kan opfanges. HSTS får browseren til at opgradere til HTTPS internt, før noget sendes — så det sårbare første besøg forsvinder efter første gang.
Hvad gør includeSubDomains?
Det udvider HTTPS-tvangen til alle subdomæner under domænet. Det er kraftfuldt, men farligt: kører blot ét subdomæne uden gyldigt certifikat, bliver det utilgængeligt indtil max-age udløber. Kortlæg alle subdomæner først.
Bør jeg bruge preload?
Kun når du er helt sikker. Preload-listen er hårdkodet i browserne, og afmelding kan tage måneder. Sørg for at hele domænet og alle subdomæner er HTTPS-only og forbliver det, før du optager domænet på listen.
Hvilken max-age bør jeg vælge?
Til produktion anbefales 31536000 (ét år). Når du tester en ny HSTS-opsætning, så start med en lav værdi som en uge, og hæv den når du er sikker på at alt fungerer.
Hvad sker der med HSTS hvis mit certifikat udløber?
Sitet bliver fuldstændig utilgængeligt i browseren, uden mulighed for at klikke forbi advarslen. Derfor er certifikat-overvågning kritisk når HSTS er aktivt — et udløb giver ingen nådesfrist.