Signed HTTP Exchange

Kinuko Yasuda

Signed HTTP Exchange(SXG)は、ウェブ パッケージと呼ばれる新しいテクノロジーのサブセットです。これにより、パブリッシャーはコンテンツの整合性と帰属情報を維持しながら、コンテンツを安全にポータブルにできます。つまり、他者による再配布が可能になります。コンテンツのポータビリティを実現することで、コンテンツ配信の高速化、ユーザー間でのコンテンツ共有、オフライン操作の簡素化など、さまざまなメリットを得られます。

Signed HTTP Exchange の仕組みは次のとおりです。この技術により、パブリッシャーは単一の HTTP 交換(リクエスト/レスポンスのペア)に署名できます。署名付き交換は任意のキャッシュ サーバーから提供できます。ブラウザでこの Signed Exchange が読み込まれると、交換内の署名がコンテンツが元々パブリッシャーのオリジンから取得されたことを十分に証明するため、アドレスバーにパブリッシャーの URL を安全に表示できます。

Signed Exchange: 概要

これにより、コンテンツの送信元と配信元が分離されます。特定のサーバー、接続、ホスティング サービスに依存することなく、コンテンツをウェブに公開できます。SXG は、次のような用途に使用できます。

  • プライバシー保護プリフェッチ: 後続のナビゲーション用にリソースをプリフェッチすると(link rel=prefetch など)、ナビゲーションの速度が大幅に向上しますが、プライバシーに関するデメリットもあります。たとえば、クロスオリジン ナビゲーション用のリソースをプリフェッチすると、ユーザーが最終的にサイトにアクセスしなかった場合でも、ユーザーが特定の情報に関心を持っている可能性があることがリンク先サイトに開示されます。一方、SXG では、リンク先のサイトにアクセスすることなく、高速キャッシュからクロスオリジン リソースをプリフェッチできるため、ユーザーが興味を示したコンテンツのみをナビゲーション時に通信できます。これは、ユーザーを他のウェブサイトに誘導することを目的とするサイトに役立つと考えられます。特に、Google は Google 検索結果ページでこの機能を使用することで、AMP URL を改善し、検索結果のクリックを高速化することを計画しています。

  • 証明書の秘密鍵の管理権限を譲渡しない CDN のメリット: 急速に人気が高まったコンテンツ(reddit.com のトップページからリンクされているコンテンツなど)は、コンテンツが提供されるサイトに過負荷をもたらすことがよくあります。サイトが比較的小さい場合は、速度が低下したり、一時的に利用できなくなったりすることもあります。高速で強力なキャッシュ サーバーを使用してコンテンツを共有すれば、この状況を回避できます。SXG では、TLS 鍵を共有しなくてもこれを実現できます。

Signed Exchange の試用

署名付き交換は Chrome 73 以降で利用可能で、以前はオリジン トライアルとして利用可能でした。

SXG を作成する

パブリッシャーとしてオリジンの SXG を作成するには、署名に使用する証明書キーが必要です。また、証明書に特別な 「CanSignHttpExchanges」拡張機能が含まれていないと、有効な SXG として処理されません。2018 年 11 月現在、この拡張機能をサポートしている CA は DigiCert のみです。SXG で機能する証明書は、こちらのページからリクエストできます。

SXG の証明書を取得したら、GitHub で公開されているリファレンス生成ツールを使用して、独自の SXG を作成できます。

Chrome のコード リポジトリで実際の SXG サンプル ファイルを確認することもできます(こちらは、シンプルなテキスト ファイル用に作成された最もシンプルなファイルです)。これらの証明書は主にローカルテスト用に生成されるため、署名に有効な証明書とタイムスタンプが含まれていることを期待しないでください。

ローカルで機能をテストする

テスト用に SXG を作成するには、自己署名証明書を作成し、chrome://flags/#allow-sxg-certs-without-extension を有効にして、特別な拡張機能のない証明書で作成された SXG を Chrome で処理します。

サーバー、証明書、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 のバグをチームに報告したりすることもできます。ご意見は標準化プロセスに大きく役立ち、実装に関する問題の解決にも役立ちます。

フィードバック