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

BBC는 보안과 성능을 개선하기 위해 웹사이트에 HSTS를 배포할 예정입니다. 의미와 HSTS가 어떻게 도움이 되는지 알아보세요.

HTTPS 채택은 최근 몇 년 동안 꾸준히 증가하고 있습니다. HTTP Archive의 2021 Web Almanac에 따르면 데스크톱 및 모바일 요청의 약 91% 가 HTTPS를 통해 처리되었습니다. HTTPS는 단순히 남아 있는 것이 아니라 서비스 워커와 같은 기능과 HTTP/2HTTP/3과 같은 최신 프로토콜을 사용하기 위한 필수 기본 요건입니다.

최근 BBC의 수석 기술 아키텍트인 닐 크레이그bbc.comHSTS (HTTP Strict Transport Security)가 천천히 출시되고 있다고 트윗했습니다. 이것이 BBC에 어떤 의미인지, 나에게는 어떤 의미인지 알아보세요.

문제

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

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

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

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

HSTS 입력

브라우저 지원

  • Chrome: 4. <ph type="x-smartling-placeholder">
  • Edge: 12. <ph type="x-smartling-placeholder">
  • Firefox: 4. <ph type="x-smartling-placeholder">
  • Safari: 7. <ph type="x-smartling-placeholder">

소스

HSTS는 HTTPS 요청에 대한 Strict-Transport-Security HTTP 응답 헤더를 통해 지정됩니다. 이 정책을 설정하면 웹사이트를 재방문할 때 '307 내부 리디렉션'이라는 특별한 리디렉션이 실행됩니다. 307 내부 리디렉션은 브라우저가 서버가 아닌 리디렉션 로직을 처리합니다. 이렇게 하면 요청을 가로채지 않으므로 브라우저를 벗어나지 않으므로 더 안전합니다. 또한 이러한 유형의 리디렉션은 매우 빠르기 때문에 HTTP에서 HTTPS로 홉하는 동안 눈에 띄는 지연 시간을 없앨 수 있습니다.

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

구문에서 Cache-Controlmax-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 미리 로드 목록에 추가하세요.