서명된 HTTP 교환

Kinuko Yasuda

서명된 HTTP 교환(또는 'SXG')은 웹 패키지라고 하는 최신 기술의 하위 집합으로, 이를 통해 게시자는 콘텐츠의 무결성과 저작자 표시를 그대로 유지하면서 콘텐츠를 안전하게 포팅 가능하게, 즉 다른 당사자가 재배포할 수 있도록 만들 수 있습니다. 휴대용 콘텐츠에는 빠른 콘텐츠 전송 지원, 사용자 간 콘텐츠 공유 용이성, 오프라인 환경 간소화 등 여러 가지 이점이 있습니다.

서명된 HTTP 교환은 어떻게 작동할까요? 이 기술을 통해 게시자는 모든 캐싱 서버에서 서명된 교환을 제공할 수 있는 방식으로 단일 HTTP 교환(즉, 요청/응답 쌍)에 서명할 수 있습니다. 브라우저가 이 서명된 교환을 로드할 때 주소 표시줄에 게시자의 URL을 안전하게 표시할 수 있습니다. 거래소의 서명이 콘텐츠의 원래 출처임을 증명하기에 충분하기 때문입니다.

서명된 교환: 핵심

이를 통해 콘텐츠 출처와 배포자가 분리됩니다. 특정 서버, 연결, 호스팅 서비스에 의존하지 않고 콘텐츠를 웹에 게시할 수 있습니다. Google은 다음과 같은 SXG의 사용 가능성에 대해 기쁘게 생각합니다.

  • 개인 정보를 보호하는 미리 가져오기: 후속 탐색을 위해 리소스를 미리 가져오면 (예: link rel=prefetch 사용) 후속 탐색을 위해 훨씬 더 빠른 느낌을 받을 수 있지만 개인 정보 보호 단점도 있습니다. 예를 들어 교차 출처 탐색을 위한 리소스를 미리 가져오면 사용자가 최종적으로 사이트를 방문하지 않았더라도 사용자가 정보에 관심이 있을 수 있음을 대상 사이트에 공개합니다. 반면 SXG를 사용하면 대상 사이트에 도달하지 않고도 빠른 캐시에서 교차 출처 리소스를 미리 가져올 수 있으므로 탐색이 발생할 때만 사용자의 관심을 전달할 수 있습니다. 이 방법은 사용자를 다른 웹사이트로 보내는 것이 목표인 사이트에 유용할 수 있습니다. 특히 Google은 Google 검색 결과 페이지에서 이 기능을 사용하여 AMP URL을 개선하고 검색 결과 클릭 속도를 높일 계획입니다.

  • 인증서 비공개 키를 직접 제어할 수 없는 CDN의 이점: 갑자기 인기가 높아진 콘텐츠 (예: reddit.com의 첫 페이지에서 링크)는 콘텐츠가 제공되는 사이트에 과부하가 걸리는 경우가 많으며, 사이트가 상대적으로 작으면 속도가 느려지거나 일시적으로 사용할 수 없게 될 수 있습니다. 빠르고 강력한 캐시 서버를 사용하여 콘텐츠를 공유하면 이러한 상황을 피할 수 있으며 SXG를 사용하면 TLS 키를 공유하지 않고도 이를 방지할 수 있습니다.

서명된 교환 시도

서명된 교환은 Chrome 73 이상에서 사용할 수 있으며 이전에는 오리진 트라이얼로 제공되었습니다.

SXG 만들기

게시자로서 원본에 SXG를 만들려면 서명에 서명할 인증서 키가 필요하며, 유효한 SXG로 처리할 인증서에 특별한 'CanSignHttpExchanges' 확장 프로그램이 있어야 합니다. 2018년 11월부터 이 확장 프로그램을 지원하는 유일한 CA는 DigiCert이며, 이 페이지에서 SXG에 작동하는 인증서를 요청할 수 있습니다.

SXG 인증서를 받으면 GitHub에 게시된 참조 생성기 도구를 사용하여 자체 SXG를 만들 수 있습니다.

Chrome 코드 저장소에서 실제 SXG 예시 파일을 확인할 수도 있습니다. 예를 들어 이 파일간단한 텍스트 파일을 위해 생성된 가장 간단한 파일입니다. 이 인증서는 주로 로컬 테스트를 위해 생성되므로 서명에 유효한 인증서와 타임스탬프가 있을 필요는 없습니다.

로컬에서 기능 테스트

테스트 목적으로 SXG를 만들려면 자체 서명 인증서를 만들고 chrome://flags/#allow-sxg-certs-without-extension를 사용 설정하여 Chrome이 특수 확장 프로그램 없이 인증서로 만든 SXG를 처리하도록 할 수 있습니다.

서버, 인증서, SXG가 올바르게 설정된 경우 다음과 같은 코드가 작동합니다.

<!-- prefetch the sample.sxg -->
<link rel="prefetch" href="https://your-site.com/sample.sxg" />

<!-- clicking the link below should make Chrome navigate to the inner
     response of sample.sxg (and the prefetched SXG is used) -->
<a href="https://your-site.com/sample.sxg">Sample</a>

SXG는 Chrome 73 이상에서 앵커 태그 (<a>)와 link rel=prefetch에서만 지원됩니다. 또한 서명의 유효성은 사양에 따라 7일로 제한되므로, 서명된 콘텐츠가 비교적 빨리 만료됩니다.

의견 보내기

이 실험에 관한 의견을 webpackage-dev@chromium.org로 보내주세요. 사양 토론에 참여하거나 팀에 Chrome 버그를 신고할 수도 있습니다. 여러분의 의견은 표준화 프로세스를 수행하고 구현 문제를 해결하는 데 큰 도움이 됩니다.

의견