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とかはその他にも増えるのかな?証明書チェーンの辿れない場合とか、証明書の有効期間が合わない場合とか、いくつかのパターンがありそうな気はする。