Webサイトを一つに固めて署名して再配布可能にする、Web Packagingという仕組みがあります。
現在、Web Packagingは以下の3つの仕様からなっています。
AMPなどをより標準化された仕組みで実現するために、現在議論が進められています。
HTTPリクエストとHTTPレスポンスの対(HTTP exchanges)を署名したsxgというファイルを再配布するわけですが、このsxgファイルの検証エラーをユーザエージェントからレポートできるようにする「Signed Exchange Reporting for distributors」という議論がされています。
Signed Exchange Reporting for distributors
概要
publisherがarticle.htmlを署名して作成したarticle.html.sxgを、distributorが再配布します

- distributorはpublisherからarticle.html.sxgを取得する
- ユーザエージェントは、distributorに該当のリソースのリクエストを投げます
- distributorはarticle.html.sxgを返します
- ユーザエージェントはarticle.html.sxgの証明書および署名を検証します。
- 署名の検証に失敗したユーザエージェントは、予め指定されたエンドポイントにその旨レポートをPOSTします。通常のレポート先は、distributorになるでしょう。
レポートのポリシー適応
Network Error Loggingの仕組みを用いて、distributorがレポートの送信先エンドポイントを指定します。
NELについては以前説明したとおりです。
asnokaze.hatenablog.com
このようなレスポンスヘッダで、このポリシーを適応しておきます
Report-To: {"group": "sxg-errors",
"max_age": 10886400,
"endpoints": [{ "url": "https://report.distributor.example/" }] }
NEL: {"report_to": "sxg-errors", "max_age": 2592000}NELの仕様にもプルリクが出ている
https://github.com/w3c/network-error-logging/pull/100
レポートの内容
このようなレポートがPOSTされます。
{
"type": "signed-exchange",
"age": 1,
"url": "https://distributor.example/publisher.example/article.html.sxg",
"user_agent": "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) ...",
"body": {
"phase": "sxg",
"type": "sxg.signature_verification_error",
"status_code": 200,
"referrer": "https://www.example/",
"method": "GET",
"sxg": {
"outer_url": "https://distributor.example/publisher.example/article.html.sxg",
"inner_url": "https://publisher.example/article.html",
"cert_url": "https://distributor.example/publisher.example/cert",
}
}
}bodyのtypeとかはその他にも増えるのかな?証明書チェーンの辿れない場合とか、証明書の有効期間が合わない場合とか、いくつかのパターンがありそうな気はする。