tubo28's blog
つぼの 140 文字より長い文章置き場
About me

HTTP Strict Transport Security (HSTS)

Last Modified:
Tags: http

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 行しか無い。もっと増えていくとどうなるのでしょう…?

dev ドメイン

.dev などの gTLD ドメインが Google によって購入されました。その後、2017 年 9 月から .dev 等の特定のドメインは HSTS が強制されるようになりました。 個人で使う分には楽に HTTPS にできるのでそこまで困りませんが、仕事だとプロダクション環境とテスト環境をサブドメインで切り分けるような運用が面倒になりそうです。

https://ma.ttias.be/chrome-force-dev-domains-https-via-preloaded-hsts/