🔒 HSTS Preload 자격 확인
hstspreload.org 주요 제출 요건(HSTS 헤더, max-age 1년 이상, includeSubDomains, preload, HTTP→HTTPS 리디렉션, www 서브도메인 HTTPS 제공)을 자동으로 확인합니다.
완전 무료
가입 불필요
서버 처리
로그 · DB 없음
레이트 리밋
5 개 언어
다크 모드
📖 이 진단으로 알 수 있는 것
이 진단은 HTTPS 로 접속해 Strict-Transport-Security 헤더를 가져와 max-age · includeSubDomains · preload 가 preload 목록 요건을 충족하는지 판정합니다. HSTS 가 지킬 수 있는 것은 두 번째 이후의 접속뿐이라는 점에 주의하세요. 브라우저가 헤더를 받기 전까지는 아무것도 강제되지 않으므로 첫 평문 요청은 여전히 가로채일 수 있습니다. 이 구멍을 메우는 것이 preload 목록입니다.
| 판정 항목 | 무엇을 보는가 | 걸렸을 때의 대처 |
|---|---|---|
| max-age 가 짧음 | max-age 는 이 초 동안 HTTPS 를 강제하라는 지시입니다. preload 목록 신청에는 최소 31536000(1년)이 필요하며 실무상 63072000(2년)이 권장됩니다. 짧으면 그 기간이 지난 사용자는 다시 평문 접속이 가능한 상태로 돌아갑니다. |
처음부터 2년으로 하지 말고 300 → 86400 → 2592000 → 63072000 으로 단계적으로 올립니다. 도중에 HTTPS 문제가 발견되었을 때 짧은 값이면 영향이 빨리 사라지기 때문입니다. 모든 하위 리소스가 HTTPS 로 제공되는 것을 확인한 뒤 최종값으로. |
| includeSubDomains 를 안이하게 붙임 | 이 디렉티브는 모든 서브도메인에 즉시 일률적으로 HTTPS 를 강제합니다. legacy.example.com 이나 사내 도구, 메일 클릭 계측 도메인이 HTTP 인 채라면 즉시 도달 불가가 됩니다. 게다가 사용자 브라우저에 기억되므로 서버를 되돌려도 max-age 가 끝날 때까지 낫지 않습니다. |
붙이기 전에 DNS 존을 열어 A / CNAME 을 전부 뽑아 하나씩 HTTPS 로 열리는지 확인합니다. 인증서는 와일드카드 한 장으로 충분한 경우가 많지만 다단 서브도메인(a.b.example.com)은 와일드카드 대상이 아니므로 개별로 필요합니다. |
| 헤더가 돌아오지 않는 것처럼 보임 | 설정했는데 검출되지 않는 원인의 대표는 두 가지입니다. (1) HTTP(평문) 응답에 붙였다 — RFC 6797 에 따라 평문 응답의 HSTS 는 반드시 무시되며, HTTP 에서 HTTPS 로의 301 응답에 붙여도 의미가 없습니다. (2) nginx add_header 상속이 사라졌다 — 하위 location 블록에 add_header 가 하나라도 있으면 상위 블록의 add_header 는 그곳에서 전부 무효가 됩니다. |
HTTPS 200 응답에 붙이는 것이 정답입니다. nginx 라면 add_header … always; 로 always 를 붙이고(오류 응답에도 나오게 됩니다), add_header 를 쓴 모든 location 블록에 같은 줄을 복사하거나 include 로 공통 파일을 읽어들입니다. |
HSTS 를 켜면 인증서 만료나 불일치가 발생했을 때 사용자가 경고를 우회해 접속할 수 없게 됩니다. 이는 사양대로의 동작이며, 그만큼 인증서 자동 갱신이 멈추지 않았는지 감시하는 것이 중요해집니다. 개발기에서 실수로 활성화했다면 크롬은 chrome://net-internals/#hsts 의 Delete domain security policies 로 개별 해제할 수 있습니다.