結論(HSTS Preload要件)
HSTS Preload要件とは、主要ブラウザに組み込まれたHSTSプリロードリストに登録するための条件です。ベースドメインのHTTPS応答のHSTSヘッダーに、max-age 31536000秒(1年)以上・includeSubDomains・preloadの3点をそろえることなどが求められます。登録すると初回訪問からHTTPSで接続されますが、取り消しの反映には数か月かかり、ドメイン配下のすべてのサブドメインに影響します。
この記事のポイント
- プリロードは、HSTSの弱点である「初回訪問時の無防備な状態」を解消します。
- 登録要件は、有効な証明書、同一ホストのHTTPSへの転送、全サブドメインのHTTPS提供、ベースドメインのHSTS(1年以上・includeSubDomains・preload)です。
- ヘッダーにpreloadと書くだけでは登録されず、hstspreload.orgでの申請が必要です。
- 登録の取り消しは、利用者のブラウザに反映されるまで数か月かかります。
- セキュリティAIチェッカーは3条件がそろえば○、欠ければ△(重み1の45%)とし、登録しない判断なら△のままで差し支えありません。
| 診断項目名 | HSTS Preload要件 |
|---|---|
| 項目ID | transport.hsts-preload |
| 分類 | 通信の暗号化(HTTPS・TLS・HSTS) |
| 重大度・配点の重み | 低(low) 重み 1 |
| 関連する標準・ガイドライン | OWASP ASVS 5.0.0 V3.7.4(L3:アプリケーションのトップレベルドメインをHSTSの公開プリロードリストに登録)、ASVS V3.4.1(L1:HSTS・max-age 1年以上)、hstspreload.org登録要件、OWASP WSTG-CONF-07、WSTG-CRYP-01(転送とSSL Stripへの対策としてのプリロード)、OWASP HTTP Strict Transport Security Cheat Sheet |
HSTS Preload要件とは
HSTS Preload要件とは、HSTSヘッダーが、ブラウザのHSTSプリロードリストに登録するための条件、つまり max-ageが1年以上、includeSubDomains、preload の3点 をそろえているかどうかのことです。プリロードリストは、主要ブラウザにあらかじめ組み込まれた「最初からHTTPSでしか接続しないドメイン」の一覧で、HSTSの弱点である初回訪問時の無防備な状態を解消します。
効果は大きい一方、登録の取り消しには長い時間がかかり、ドメイン配下のすべてのサブドメインに影響します。そのためセキュリティAIチェッカーでは、条件を満たしているかを参考情報として評価し、重みを1(重大度low)に抑えています。
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
HSTSプリロードはなぜ必要なのか
プリロードが解決する問題(初回訪問の無防備)
HSTSは、ブラウザが一度HTTPSでサイトに接続してヘッダーを受け取るまで効きません(MDN)。初めて訪れる住民、ブラウザを新しくした住民、記録の期限が切れた住民は、最初のHTTPリクエストを経路上で横取りされる可能性があります。WSTG-CRYP-01も、HTTPからHTTPSへの転送はsslstripのようなツールで妨害されうるため、プリロードリストへの登録が防御になると述べています。
プリロードリストに登録されたドメインは、ブラウザの出荷時点で「HTTPS限定」と記録されているため、初回からHTTPSで接続されます。Googleが運営するプリロードサービス(hstspreload.org)のリストは主要ブラウザで利用されていますが、HSTSの仕様(RFC 6797)そのものの一部ではありません(MDN)。
hstspreload.orgの登録要件
- 有効な証明書を提供すること。
- ポート80で待ち受けている場合、同じホストのHTTPSへ転送すること。
- すべてのサブドメインをHTTPSで提供すること(とくに
wwwサブドメインがDNSに存在する場合)。 - ベースドメインのHTTPS応答に、次のHSTSヘッダーを付けること。
max-ageが31536000秒(1年)以上includeSubDomainsを指定preloadを指定- HTTPSサイトから転送する場合、その転送応答にもHSTSヘッダーを付ける
各要素の詳しい基準は、「HSTSの有効期間」、「HSTSをサブドメインにも適用」、「HTTPからHTTPSへ転送」の各項目で解説しています。
登録の取り消しが難しいこと
hstspreload.orgは、プリロードリストへの登録は簡単には取り消せず、削除が利用者のブラウザに反映されるまで数か月かかると明記しています。登録すると、そのドメイン配下のすべてのホストがHTTPS必須になり、HTTPSに対応できないサブドメインは、削除が反映されるまで閲覧できなくなります。OWASP Cheat Sheetも、preload ディレクティブは不適切に実装するとサイトにアクセスできなくなる重大な結果を招くと注意しています。
HSTSプリロードについてよくある誤解
- 「ヘッダーにpreloadと書けば登録される」:
preloadは登録の意思表示にすぎません。実際の登録には、hstspreload.orgでの申請が必要です。逆に、意図せずpreloadを書いたヘッダーを第三者が申請してしまう可能性もあるため、登録するつもりがないなら書かないでください。 - 「www.のホストだけ登録できる」:要件はベースドメインでのヘッダーを求めています。登録の効果はドメイン配下全体に及びます。
- 「どの自治体も登録すべき」:ASVS 5.0.0でもプリロード登録はレベル3(高い保証が必要なアプリケーション向け)の要件です。サブドメインの管理体制が整っていない段階での登録は、むしろ障害の原因になります。
HSTS Preload要件の診断基準(セキュリティAIチェッカー)
取得方法
- 最終応答(HTTPS)の
Strict-Transport-Securityヘッダー(先頭の1つ)から、max-ageの値、includeSubDomainsとpreloadの有無を、大文字・小文字を区別せずに確認します。 - 評価の前提として、「HSTSが設定されている」が○(HTTPS応答で、1以上の
max-ageを持つHSTSがある)である必要があります。
判定条件
| 判定 | 条件 | 得点への影響 |
|---|---|---|
| ○ 問題なし(pass) | max-age ≧ 31,536,000秒、かつ includeSubDomains と preload の両方がある | 重み1を加算 |
| △ 要確認(warn) | 有効なHSTSはあるが、上の3条件のいずれかが欠けている | 重み1×0.45=0.45点 |
| 対象外(na) | 有効なHSTSがない(ヘッダーなし、max-ageなし、max-age=0、HTTP応答) | 採点から除外 |
- この項目はヘッダーの書式要件だけを確認します。実際にプリロードリストへ登録済みかどうか、ベースドメインでのヘッダー、すべてのサブドメインのHTTPS対応、HTTPから同一ホストへの転送は確認しません。○は「ヘッダー上は登録要件を満たしている」という意味です。
- 重みが1で、未達でも△(0.45点)にとどまるため、全体スコアへの影響は小さく設計しています。登録しない判断をした場合は、△のままで差し支えありません。
preloadが書かれているのにmax-ageが1年未満、またはincludeSubDomainsがない場合も△です。この組み合わせは登録を申請しても受け付けられないため、設定の見直しが必要です。
自治体サイトでの判定例
| HSTSヘッダー | 判定 | 補足 |
|---|---|---|
max-age=63072000; includeSubDomains; preload | ○ | 実際の登録は別途申請が必要 |
max-age=31536000; includeSubDomains | △ | 登録しない運用なら妥当な設定 |
max-age=2592000; includeSubDomains; preload | △ | max-ageが1年未満で要件未達 |
max-age=31536000; preload | △ | includeSubDomainsがなく要件未達 |
| ヘッダーなし | 対象外 | 「HSTSが設定されている」が× |
HSTS Preload要件を満たさない・誤って登録するとどんなリスクがあるか
- 登録しない場合:初回訪問時やHSTS記録の期限切れ後の最初のHTTPリクエストが、公衆無線LANなどでSSL Strip攻撃を受ける余地が残ります。
- 要件を満たさないpreload指定:
preloadがあるのに要件を満たさない設定は、担当者が「プリロード済み」と誤解する原因になります。 - 準備不足での登録:HTTPS未対応のサブドメイン(施設予約、庁内システム、検証環境など)が残ったまま登録すると、それらは数か月にわたってブラウザから開けなくなります。登録はドメイン配下全体に影響するため、本体サイトの担当課だけでは判断できません。
HSTSプリロードの設定方法と登録手順(Apache・nginx・IIS・Next.js)
登録するかどうかの判断
次のすべてに「はい」と答えられる場合に限り、登録を検討します。
- ドメイン配下のすべてのホスト名を把握し、すべてがHTTPSで動作している。
- 委託先システムや庁内システムも含め、今後もHTTPのみのホストを作らない運用ルールがある。
- 証明書の自動更新と期限監視が確立している。
max-age=31536000; includeSubDomainsを数か月運用し、問題が出ていない。
段階的な手順(hstspreload.orgの推奨に準拠)
max-age=300; includeSubDomains→max-age=604800; includeSubDomains→max-age=2592000; includeSubDomainsと延ばし、各段階でそのmax-ageの期間が過ぎるまで様子を見る。max-age=63072000; includeSubDomains; preloadを、ベースドメインのHTTPS応答(転送応答を含む)に設定する。- hstspreload.orgでドメインを確認し、要件を満たしていることを確かめてから申請する。
Apache
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" env=HTTPS
</IfModule>
nginx
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
IIS(10.0 version 1709以降)
サイトの <hsts> 要素(applicationHost.config)には preload 属性もあり、3つのディレクティブをまとめて設定できます。IISはHTTPS応答にだけヘッダーを付与します。
<site name="CityWeb">
<hsts enabled="true" max-age="63072000" includeSubDomains="true" preload="true" redirectHttpToHttps="true" />
</site>
web.config の customHeaders でも同じヘッダーを付けられますが、<hsts> と併用すると重複するため、どちらか一方にします。Microsoftの資料は、preload 属性をプリロードリストへ申請するドメインに限って有効にするよう注意しています。
Next.js(Vercel)
headers: [{ key: "Strict-Transport-Security", value: "max-age=63072000; includeSubDomains; preload" }]
設定の確認方法
curl -sI https://city.example.lg.jp/ | grep -iE '^(HTTP/|strict-transport-security|location)'
curl -sI http://city.example.lg.jp/ | grep -iE '^(HTTP/|location)' # 同じホストのHTTPSへ転送されるか
サイトを壊さないための注意点
- 登録するつもりがない場合は、ヘッダーに
preloadを書かないでください。 - 登録後にHTTPS未対応のサブドメインが必要になっても、すぐには対応できません。新しいサブドメインを作る際の手順書に「HTTPS必須」を明記します。
- 登録の取り消しはhstspreload.orgの削除フォームから申請できますが、利用者のブラウザに反映されるまで数か月かかります。
よくある質問(FAQ)
HSTSプリロードとは何ですか?
主要ブラウザにあらかじめ組み込まれた「最初からHTTPSでしか接続しないドメイン」の一覧(プリロードリスト)に登録する仕組みです。Googleが運営するhstspreload.orgのリストが主要ブラウザで使われていますが、HSTSの仕様(RFC 6797)そのものの一部ではありません。
ヘッダーにpreloadと書けばプリロードリストに登録されますか?
登録されません。preloadは登録の意思表示にすぎず、hstspreload.orgで申請する必要があります。意図せずpreloadを書いたヘッダーを第三者が申請してしまう可能性もあるため、登録するつもりがないなら書かないでください。
HSTSプリロードの登録条件は何ですか?
有効な証明書を提供すること、ポート80で待ち受けている場合は同じホストのHTTPSへ転送すること、すべてのサブドメインをHTTPSで提供すること、ベースドメインのHTTPS応答にmax-age 31536000秒以上・includeSubDomains・preloadを含むHSTSを付けることです。HTTPSから転送する場合は、その転送応答にもHSTSを付けます。
プリロードリストから削除するにはどうすればよいですか?
hstspreload.orgの削除フォームから申請できますが、利用者のブラウザに反映されるまで数か月かかります。その間、HTTPSに対応できないサブドメインは閲覧できないままになります。
すべての自治体サイトがプリロード登録すべきですか?
そうとは限りません。ASVS 5.0.0でもプリロード登録はレベル3(高い保証が必要なアプリケーション向け)の要件です。サブドメインの管理体制が整っていない段階での登録は、むしろ障害の原因になります。
HSTS Preload要件の診断で○なら、プリロード登録済みということですか?
違います。この項目はヘッダーの書式要件だけを確認し、実際の登録状況、ベースドメインのヘッダー、全サブドメインのHTTPS対応、同一ホストへの転送は確認しません。○は「ヘッダー上は登録要件を満たしている」という意味です。
この項目を含む127項目を、URLを入れるだけで無料診断します。
参考資料
- HSTS Preload List Submission(hstspreload.org)
- OWASP ASVS 5.0.0 V3 Web Frontend Security(V3.4.1、V3.7.4)
- RFC 6797 HTTP Strict Transport Security
- MDN Strict-Transport-Security
- OWASP HTTP Strict Transport Security Cheat Sheet
- OWASP WSTG-CRYP-01 Testing for Weak Transport Layer Security
- OWASP WSTG-CONF-07 Test HTTP Strict Transport Security
- Microsoft Learn「HSTS Settings for a Web Site <hsts>」
- Vercel Docs「Encryption and TLS」