BBC는 보안과 성능을 개선하기 위해 웹사이트에 HSTS를 배포할 예정입니다. 의미와 HSTS가 어떻게 도움이 되는지 알아보세요.
HTTPS 채택은 최근 몇 년 동안 꾸준히 증가하고 있습니다. HTTP Archive의 2021 Web Almanac에 따르면 데스크톱 및 모바일 요청의 약 91% 가 HTTPS를 통해 처리되었습니다. HTTPS는 단순히 남아 있는 것이 아니라 서비스 워커와 같은 기능과 HTTP/2 및 HTTP/3과 같은 최신 프로토콜을 사용하기 위한 필수 기본 요건입니다.
최근 BBC의 수석 기술 아키텍트인 닐 크레이그는 bbc.com에 HSTS (HTTP Strict Transport Security)가 천천히 출시되고 있다고 트윗했습니다. 이것이 BBC에 어떤 의미인지, 나에게는 어떤 의미인지 알아보세요.
문제
웹 서버는 포트 80 및 443 모두에서 요청을 수신 대기하는 경우가 많습니다. 포트 80은 안전하지 않은 HTTP 요청을 위한 반면, 443은 보안 HTTPS를 위한 것입니다. 대부분의 사용자가 그렇듯 https://
프로토콜 접두어 없이 주소 표시줄에 주소를 입력하면 일부 브라우저에서 레거시 이유로 (항상 그런 것은 아님) 사이트의 안전하지 않은 HTTP 버전으로 트래픽을 전달하기 때문에 문제가 발생할 수 있습니다.
사용자가 보안되지 않은 버전의 웹사이트에 액세스하지 않도록 하는 일반적인 방법은 모든 요청에 HTTP에서 HTTPS로 리디렉션을 배치하는 것입니다. 이는 확실히 효과적이지만 다음과 같은 이벤트 체인을 시작합니다.
- 서버가 HTTP 요청을 수신합니다.
- 서버는 요청된 리소스에 해당하는 HTTPS HTTPS로 이동하는 리디렉션을 실행합니다.
- 서버는 브라우저와의 보안 연결을 협상해야 합니다.
- 콘텐츠가 평소와 같이 로드됩니다.
리디렉션은 잘 작동하지만 안전하지 않은 버전의 사이트에 계속 액세스하도록 허용하는 방식으로 잘못 구성될 수 있습니다. 모든 항목이 제대로 구성되어 있더라도 사용자가 리디렉션 단계에서 안전하지 않은 HTTP를 통해 계속 연결되므로 사용자가 위험한 중간자 공격의 가능성에 노출된다는 보안 문제가 있습니다.
HSTS 입력
브라우저 지원
-
<ph type="x-smartling-placeholder">
-
<ph type="x-smartling-placeholder">
-
<ph type="x-smartling-placeholder">
-
<ph type="x-smartling-placeholder">
HSTS는 HTTPS 요청에 대한 Strict-Transport-Security
HTTP 응답 헤더를 통해 지정됩니다. 이 정책을 설정하면 웹사이트를 재방문할 때 '307 내부 리디렉션'이라는 특별한 리디렉션이 실행됩니다. 307 내부 리디렉션은 브라우저가 서버가 아닌 리디렉션 로직을 처리합니다. 이렇게 하면 요청을 가로채지 않으므로 브라우저를 벗어나지 않으므로 더 안전합니다. 또한 이러한 유형의 리디렉션은 매우 빠르기 때문에 HTTP에서 HTTPS로 홉하는 동안 눈에 띄는 지연 시간을 없앨 수 있습니다.
![HSTS 헤더에 의해 트리거된 HTTP에서 HTTPS로의 307 내부 리디렉션 307 리디렉션은 2밀리초밖에 걸리지 않습니다.](https://web.developers.google.cn/static/blog/bbc-hsts/image/a-307-internal-redirect-cd7d384b0a833.png?authuser=19&hl=ko)
구문에서 Cache-Control
의 max-age
지시문과 마찬가지로 HSTS 헤더는 max-age
지시문을 지정합니다. 이 지시어는 정책이 적용되는 기간을 지정하는 값(초 단위)을 취합니다.
Strict-Transport-Security: max-age=3600
앞의 예에서 정책은 1시간 동안만 적용됩니다.
HSTS 배포
HSTS 배포의 주요 단점은 출처를 엄격한 보안으로 취급할 준비가 되지 않은 경우입니다. 리소스를 제공하는 하위 도메인이 여러 개 있지만 모두 안전하지 않을 수 있다고 가정해 보겠습니다. 이 시나리오에서는 HSTS 헤더로 인해 웹사이트가 손상될 수 있습니다.
BBC는 HSTS 배포에 올바른 접근 방식을 취했습니다. 닐 크레이그가 트윗에서 언급한 것처럼 bbc.com의 초깃값은 max-age=10
이었습니다.
이 접근 방식은 정책이 처음에 10초 동안만 적용되었음을 의미합니다. 이 방법은 큰 이점을 제공하지는 않지만 HSTS 적용에 문제가 있는지 알아두는 것입니다. 시간이 경과함에 따라 정책을 점진적으로 늘리면서 문제가 발생하는지 확인할 수 있습니다. 이 문서를 작성하는 시점을 기준으로, bbc.com에서는 max-age=86400
의 HSTS 정책을 지정하고 있으며 시간이 지남에 따라 이 정책은 거의 확실하게 증가할 것입니다.
HSTS를 배포할 때 긴 max-age
값으로 게이트를 벗어나고 싶지는 않을 것입니다. 사용자가 문제를 경험하는 동안 갑자기 문제를 해결하기 위해 고군분투하게 될 수 있습니다. 소규모로 시작한 다음 점차적으로 늘려 나가세요. 모두 안전하다고 확신하는 경우 max-age
지시어를 훨씬 더 긴 기간으로 설정할 수 있습니다. 완전히 출시되면 max-age
를 1년 또는 2년으로 설정하는 것이 좋습니다.
HSTS 미리 로드 목록을 사용하여 초기 탐색을 더 안전하고 빠르게 처리하세요.
HSTS 정책은 웹사이트를 처음 방문한 후에만 적용되므로 사이트를 처음 방문할 때는 효과가 없습니다. 이 경우에도 안전하지 않은 리디렉션이 필요합니다. 하지만 웹사이트를 HSTS 미리 로드 목록에 제출하여 HSTS 정책을 미리 로드할 수 있습니다. HSTS 사전 로드 목록은 브라우저에서 엄격하게 HTTPS라고 인식하는 웹사이트의 하드코딩 목록입니다. 사이트가 미리 로드 목록에 있는 경우 첫 번째 방문도 보호되며 HTTP에서 HTTPS로 리디렉션이 즉시 실행됩니다.
직접 사용해 보기
BBC에서 HSTS를 테스트해 볼 의향이 있다면 귀하의 웹사이트에서도 동일한 방법으로 HSTS를 테스트해 볼 수 있습니다. 웹사이트에서 미리 테스트해 보고, 개선해야 할 경우 사용자에게 더 안전하고 더 빠른 환경을 제공하는 버그가 없다고 확신할 때 HSTS 미리 로드 목록에 추가하세요.