結論(HSTSをサブドメインにも適用)
HSTSをサブドメインにも適用するとは、Strict-Transport-SecurityヘッダーにincludeSubDomainsディレクティブを付けることです。これにより、HTTPS限定のポリシーがそのホストの配下にあるすべてのサブドメインへ広がります(RFC 6797 §6.1.2)。効果はヘッダーを返したホストの配下だけに及ぶため、www.だけに付けても兄弟のサブドメインは守れません。導入前に、ドメイン配下のすべてのホストがHTTPSに対応しているかの棚卸しが必要です。
この記事のポイント
- includeSubDomainsは「ヘッダーを返したホストの配下」にだけ効きます。組織のドメイン全体を守るには親ドメインでも返します。
- HTTPのままのサブドメインは、偽ページの表示や親ドメイン向けCookieの書き込みの足がかりになります。
- includeSubDomainsはサブドメインを自動でHTTPS化しません。HTTPS未対応のホストは閲覧できなくなります。
- セキュリティAIチェッカーは、有効なHSTSにincludeSubDomainsがあれば○、なければ△(重み2の45%)と判定します。
- DNSゾーンからホスト名を棚卸しし、短いmax-ageから段階的に導入します。
| 診断項目名 | HSTSをサブドメインにも適用 |
|---|---|
| 項目ID | transport.hsts-subdomains |
| 分類 | 通信の暗号化(HTTPS・TLS・HSTS) |
| 重大度・配点の重み | 中(medium) 重み 2 |
| 関連する標準・ガイドライン | RFC 6797 §6.1.2(includeSubDomainsディレクティブ)、OWASP ASVS 5.0.0 V3.4.1(L2以上はHSTSポリシーをすべてのサブドメインにも適用)、hstspreload.org登録要件(includeSubDomains必須)、OWASP WSTG-CONF-07、OWASP HTTP Strict Transport Security Cheat Sheet |
HSTSをサブドメインにも適用(includeSubDomains)とは
HSTSをサブドメインにも適用するとは、HSTSヘッダーに includeSubDomains ディレクティブを含め、HTTPS限定のポリシーがサブドメインにも及ぶように設定することです。自治体では、本体サイトのほかに「防災」「観光」「子育て」「議会」「図書館」などのサブドメインを運用していることが多く、どれか1つがHTTPのまま残っていると、そこが攻撃の足がかりになります。
セキュリティAIチェッカーでは重大度medium、重み2の項目です。
includeSubDomainsの意味(RFC 6797 §6.1.2)
RFC 6797 §6.1.2によれば、includeSubDomains は「HSTSポリシーがこのホストだけでなく、そのホストのドメイン名の下にあるすべてのサブドメインにも適用される」ことをブラウザに伝えるディレクティブです。
Strict-Transport-Security: max-age=31536000; includeSubDomains
このヘッダーを city.example.lg.jp から受け取ったブラウザは、www.city.example.lg.jp、bousai.city.example.lg.jp、kanko.city.example.lg.jp などにも、HTTPSでのみ接続するようになります。
includeSubDomainsはどこまで効くのか(適用範囲)
どのホストで受け取るかが重要
includeSubDomainsは「ヘッダーを返したホストの配下」にだけ効きます。
| ヘッダーを受け取ったホスト | 保護されるホスト |
|---|---|
city.example.lg.jp | city.example.lg.jp と、www.・bousai. などそのすべてのサブドメイン |
www.city.example.lg.jp | www.city.example.lg.jp と、*.www.city.example.lg.jp のみ。bousai.city.example.lg.jp は対象外 |
多くの自治体サイトは www. 付きのホストで運用されているため、www. だけにincludeSubDomainsを付けても、兄弟関係にある他のサブドメインは保護されません。組織のドメイン全体を守るには、親ドメイン(www. なし)でもHTTPSで応答し、そこでincludeSubDomains付きのHSTSを返す必要があります。プリロード登録でも、ヘッダーは親ドメイン(base domain)で返すことが求められます(「HSTS Preload要件」を参照)。
サブドメインの保護が必要な理由
- Cookieの注入:OWASP Cheat Sheetは、includeSubDomainsを省くと、サブドメイン経由のCookie操作に対して脆弱になると指摘しています。HTTPのサブドメインを攻撃者が経路上で偽装すると、親ドメイン向けのCookieを書き込み、本体サイトのセッションや設定に干渉できる場合があります。
- 類似ページへの誘導:HTTPのままのサブドメインは改ざん可能で、そこから偽の申請フォームへ誘導されるおそれがあります。
includeSubDomainsについてよくある誤解
- 「includeSubDomainsを付ければ、サブドメインも自動でHTTPS化される」:ブラウザがHTTPSで接続しようとするだけです。サブドメイン側にHTTPSと有効な証明書がなければ、閲覧できなくなります。
- 「www.で付けておけば十分」:上の表のとおり、兄弟のサブドメインは保護されません。
- 「庁内専用のサブドメインは関係ない」:同じドメイン名の配下にある限り、庁内システムや検証用ホストも対象になります。HTTPSに対応していない庁内システムがあると、職員がブラウザで開けなくなる事故が起きます。
HSTSヘッダー自体の有無は「HSTSが設定されている」、max-ageの長さは「HSTSの有効期間」で確認します。
HSTSをサブドメインにも適用の診断基準(セキュリティAIチェッカー)
取得方法
- 最終応答(HTTPS)の
Strict-Transport-Securityヘッダー(先頭の1つ)に、includeSubDomainsの文字列が含まれるかを、大文字・小文字を区別せずに確認します(ディレクティブ名は大文字小文字を区別しない:RFC 6797 §6.1)。 - 評価の前提として、「HSTSが設定されている」が○(HTTPS応答で、1以上の
max-ageを持つHSTSがある)である必要があります。
判定条件
| 判定 | 条件 | 得点への影響 |
|---|---|---|
| ○ 問題なし(pass) | 有効なHSTSに includeSubDomains がある | 重み2を加算 |
| △ 要確認(warn) | 有効なHSTSはあるが includeSubDomains がない | 重み2×0.45=0.9点 |
| 対象外(na) | 有効なHSTSがない(ヘッダーなし、max-ageなし、max-age=0、HTTP応答) | 採点から除外 |
- ×ではなく△としているのは、ASVS 5.0.0でサブドメインへの適用がレベル2以上の要件であり、すべてのサブドメインがHTTPS化されているかは外部からは確認できないためです。導入の判断には、組織内のサブドメインの棚卸しが欠かせません。
- この診断は、診断したホスト(通常は
www.付き)のヘッダーだけを見ます。親ドメインでのHSTS設定や、個々のサブドメインのHTTPS対応状況は評価しません。
自治体サイトでの判定例
| 最終URL | HSTSヘッダー | 判定 |
|---|---|---|
https://www.city.example.lg.jp/ | max-age=31536000; includeSubDomains | ○(ただし兄弟サブドメインの保護には親ドメインでの設定も必要) |
https://www.city.example.lg.jp/ | max-age=31536000 | △ |
https://city.example.lg.jp/ | max-age=63072000; includeSubDomains; preload | ○ |
https://www.town.example.lg.jp/ | ヘッダーなし | 対象外(「HSTSが設定されている」が×) |
HSTSがサブドメインに適用されていないとどんなリスクがあるか
- HTTPのサブドメインを使った攻撃:経路上の攻撃者は、HTTPのままのサブドメインへの通信を偽装し、偽ページの表示やCookieの書き込みを行えます。本体サイトがHTTPSでも、サブドメイン経由で利用者をだます余地が残ります。
- フィッシングの足がかり:自治体の正規ドメイン名を含むURLは住民に信頼されやすく、改ざんされたサブドメインのページは本物と見分けがつきません。
- 導入時の事故:一方で、HTTPS未対応のサブドメイン(古い施設予約システム、庁内だけで使う管理画面、検証環境など)が残ったままincludeSubDomainsを付けると、それらはmax-ageの期間中ブラウザから開けなくなります。とくに親ドメインに付ける場合、影響範囲は組織のドメイン全体に及びます。
includeSubDomainsの設定方法(Apache・nginx・IIS・Next.js)
導入前の棚卸し
- DNSゾーンの管理者に依頼し、そのドメインの配下で使われているホスト名の一覧を入手します。
- 各ホストについて、HTTPSで正常に表示できるか、有効な証明書があるかを確認します。
- 外部委託のシステム(施設予約、電子申請、図書館システム等)がサブドメインで動いている場合は、委託先にHTTPS対応状況を確認します。
- HTTPS未対応のホストは、HTTPS化するか、別ドメインへ移すかを決めてから導入します。
段階的な導入
- まず
www.付きのホストでmax-age=300; includeSubDomainsを設定し、問題がないか確認します。 - 親ドメインがHTTPSで応答できる場合は、親ドメインでも同様に短いmax-ageから導入します(親ドメインはwwwへ転送するだけでも、転送応答にHSTSを付けます)。
- 1週間、1か月と延ばし、最終的に1年以上にします。
Apache
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" env=HTTPS
</IfModule>
nginx
# 親ドメイン:HTTPSで受けてwwwへ転送しつつHSTSを返す
server {
listen 443 ssl;
server_name city.example.lg.jp;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
return 301 https://www.city.example.lg.jp$request_uri;
}
add_header は always がなくても200・301・302などの応答には付きますが、404や500などのエラー応答には付きません。すべての応答に付けるため always を指定します。
IIS(10.0 version 1709以降)
<site name="CityWeb">
<hsts enabled="true" max-age="31536000" includeSubDomains="true" redirectHttpToHttps="true" />
</site>
Next.js(Vercel)
Vercelの独自ドメインの既定値は max-age=63072000; で、includeSubDomainsは付きません(*.vercel.app は付与・プリロード済み)。サブドメインまで適用する場合は明示します。
headers: [{ key: "Strict-Transport-Security", value: "max-age=63072000; includeSubDomains" }]
設定の確認方法
# www付きと親ドメインの両方を確認
for h in www.city.example.lg.jp city.example.lg.jp; do
echo "== $h"; curl -sI "https://$h/" | grep -iE '^(HTTP/|strict-transport-security|location)'
done
# 主要サブドメインがHTTPSで応答するか
for h in bousai kanko kosodate; do
curl -s -o /dev/null -w "$h %{http_code}\n" "https://$h.city.example.lg.jp/"
done
サイトを壊さないための注意点
- includeSubDomainsは、ドメイン配下のすべてのホストがHTTPSに対応していることが前提です。1つでも未対応があれば、その利用者は閲覧できなくなります。
- 委託先のシステムや庁内システムの担当課にも事前に周知し、導入日と問い合わせ窓口を共有します。
- 問題が起きた場合は、同じホストでHTTPSにより
max-age=0を返し、記録を消してもらいます。長いmax-ageで広く配布された後では回復に時間がかかるため、短いmax-ageでの試験期間を必ず設けます。
よくある質問(FAQ)
includeSubDomainsを付けると、サブドメインも自動でHTTPS化されますか?
されません。ブラウザがサブドメインにHTTPSで接続しようとするだけです。サブドメイン側にHTTPSと有効な証明書がなければ、max-ageの期間中そのサブドメインは閲覧できなくなります。
www.付きのホストでincludeSubDomainsを返せば十分ですか?
十分ではありません。www.city.example.lg.jp で返したポリシーは、その配下(*.www.city.example.lg.jp)にしか及ばず、bousai.city.example.lg.jp などの兄弟サブドメインは対象外です。親ドメインでもHTTPSで応答し、includeSubDomains付きのHSTSを返す必要があります。
庁内専用のサブドメインも影響を受けますか?
受けます。同じドメイン名の配下にある限り、庁内システムや検証用ホストも対象です。HTTPSに対応していない庁内システムがあると、職員がブラウザで開けなくなる事故が起きます。
includeSubDomainsがないと、セキュリティAIチェッカーではどう判定されますか?
有効なHSTSがあってincludeSubDomainsがない場合は「△ 要確認」(重み2×0.45=0.9点)です。ASVS 5.0.0でサブドメインへの適用はレベル2以上の要件であり、外部からはすべてのサブドメインのHTTPS対応を確認できないため、×ではなく△としています。
includeSubDomainsを付けて問題が起きたら、どう戻せばよいですか?
同じホストでHTTPSによりmax-age=0を返し、ブラウザに記録を消してもらいます。長いmax-ageで広く配布された後では回復に時間がかかるため、短いmax-ageでの試験期間を必ず設けてください。
VercelではincludeSubDomainsは既定で付きますか?
独自ドメインの既定値は max-age=63072000; で、includeSubDomainsは付きません(*.vercel.app には付与・プリロード済み)。サブドメインまで適用する場合は next.config.js などで明示します。
この項目を含む127項目を、URLを入れるだけで無料診断します。
参考資料
- RFC 6797 HTTP Strict Transport Security(§6.1.2 includeSubDomains)
- OWASP ASVS 5.0.0 V3 Web Frontend Security(V3.4.1)
- OWASP HTTP Strict Transport Security Cheat Sheet
- HSTS Preload List Submission(hstspreload.org)
- MDN Strict-Transport-Security
- OWASP WSTG-CONF-07 Test HTTP Strict Transport Security
- Microsoft Learn「HSTS Settings for a Web Site <hsts>」
- Vercel Docs「Encryption and TLS」