HSTS란?

서버가 웹 브라우저에게 접속할 때는 무조건 HTTPS만 사용하도록 강제하는 보안 프로토콜.

MITM과 SSL Stripping을 차단하기 위한 웹 보안의 핵심 요소로써, 최근 웹 보안의 필수 표준으로 매우 널리 사용.

 


HSTS 헤더 예시:

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload

 


HSTS 동작 방식:

웹 브라우저가 HSTS는 응답 헤더를 받는 순간 해당 도메인을 Max-age 동안 Known HSTS Host로 캐싱하고 HTTPS로 307 Internal Redirect를 수행해서 HTTPS로만 접속을 시도 합니다.

HSTS는 브라우저가 헤더를 수신한 시점부터 동작하며, Preload List에 등록되면 첫 방문 시점부터 HTTPS로 307 Internal Redirect를 수행합니다.

 

HSTS Preload List:

구글 Chromium 프로젝트의 일환.

전 세계 주요 브라우저가 이 리스트를 내려받아 자신의 소스 코드에 포함시키도록 해서 이 리스트에 등록된 도메인은 사용자가 태어나서 처음 방문하더라도 브라우저가 무조건 HTTPS로만 접속하게 유도한다.

만약, HSTS Preload List에 본인 도메인을 등록하고자 한다면 hstspreload.org 로 방문하여 요건을 충족하면 됩니다.


 

301/302 Status Code 사용하는 Standard Redirect 와 차이점은?
Standard Redirect는 클라이언트가 HTTP로 접속을 일단 허용하고, 수신 받을 때 마다 Standard Redirect를 응답으로 전송하여, 브라우저가 HTTPS로 전송하도록 유도합니다.

반면 Standard HSTS는 단 한 번의 Standard Redirect 은 허용하는데, 그 이후에는 307 Internal Redirect가 구동 됩니다.

그런데 처음부터 https:// 주소를 입력해서 접근하면 되지 않느냐 라고 어느 분이 이야기 하시던데요. 일반인 중에 www 정도를 쓰면 썼지 안쓰는 경우도 많고, https://를 따박따박 쓰는 변태 같은 사람은 거의 없습니다. 그래서 http://로 접근 하는 트래픽이 상당합니다..

No HTTPS
Enforcement 방식
동작 순서 비고
1 Standard Redirect 
(301/302 Status Code)
1. 브라우저가  HTTP 로 접속
2. 서버는 Standard Redirect 로 응답
3. 브라우저는 해당 HTTPS 주소로 재시도.
4. HTTPS 트래픽은 1 ~ 3번 계속 반복
트래픽 지연
불필요한 서버 리소스
원복 시, 즉시 적용 가능
2 Standard HSTS 1. 브라우저가 HTTP 로 접속
2. 서버는 Standard Redirect 로 응답**
3. 브라우저는 해당 HTTPS 주소로 재시도.
4. 서버가 HSTS 헤더를 HTTPS 응답으로 전송
5. 브라우저는 307 Internal Redirect 를 수행하여 무조건 HTTPS로만 전송
최초 접속 취약점 (Trust on First Use) 존재
지연 감소 및 서버리소스 절약
원복 시 클라이언트 캐시 만료까지 대기 필요

3 HSTS Preloading 1. 브라우저가 HTTP 로 접속
2. 브라우저는 307 Internal Redirect를 수행하여 무조건 HTTPS로만 전송
Trust on First Use 취약점 제거. 가장 강력한 방식
지연 감소 및 서버리소스 절약
원복 시 클라이언트 캐시 만료까지 대기 필요

 

** 웹 브라우저가 HTTP 로 접속 시, HTTP 응답에 HSTS를 박아서 응답주면, 서버가 Standard Redirect 로 응답을 줄 필요가 없지 않나?

RFC 표준 상 HTTP HSTS는 무시되고 동작을 안 해요. 무조건 HTTPS HSTS만 받아 들입니다. 그래서 Standard Redirect 를 통해서 한 번은 HTTPS로 한 번은 꺽어줘야 합니다.

RFC 6797 Section 8.1 dictates that User Agents (UAs) must process Strict-Transport-Security headers only when received over a secure connection (HTTPS). Upon receiving a valid header, the UA caches the host as a "Known HSTS Host" or updates its max-age and includeSubDomains directives. Invalid headers or those received over HTTP are ignored. 

 

'Security' 카테고리의 다른 글

GCM vs CBC 암호화 모드 비교  (0) 2025.10.31

+ Recent posts