HTTPS 프로토콜을 공부하다보면 자주 만나게 되는 개념이 HSTS(HTTP Strict Transport Security)입니다.
1. HSTS란?
일반적으로 HTTPS를 강제하게 될 때 서버측에서 302 Redirect를 이용하여 전환시켜 줄 수 있지만 이것이 취약점 포인트로 작용될 수 있습니다. HSTS는 클라이언트(브라우저)에게 HTTPS를 강제하는 방식으로, Plain Text(HTTP) 연결 자체가 최초부터 시도되지 않게 합니다.
사용자가 최초로 사이트에 접속시, 웹서버는 HSTS 설정 정보를 브라우저에게 응답하고, 브라우저는 일정시간(max-age) 동안 해당 웹사이트에 https 접속을 강제화합니다. 크롬은 chrome://net-internals/에서 HSTS 적용 도메인을 조회할 수 있으며, google/twitter 등은 크롬에 하드코딩되어 preload로 강제화됩니다.
2. HSTS 설정 방법
Nginx:
- max-age=63072000: HSTS가 브라우저에 설정될 시간(초, 2년)
- includeSubdomains: SubDomain까지 확장 적용
- preload: 클라이언트측 preload
3. 설정 안정성 테스트
https://hstspreload.org 에서 HSTS 적용을 확인합니다.
4. SSL Strip 방어
SSL/TLS 세션을 강제로 HTTP 세션으로 유도하는 SSL Strip 공격:
- 사용자는 http://bank로 연결 시도
- 웹서버는 https로 연결하도록 응답
- 공격자는 응답을 조작하여 http로 사용자에게 응답
- 사용자는 http로 연결→ 공격자는 https로 웹서버에 전달
- 공격자는 내용을 감청 가능
HSTS로 적용되면 클라이언트에서 HTTPS 접속만 강제화되어 SSL Strip 공격을 방어할 수 있습니다.
5. 결론
HTTPS를 이용한 웹사이트를 운영중이라면 필수로 설정합시다!
원본: rsec.kr/?p=315