서명된 HTTP 교환

Kinuko Yasuda

서명된 HTTP 교환(또는 'SXG')은 웹 패키지라는 신흥 기술의 하위 집합입니다. 이 기술을 사용하면 게시자가 콘텐츠의 무결성과 저작자 표시를 유지하면서도 콘텐츠를 안전하게 포팅할 수 있습니다(즉, 다른 당사자가 재배포할 수 있음). 휴대용 콘텐츠는 더 빠른 콘텐츠 전송 지원, 사용자 간의 콘텐츠 공유 촉진, 더 간단한 오프라인 환경 등 많은 이점을 제공합니다.

서명된 HTTP 교환은 어떻게 작동하나요? 이 기술을 사용하면 게시자가 서명된 교환이 모든 캐싱 서버에서 제공될 수 있는 방식으로 단일 HTTP 교환(요청/응답 쌍)에 서명할 수 있습니다. 브라우저가 이 서명된 교환을 로드하면 교환의 서명이 콘텐츠가 원래 게시자 출처에서 가져온 것임을 충분히 증명하므로 검색주소창에 게시자 URL을 안전하게 표시할 수 있습니다.

서명된 교환: 요점

이렇게 하면 콘텐츠의 출처와 배포자를 분리할 수 있습니다. 특정 서버, 연결 또는 호스팅 서비스를 사용하지 않고도 콘텐츠를 웹에 게시할 수 있습니다. 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 버그를 신고할 수도 있습니다. 보내주신 의견은 표준화 프로세스와 구현 문제를 해결하는 데 큰 도움이 됩니다.

의견