HSTS 解説:max-age、preload、そして何が壊れるか
更新 2026-11-03 · 6 分で読めます
HSTS はサイトを到達不能にしうる唯一のセキュリティヘッダーです。所有者自身にとっても。そして同時に A+ の必須条件でもあります。この 2 つの事実の間の隔たりは、導入時の規律だけに懸かっています。
このヘッダーが実際にやっていること
Strict-Transport-Security は、今後 N 秒間このホストには HTTPS でしか接続してはいけない、とブラウザに伝えます。受け取った時点でブラウザは内部の http:// リンクを書き換え、証明書エラーの「続行」クリックを塞ぎ、平文 HTTP を完全に拒否します。しかもそれはリクエストが端末を出る前に行われます。
これが、リダイレクトでは防げないダウングレード攻撃を防げる理由です。リダイレクトは最初のリクエストを平文で送ってしまい、それはまさにネットワーク上の攻撃者が横取りしたいリクエストだからです。
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
max-age は取り消せないカウントダウン
max-age はクライアント側に保存されます。1 年を出したあとヘッダーを削除しても、それを見たブラウザは最大 1 年間 HTTPS を強制し続けます。サーバー側に止めるスイッチはありません。
CertH は 180 日(15552000 秒)を A+ のしきい値としています。1 年が本番での一般的な値です。180 日未満でも概要では HSTS 有効として扱いますが、A+ は解除されません。
includeSubDomains と preload は別々の判断
includeSubDomains はルールをすべてのサブドメインに広げます。HTTP しか話さないサブドメインが 1 つでもあると(社内ツール、旧管理画面、ステージング)、親ドメインを訪れた人にはそのサブドメインが開けなくなります。まず DNS を棚卸ししてください。
preload はさらに進んで、ドメインがブラウザ同梱のリストに埋め込まれ、初回訪問時、まだヘッダーを受け取る前からルールが適用されます。解除には数か月かかり、削除リストへの申請も必要です。ヘッダーが数か月安定するまでは preload を付けないでください。
- •エラーページを含め、すべての HTTPS レスポンスでこのヘッダーを返す。ヘッダーのない 404 はブラウザに何も教えません。
- •平文 HTTP で HSTS を送ってはいけない。仕様上ブラウザは無視するので、設定ミスのリダイレクトループはこの方法では直せません。
- •includeSubDomains を付ける前に、サブドメインに HTTP のみのサービスがないか確認する。
- •preload は最後に、max-age が 1 年で安定してから付ける。
何も壊さない導入方法
まず短い max-age で始め、間違いがすぐ期限切れになるようにします。max-age=300 です。1 週間そのままにして、壊れたサブドメインや混合コンテンツの報告を監視します。次に 1 日、1 か月、1 年と伸ばします。各段階は前のウィンドウ内で戻せる。それが「短く始める」ことの意味です。
もし壊れたら、直すべきは壊れたホストで HTTPS を正しく提供することであり、ヘッダーを削除することではありません。削除しても、すでに受け取った人には何の助けにもなりません。
FAQ
HSTS がないと減点されますか?
基礎点は下がりませんが、A+ が止まります。最高評価には max-age 180 日以上または preload 済みの HSTS が必要です。100 点満点でも、それがなければ A のままです。
すべてのサブドメインを所有していなくても HSTS は使えますか?
はい。includeSubDomains を付けなければ問題ありません。その場合ヘッダーは、それを返した正確なホストにだけ適用されます。