HSTS: HTTPS-only forțat și HSTS Preload List — anti SSL Stripping în 2026
HSTS forțează browserul să refuze conexiuni HTTP pe domeniul vostru. Cu HSTS Preload List, atacurile SSL Stripping pe rețele publice devin imposibile.
Pe scurt
HSTS (HTTP Strict Transport Security, RFC 6797) e un header HTTP care instruiește browserul să refuze conexiuni HTTP pe acel domeniu pentru o perioadă declarată (max-age). Fără HSTS, atacul SSL Stripping (Marlinspike 2009) este posibil: un atacator în poziție MITM (rețea publică WiFi, ISP compromis) interceptează primul request HTTP al utilizatorului și redirecționează către o variantă fără TLS, livrând conținutul propriu.
Cu HSTS Preload, browserul are baked-in în cod faptul că domeniul e HTTPS-only — atac SSL Stripping inutil chiar și la primul request.
Atacul SSL Stripping pe Public WiFi
Cafenea aglomerată. Atacatorul setează un access point fake cu același SSID ca al cafenelei. Telefoanele clienților se conectează automat. Atacatorul rulează un proxy MITM (sslstrip, mitmproxy) care:
- Interceptează
GET http://firma.ro(primul request al utilizatorului) - Face request la
https://firma.roîn spate (atacator → server real) - Rescrie toate link-urile
https://înhttp://în răspuns - Returnează utilizatorului versiunea HTTP plain
- Atacatorul vede credențiale, sesiuni, date form în clar
Cu HSTS deja cunoscut de browser (din vizite anterioare), atacul nu funcționează — browserul nici nu trimite HTTP, merge direct HTTPS.
Anatomia headerului HSTS
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
max-age=63072000— 2 ani în secunde. Browserul reține că domeniul e HTTPS-only timp de 2 ani de la ultima vizită.includeSubDomains— aplică pe toate subdomeniile (*.firma.ro)preload— flag pentru submission la HSTS Preload List
HSTS Preload List — protecția definitivă
Preload List e o listă hardcodată în Chrome, Firefox, Safari, Edge: domeniile listate sunt HTTPS-only de la prima vizită vreodată. Nici un atac SSL Stripping pe primul request.
Submission la https://hstspreload.org/ — gratuit, dar:
- Cerință:
max-age≥ 31536000 (1 an) - Cerință:
includeSubDomainsactiv - Cerință:
preloaddirective prezent - Cerință: redirect 301 HTTP → HTTPS pe toate subdomeniile
- Cerință: TLS valid pe toate subdomeniile (testați înainte!)
Atenție: Reversing din Preload List durează 6-12 luni. Dacă deciziți greșit (ex. un subdomain nu e HTTPS), site-ul vostru e inaccesibil pe acel subdomain timp de luni.
Implementare pas-cu-pas
Pas 1 — Forțați HTTPS pe TOT
Redirect 301 HTTP → HTTPS la nivel server (nginx, Caddy, Apache, Cloudflare). HSTS în browser nu securizează prima conexiune fără preload.
nginx:
server {
listen 80;
server_name firma.ro www.firma.ro;
return 301 https://$host$request_uri;
}
Pas 2 — Adăugați header HTTPS
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
nginx:
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
Caddy: automat dacă e configurat HTTPS (default cu header Strict-Transport-Security adjustabil).
Pas 3 — Test cu max-age scurt întâi (1 lună)
Strict-Transport-Security: max-age=2592000; includeSubDomains
(Fără preload deocamdată.) Lasă 30 zile, verificați că niciun subdomain nu e accidental pe HTTP.
Pas 4 — Bump max-age la 2 ani + activă preload
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
Pas 5 — Submit la Preload List
https://hstspreload.org/ → enter domain → verificare automată cerințe → submit. Acceptarea durează 1-3 luni (browser releases).
Subdomenii: paranoia justificată
includeSubDomains aplică pe toate. Verificați că toate subdomeniile sunt HTTPS:
mail.firma.ro— webmail HTTPSapi.firma.ro— API HTTPSstaging.firma.ro— chiar și staging trebuie HTTPS dacă e publiclegacy.firma.ro— orice subdomain uitat va fi inaccesibil după preload
Audit complet înainte: dig pe toate subdomeniile + check fiecare are cert TLS valid.
Confuzii frecvente
“max-age=300 e suficient pentru testare.” — Greșit. HSTS Preload cere ≥31536000. Testarea cu max-age scurt e bună, dar fără submit preload nu sunteți protejat la primul request.
“HSTS îmi rupe staging.” — Doar dacă includeți staging în preload. Soluție: nu submitati staging.firma.ro separat; folosiți staging.firma.local intern doar.
“Am HSTS dar nu mă cunoaște browserul.” — Browser cunoaște HSTS doar după prima vizită successful HTTPS care setează headerul. Pentru protecție de la prima vizită → necesar Preload.
Verificați acum
ARTEMIS verifică prezența HSTS + max-age value + preload eligibility în orice scanare Site (2 EUR).
🔗 Soluții complementare CAI Technology
- ARTEMIS — Verificare HSTS + 36 alte verificări tehnice de securitate.
- Auditope — Audit holistic web (SEO + AI search + Performance + WCAG).
- Lexnomia — Evaluare conformitate UE (NIS2 / PCI-DSS — HSTS e cerință explicită PCI-DSS 4.0).
- BeLegal — Verificare gratuită 5 minute compliance UE.
- AriaUnited — Consultanță fonduri europene pentru investiții infrastructură TLS / WAF.