- 사이트가 오직 HTTPS 통신만 할 수 있음을 접속하고자 하는 Browser에게 알려주는 기능
- 보안을 강화시킬 목적으로 Browser에게 HTTPS만 사용하도록 강제하는 기능
- Browser에서도 HSTS 기능을 지원해야 HSTS가 제대로 동작
→ HSTS는 HTTPS를 클라이언트의 브라우저에서 강제화하여 최초 접속 시부터 HTTPS로 접속할 수 있도록 유도하기 위해 만들어짐
→ HTTPS를 이용한 웹사이트를 운영 중이라면 HSTS를 필수로 설정해 운영해야 함
→ SSL Stripping 공격(SSL/TLS Hijacking), cookie hijacking 공격 등을 방지하기 위해 사용
→ HSTS를 지원해도, SSL stripping 공격에 완전히 안전하지는 않음
**1. Browser로 접속 시, 주소창에 “https://” 혹은 “http://”와 같은 프로토콜 이름을 입력하지 않고, 도메인(www.xxx.com)만 입력
Browser는 먼저 HTTP(”http://” 사용)로 해당 도메인 접속을 시도함
도메인 이름만 추출하여, HSTS List와 비교해 존재하면(즉, 도메인 이름에 HSTS가 설정 되어 있다면) HTTPS를 사용해 접속**
4. 해당 도메인이 HTTPS만을 지원하는 HSTS라면, “301 Redirect” or “302 Redirect” response를 보내 사이트가 HTTPS로 다시 접속하라고 지시
→ Browser가 이전에 접속한 적이 없는 HTTPS 지원 사이트에 HTTP로 접속하면, “301 Redirect” Reply Message로 다시 HTTPS로 접속
→ Server는 HTTPS Reply Message에 “HSTS Policy”를 넣어 전송 ⇒ 암호화 되기전 packet인, HTTP response header field에 “Strict-Transport-Security”필드 정보 삽입
→ Browser는 위 정보를 받아 내부 HSTS List 구성
→ Server는 “MAX Age값”, “Subdomain 적용 여부 값”, “Preloaded List에 추가 여부 값”을 HTTP response header field에 담아 “Strict-Transport-Security”함께 client에 전달
→ 만약, Web Browser가 HTTP Protocol로 Web Server에 접속하고, HTTP Reply Message에 HSTS Policy 정보가 들어 있는 경우는 무시
5. 사이트는 status code로 HTTPS로 redirect를 인식한다면, 사용자는 주소창 옆에 있는 자물쇠 아이콘 혹은 접속된 URL 주소 앞에 “http://”를 보고, 해당 사이트가 HTTPS 지원함을 인식
Strict-Transport-Security: max-age=<expire-time>
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains
Strict-Transport-Security: max-age=<expire-time>; preload
Max Age 값
Subdomain 적용 여부 값
Preloaded HSTS Lists