CertH certH
이 페이지 목차

HSTS 해설: max-age, preload, 그리고 무엇이 깨지는가

업데이트 2026-11-03 · 6 분 소요

HSTS는 사이트를 접속 불가로 만들 수 있는 유일한 보안 헤더입니다. 소유자 자신에게도 그렇습니다. 그리고 A+의 필수 조건이기도 합니다. 이 두 사실 사이의 간격은 전적으로 배포 규율에 달려 있습니다.

헤더가 실제로 하는 일

Strict-Transport-Security는 앞으로 N초 동안 이 호스트에 HTTPS로만 접속해야 한다고 브라우저에 알립니다. 한 번 받으면 브라우저는 내부 http:// 링크를 다시 쓰고, 인증서 오류 우회 클릭을 막고, 평문 HTTP를 완전히 거부합니다. 이 모든 것이 요청이 기기를 떠나기 전에 일어납니다.

그래서 리다이렉트로는 막을 수 없는 다운그레이드 공격을 막습니다. 리다이렉트는 첫 요청을 여전히 평문으로 보내고, 그것이 바로 네트워크상의 공격자가 가로채려는 요청입니다.

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

max-age는 취소할 수 없는 카운트다운

max-age는 클라이언트에 저장됩니다. 1년을 내보낸 뒤 헤더를 제거해도, 이미 본 모든 브라우저는 최대 1년간 HTTPS를 계속 강제합니다. 서버 쪽에 끄는 스위치는 없습니다.

CertH는 180일(15552000초)을 A+ 기준으로 봅니다. 1년이 일반적인 운영 값입니다. 180일 미만은 요약에서 여전히 HSTS 활성으로 집계되지만 A+는 열리지 않습니다.

includeSubDomains와 preload는 별개의 결정

includeSubDomains는 규칙을 모든 서브도메인으로 확장합니다. HTTP만 말하는 서브도메인이 하나라도 있으면(내부 도구, 레거시 관리 패널, 스테이징 호스트) 상위 도메인을 방문한 사람에게는 그 서브도메인이 열리지 않습니다. 먼저 DNS를 점검하세요.

preload는 더 나아갑니다. 도메인이 브라우저에 함께 배포되는 목록에 박히므로, 첫 방문에 헤더를 보기도 전에 규칙이 적용됩니다. 제거에는 몇 달이 걸리고 제거 목록 제출이 필요합니다. 헤더가 몇 달 이상 안정되기 전에는 preload를 추가하지 마세요.

  • •오류 페이지를 포함해 모든 HTTPS 응답에 헤더를 붙이세요. 헤더 없는 404는 브라우저에 아무것도 가르치지 않습니다.
  • •평문 HTTP로 HSTS를 보내지 마세요. 사양상 브라우저가 무시하므로 잘못 구성된 리다이렉트 루프를 이 방법으로 고칠 수 없습니다.
  • •includeSubDomains를 추가하기 전에 서브도메인에 HTTP 전용 서비스가 있는지 확인하세요.
  • •preload는 마지막에, max-age가 한동안 1년으로 안정된 뒤에만 추가하세요.

아무것도 깨지 않는 배포

실수가 빨리 만료되도록 짧은 max-age로 시작하세요. max-age=300입니다. 일주일 유지하며 깨진 서브도메인과 혼합 콘텐츠 보고를 지켜봅니다. 그다음 하루, 한 달, 1년으로 늘립니다. 각 단계는 이전 구간 안에서 되돌릴 수 있습니다. 짧게 시작하는 이유가 바로 이것입니다.

문제가 생기면 해결책은 해당 호스트에서 HTTPS를 올바르게 제공하는 것이지, 헤더를 제거하는 것이 아닙니다. 이미 받은 사람에게는 제거가 아무 도움이 되지 않습니다.

FAQ

HSTS가 없으면 점수가 깎이나요?

기본 점수에서 차감되지는 않지만 A+를 막습니다. 최고 등급은 max-age 180일 이상 또는 preload된 HSTS를 요구합니다. 100점을 받아도 HSTS가 없으면 A입니다.

모든 서브도메인을 소유하지 않아도 HSTS를 쓸 수 있나요?

예. includeSubDomains를 생략하면 됩니다. 그러면 헤더는 그것을 제공한 정확한 호스트에만 적용됩니다.

다음 읽기