BBC에서 보안 및 성능 향상을 위해 HSTS를 출시하는 방법

BBC는 보안 및 성능 개선을 위해 웹사이트에 HSTS를 배포하고 있습니다. HSTS의 의미와 HSTS가 어떻게 도움이 되는지 알아보세요.

HTTPS 도입은 최근 몇 년 동안 꾸준히 증가하고 있습니다. HTTP Archive의 2021 Web Almanac에 따르면 데스크톱과 모바일 모두에 대한 요청의 약 91% 가 HTTPS를 통해 제공되었습니다. HTTPS는 계속 사용되는 것이 아닙니다. 서비스 워커와 같은 기능과 HTTP/2HTTP/3과 같은 최신 프로토콜을 사용하기 위한 필수 전제 조건입니다.

최근 BBC의 선임 기술 설계자인 닐 크레이그bbc.com에 대해 HTTP Strict Transport Security (HSTS)가 점진적으로 출시되고 있다고 트윗했습니다. BBC에 어떤 의미가 있는지, HSTS가 사용자에게 어떤 영향을 줄 수 있는지 알아보겠습니다.

문제

웹 서버는 종종 포트 80과 443 모두에서 요청을 수신합니다. 포트 80은 안전하지 않은 HTTP 요청을 위한 반면 443은 안전한 HTTPS를 위한 것입니다. 대부분의 사용자가 그렇듯이 주소 표시줄에 https:// 프로토콜 접두사 없이 주소를 입력하면 일부 브라우저에서는 기존의 이유로 트래픽이 안전하지 않은 HTTP 버전으로 트래픽을 전송하기 때문에 문제가 발생할 수 있습니다 (항상 그런 것은 아님).

사용자가 안전하지 않은 웹사이트 버전에 액세스하지 않도록 하는 일반적인 방법은 모든 요청에 대해 HTTP에서 HTTPS로 리디렉션을 설정하는 것입니다. 이것은 확실히 효과가 있지만, 다음과 같은 일련의 이벤트가 시작됩니다.

  1. 서버가 HTTP를 통해 요청을 수신합니다.
  2. 서버는 요청된 리소스에 해당하는 HTTPS로 이동하도록 리디렉션을 실행합니다.
  3. HTTPS를 통한 서버는 브라우저와의 보안 연결을 협상해야 합니다.
  4. 콘텐츠가 평소와 같이 로드됩니다.

리디렉션은 잘 작동하지만 안전하지 않은 버전의 사이트에 대한 액세스를 허용하는 방식으로 잘못 구성될 수 있습니다. 모든 항목이 제대로 구성되어 있더라도 리디렉션 단계에서 사용자가 안전하지 않은 HTTP를 통해 계속 연결하는 보안 문제가 여전히 존재합니다. 이로 인해 사용자가 위험한 중간자 공격에 노출될 가능성이 있습니다.

HSTS 입력

브라우저 지원

  • 4
  • 12
  • 4
  • 7

소스

HSTS는 HTTPS 요청에 대한 Strict-Transport-Security HTTP 응답 헤더에 의해 지정됩니다. 설정된 경우 웹사이트 재방문 시 '307 내부 리디렉션'이라는 특수한 리디렉션이 실행됩니다. '307 내부 리디렉션'이란 브라우저가 서버가 아닌 리디렉션 로직을 처리하는 것을 말합니다. 이렇게 하면 요청이 브라우저를 벗어나지 않으므로 가로채기를 방지하므로 보안이 향상됩니다. 추가 혜택으로, 이러한 유형의 리디렉션은 매우 빠르기 때문에 HTTP에서 HTTPS로 가는 홉이 진행되는 동안 눈에 띄는 지연 시간이 사라집니다.

HSTS 헤더에 의해 트리거되는 HTTP에서 HTTPS로 307 내부 리디렉션. 307 리디렉션에 2밀리초밖에 걸리지 않습니다.

HSTS 헤더는 Cache-Controlmax-age 지시어와 유사한 문법으로 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 정책은 웹사이트를 처음 방문한 후에만 적용되므로 사이트를 처음 방문할 때는 이점이 없습니다. 이 경우에도 안전하지 않은 리디렉션이 필요합니다. 하지만 브라우저에서 HTTPS라고 확신하는 웹사이트의 하드코딩된 목록인 HSTS 미리 로드 목록에 웹사이트를 제출하여 HSTS 정책을 미리 로드할 수 있습니다. 사이트가 미리 로드 목록에 있으면 첫 번째 방문도 보호되며 HSTS를 통한 HTTP-HTTPS 간 리디렉션 지연 시간은 즉시 발생합니다.

직접 사용해 보기

BBC에서 HSTS를 테스트할 수 있다면 웹사이트도 HSTS를 테스트할 수 있습니다. 웹사이트를 테스트해 본 후 사용자에게 더 안전하고 더 빠른 환경을 제공할 버그가 없다는 확신이 들면 HSTS 사전 로드 목록에 이를 추가하세요.