HTTP Strict Transport Security (HSTS) を知った


HSTS について調べたまとめ

HSTS とは?

これを読め

私の理解

HSTS

サーバーに http://... の URL でアクセスが来たときに 301 Moved Permanently でスキームだけ https に置換した URL を返すのは、TLS 対応サイトのよくある設定だと思う。 しかし、レスポンスは平文かつ Location も任意の値が設定できるので、悪意ある中間者が好きなサイトに誘導できてしまう (中間者攻撃)。

HSTS とは、具体的な URL を示すのではなく、スキームを https に置換してアクセスするようにブラウザに指示することで、中間者攻撃の危険性を回避する規格。 具体的には次のようなヘッダーのどちらかを入れる。

Strict-Transport-Security: max-age=<expire-time>
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains

Preload HSTS

これだけではまだ穴がある。初回接続時にクライアントは HSTS 指定を受けていないので、このときだけまだ中間者攻撃のリスクがある。そこで、次のようにブラウザが最初から HSTS なサイトの URL の一覧を持っておく。

[chrome] Contents of /trunk/src/net/http/transport_security_state_static.json

ここに載っているサイトは以下のように preload をつけてよい。

Strict-Transport-Security: max-age=<expire-time>; includeSubDomains; preload

すごく愚直な方法だけど今のところ 1074 行しか無い。もっと増えていくとどうなるの…?