← 전체 목록
병원홈페이지보안

HSTS 설정으로 중간자 공격과 프로토콜 다운그레이드 공격을 차단합니다

ℹ️ 본 글은 정보 제공 목적이며, 광고·제휴 링크가 포함될 수 있습니다.

HSTS 보안 헤더 설정은 HTTPS를 사용하는 사이트에서 한 단계 더 나아간 보안 조치입니다. HTTPS가 설정돼 있어도 사용자가 처음 http://로 접속하면 잠깐이나마 암호화되지 않은 연결이 발생합니다. 공격자는 바로 이 순간을 노려 중간자 공격(MITM)을 시도할 수 있습니다. HSTS는 브라우저에게 “이 사이트는 앞으로 항상 HTTPS만 쓰겠다”는 약속을 심어두어 이 취약한 순간을 없애줍니다. 병원처럼 환자 개인정보가 오가는 사이트에서는 반드시 설정해야 하는 헤더입니다.

HSTS가 작동하는 원리

브라우저가 사이트에 처음 접속할 때 서버에서 Strict-Transport-Security 헤더를 받습니다. 이 헤더를 받은 브라우저는 지정된 기간 동안 해당 도메인에 대해 무조건 HTTPS로만 접속합니다. http://로 입력해도 브라우저 자체에서 https://로 변환합니다.

덕분에 다음 공격이 차단됩니다.

  • HTTP를 통한 중간자 공격 (MITM)
  • SSL Stripping (HTTPS를 HTTP로 강제 다운그레이드하는 공격)
  • 쿠키 하이재킹

Nginx에 HSTS 헤더 추가

server {
    listen 443 ssl;
    server_name 병원도메인.com;
    
    # HSTS 헤더 추가
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    
    # ... 나머지 설정
}
  • max-age=31536000: 1년간 유지 (초 단위)
  • includeSubDomains: 서브도메인에도 적용
  • always: 모든 응답 코드(오류 페이지 포함)에 헤더 추가

적용 후 테스트:

curl -I https://병원도메인.com | grep -i strict

Strict-Transport-Security: max-age=31536000; includeSubDomains 가 출력되면 정상입니다.

preload 옵션과 주의사항

preload 옵션을 추가하면 크롬, 파이어폭스의 HSTS 프리로드 목록에 등록해서 첫 접속부터 HTTPS를 강제할 수 있습니다.

add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

단, 프리로드 등록 전 반드시 확인해야 할 점이 있습니다.

주의사항:

  • 서브도메인을 포함해 사이트 전체가 완전히 HTTPS로 작동해야 함
  • 한 번 프리로드 목록에 등록되면 제거까지 수 개월이 걸림
  • HTTP 사이트가 하나라도 있으면 등록 후 접근 불가

처음에는 preload 없이 먼저 적용하고, 사이트 전체가 HTTPS로 안정적으로 운영되는 것을 확인한 다음 추가하는 것을 권장합니다.

편집 정책

AI가 초안을 생성하고, 의료기관 인프라 운영자가 1차 데이터 기반으로 최종 검수·승인합니다.

작성·검수: WavePix 운영자 (의료기관 3곳 인프라 전담)