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 |
|---|