Strict-Transport-Security

HTTP Strict-Transport-Security 응답 헤더(종종 HSTS로 축약됨)는 사이트가 HTTPS를 통해서만 접근되어야 하며 향후 HTTP를 사용하여 사이트에 접근하려는 모든 시도는 자동으로 HTTPS로 변환되어야 함을 브라우저에 알립니다.

참고: 처음 HTTP 연결이 여전히 중간자 공격에 취약한 서버에서 단순히 HTTP를 HTTPS(301) 리디렉션으로 구성하는 것보다 더 안전합니다.

헤더 종류 응답 헤더
금지된 헤더 이름 아니요

구문

http
Strict-Transport-Security: max-age=<expire-time>
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains; preload

지시어

max-age=<expire-time>

HTTPS를 통해서만 사이트에 접근할 수 있음을 브라우저가 기억해야 하는 시간(초)입니다.

includeSubDomains Optional

이 선택적 매개변수가 지정된 경우, 이 규칙은 사이트의 모든 하위 도메인에도 적용됩니다.

preload Optional 비표준

자세한 내용은 Strict Transport Security 프리로딩를 참조하십시오. preload를 사용하는 경우 max-age 지시어는 31536000(1년) 이상이어야 하며 includeSubDomains 지시문이 있어야 합니다. 사양의 일부가 아닙니다.

설명

웹사이트가 HTTP를 통한 연결을 수락하고 HTTPS로 리디렉션하는 경우, 방문자는 리디렉션되기 전에 먼저 사이트의 비암호화 버전과 통신할 것입니다. 예를 들어 방문자가 http://www.foo.com/을 입력하거나 심지어 그냥 foo.com을 입력하는 경우입니다. 이는 중간자 공격의 기회를 만듭니다. 리디렉션을 악용하여 방문자를 원래 사이트의 보안 버전이 아닌 악의적인 사이트로 안내할 수 있습니다.

HTTP Strict Transport Security 헤더는 브라우저가 HTTP를 사용하여 사이트를 불러와서는 안 되며 대신 HTTP를 사용하여 사이트에 접근하려는 모든 시도를 HTTPS 요청으로 자동 변환해야 함을 알립니다.

참고: Strict-Transport-Security 헤더가 사이트가 HTTP를 통해서만 접근할 수 있다면 브라우저에 의해 무시됩니다. 인증서 오류 없이 HTTPS를 통해 사이트에 액세스할 수 있다면 브라우저는 사이트가 HTTPS를 사용할 수 있음을 인식하고 Strict-Transport-Security 헤더를 준수합니다. 브라우저는 공격자가 사이트에 대한 HTTP 연결을 가로채서 헤더를 삽입하거나 제거할 수 있으므로 이 작업을 수행합니다.

예제 시나리오

공항에서 무료 Wi-Fi 액세스 포인트에 로그인하고 웹 서핑을 시작하고 온라인 뱅킹 서비스를 방문하여 잔액을 확인하고 몇 가지 청구서를 지불합니다. 불행하게도 여러분이 사용하고 있는 액세스 포인트는 실제로 해커의 노트북이며 해커는 여러분의 원래 HTTP 요청을 가로채 실제 사이트 대신 은행 사이트의 복제본으로 리디렉션하고 있습니다. 이제 여러분의 개인 데이터가 해커에게 노출됩니다.

Strict Transport Security는 이 문제를 해결합니다. HTTPS를 사용하여 은행 웹사이트에 한 번 접근했고 은행 웹사이트에서 Strict Transport Security를 사용하는 한, 브라우저는 자동으로 HTTPS만 사용한다는 것을 알게 되어 해커가 이러한 종류의 중간자 공격을 수행하지 못하도록 방지합니다.

브라우저가 처리하는 방법

HTTPS를 사용하여 사이트에 처음으로 접근하고 Strict-Transport-Security 헤더를 반환하면 브라우저가 이 정보를 기록하고, 이후에 HTTP를 사용하여 사이트를 로드하려고 시도할 때 자동으로 HTTPS를 대신 사용합니다.

Strict-Transport-Security 헤더에 지정된 만료 시간이 경과하면 HTTP를 통해 사이트를 불러오려는 다음 시도는 자동으로 HTTPS를 사용하지 않고 정상적으로 진행됩니다.

Strict-Transport-Security 헤더가 브라우저에 전달될 때마다 사이트의 만료 시간을 업데이트하기 때문에 사이트는 정보를 새로 고칠 수 있고, 만료되는 것을 방지할 수 있습니다. 엄격 전송 보안을 비활성화해야 하는 경우 max-age를 0(https 연결 종료)으로 설정하면 Strict-Transport-Security 헤더가 즉시 만료되어 http를 통한 접근이 허용됩니다.

Strict Transport Security 프리로딩

Google은 HSTS 프리로딩 서비스를 관리하고 있습니다. 지침을 따르고 도메인을 성공적으로 제출하면 브라우저가 보안 연결을 통해서만 도메인에 연결되도록 할 수 있습니다. 서비스가 Google에서 호스팅되는 동안 모든 브라우저는 이 사전 로드 목록을 사용합니다. 그러나 HSTS 사양의 일부가 아니므로 공식적인 것으로 취급해서는 안 됩니다.

예제

현재와 미래의 모든 하위 도메인은 1년의 max-age 동안 HTTPS가 됩니다. 이는 HTTP를 통해서만 제공될 수 있는 페이지 또는 하위 도메인에 대한 접근을 차단합니다.

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

도메인에 대해 1년의 max-age이 허용되긴 하지만, https://hstspreload.org에 설명된 대로 권장 값은 2년입니다.

다음 예는 max-age를 2년으로 설정하고 Chromium, Edge, 그리고 Firefox와 같은 모든 주요 웹 브라우저의 HSTS 사전 로드 목록에 포함하는 데 반드시 필요한 사전 로드 접미사가 붙습니다.

http
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload

명세서

Specification
HTTP Strict Transport Security (HSTS)
# section-6.1

브라우저 호환성

BCD tables only load in the browser

같이 보기