HSTS란? HTTPS 강제 접속의 원리

HSTS의 정의

HSTS(HTTP Strict Transport Security)는 웹 서버가 브라우저에게 ‘앞으로 이 사이트는 반드시 HTTPS로만 접속하라’고 지시하는 보안 정책입니다. 서버가 응답 헤더에 이 정보를 담아 보내면, 브라우저는 이후 같은 도메인에 접속할 때 사용자가 http://로 입력하더라도 자동으로 https://로 바꿔서 요청합니다.

이는 서버가 응답 헤더에 다음과 같은 형태로 지시하는 방식으로 동작합니다.

Strict-Transport-Security: max-age=31536000; includeSubDomains

여기서 max-age는 이 정책을 브라우저가 기억할 기간(초 단위)이고, includeSubDomains는 하위 도메인까지 정책을 적용할지 여부를 의미합니다.

동작 원리와 예시

HSTS가 없다면 사용자가 http://example.com으로 접속했을 때, 서버가 HTTPS로 리다이렉트 응답을 보내는 방식이 일반적입니다. 문제는 이 첫 번째 http 요청 자체가 암호화되지 않은 상태로 네트워크를 타고 나간다는 점입니다. 이 짧은 순간에 공격자가 중간에서 요청을 가로채 가짜 사이트로 연결시키는 ‘중간자 공격(MITM)’이나 ‘SSL 스트리핑’ 공격이 가능해집니다.

비유하자면, 매번 집에 들어갈 때 문을 잠그는 대신 ‘누가 물어보면 잠긴 문으로 안내해주세요’라고 부탁하는 것과, 아예 처음부터 잠긴 문으로만 들어가도록 열쇠를 미리 나눠준 것의 차이입니다. HSTS는 후자에 해당합니다. 브라우저가 한 번이라도 HSTS 헤더를 받은 도메인은, 이후 주소창에 http를 입력해도 네트워크 요청 자체를 보내지 않고 브라우저 내부에서 곧바로 https 주소로 변환해버립니다. 즉 취약한 첫 요청 구간이 아예 사라지는 것입니다.

또한 브라우저에는 ‘HSTS Preload List’라는 사전 등록 목록이 존재합니다. 여기에 등록된 도메인은 사용자가 단 한 번도 방문한 적이 없어도 브라우저에 미리 내장되어, 최초 접속부터 HTTPS로만 연결됩니다.

실무에서 HSTS를 쓰는 이유

실무에서는 다음과 같은 이유로 HSTS를 적용합니다.

  • SSL 스트리핑 같은 중간자 공격을 원천 차단할 수 있습니다.
  • 사용자가 실수로 http 링크를 클릭하거나 오래된 북마크를 사용해도 안전하게 HTTPS로 연결됩니다.
  • 보안 감사나 컴플라이언스 요구사항에서 HSTS 적용 여부를 점검하는 경우가 많습니다.

다만 적용 시 주의할 점도 있습니다. max-age를 길게 설정한 상태에서 인증서 문제나 HTTPS 설정 오류가 발생하면, 해당 기간 동안 사용자가 사이트에 아예 접속하지 못할 수 있습니다. 따라서 처음에는 짧은 max-age로 테스트한 뒤 점진적으로 기간을 늘리는 방식이 안전합니다. 결국 HSTS는 ‘한 번 정한 보안 규칙은 예외 없이 지킨다’는 원칙을 브라우저 레벨에서 강제하는 장치라고 이해하면 됩니다.

댓글 남기기