HSTS Primingとは

先日行われたTPAC 2015で議論があったらしい「HSTS Priming」について軽く眺めてみる。


議論されているHSTS Priming自体は、EditorであるMike West個人のリポジトリ(URL)にて仕様が公開されている。

HSTS Priming

オリジンAで、以下のHTMLを含んでいるとする。

  <script src="http://origin-b/widget.js"></script>


HTTPSでオリジンAに接続した時、仮にorigin-bがHSTSを使用するサイトだったとしてもorigin-bにアクセスしたことがなければ、もちろんMixed Contentとしてブロックされてしまいます。


HSTS Primingでは、Mixed Contentとしてブロックされる前に、ユーザエージェントはHSTS priming requestと言うHTTPリクエストを送信します。HSTS priming requestは以下のように、参照されているリソースのホストの"/"に対してHEADメソッドのHTTPリクエストを送ります。このHSTS priming requestはhttpsで送信されます。

HEAD / HTTP/1.1
Host: origin-b
...


Origin Bからのレスポンスに以下のようにStrict-Transport-Securityヘッダが付加されていれば、ユーザエージェントはHTTPリクエストをhttp://からhttps://へ安全に変更することができます。

HTTP/1.1 200 OK
...
Strict-Transport-Security: max-age=10886400; includeSubDomains