HSTS (HTTP Strict Transport Security)
約 4 分で読めます
最終更新: 2026-02-18
HSTS とは
HSTS (HTTP Strict Transport Security) は、Web サーバーがブラウザに対して「今後このドメインへのアクセスは必ず HTTPS を使うように」と指示するセキュリティ機構です。HTTP レスポンスヘッダーに Strict-Transport-Security を付与することで有効化されます。
HSTS が設定されていない場合、ユーザーが http://example.com にアクセスすると、サーバーが HTTPS へリダイレクトするまでの一瞬、通信が平文で行われます。この瞬間を狙った中間者攻撃 (SSL ストリッピング) が成立する余地があります。HSTS を設定すると、ブラウザ側で HTTP リクエストを送信する前に HTTPS に書き換えるため、この攻撃を根本的に排除できます。
HSTS の設定とディレクティブ
HSTS は以下のレスポンスヘッダーで設定します。
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
- max-age: ブラウザが HSTS ポリシーを記憶する秒数。31536000 (1 年間) が推奨値。初回導入時は 300 (5 分) や 86400 (1 日) から始め、問題がなければ段階的に延長するのが安全。
- includeSubDomains: サブドメインにも HSTS を適用する。
api.example.comやcdn.example.comなど、すべてのサブドメインが HTTPS に対応していることを確認してから有効化する。HTTP のみで運用しているサブドメインがあると、そのサブドメインにアクセスできなくなる。 - preload: HSTS Preload リストへの登録意思を示すフラグ。このフラグだけでは Preload リストに登録されず、別途申請が必要。
セキュリティヘッダーの中でも HSTS は副作用が比較的少なく、TLS/SSL による暗号化通信を確実に強制できるため、HTTPS 対応済みのサイトでは早期に導入すべきヘッダーです。
HSTS Preload リストの仕組み
通常の HSTS には「初回アクセス問題」があります。ブラウザが HSTS ヘッダーを受け取るのは最初の HTTPS アクセス時であるため、ユーザーがそのドメインに初めてアクセスする際は HSTS が機能しません。
この問題を解決するのが HSTS Preload リストです。これはブラウザにハードコードされた HSTS 対応ドメインのリストで、Chrome が管理する hstspreload.org から申請できます。登録されると、ユーザーが一度もアクセスしたことがないドメインでも、最初から HTTPS が強制されます。
Preload リスト登録の要件は以下のとおりです。
- 有効なデジタル証明書を使用していること
- HTTP から HTTPS へのリダイレクトが設定されていること
max-ageが 31536000 (1 年) 以上であることincludeSubDomainsとpreloadディレクティブが含まれていること
注意点として、Preload リストからの削除には数か月かかります。登録前にすべてのサブドメインが HTTPS に対応していることを慎重に確認してください。
HSTS 導入時の注意点と段階的アプローチ
HSTS は強力な反面、設定ミスがサイトのアクセス不能につながるリスクがあります。以下の段階的アプローチを推奨します。
- Step 1:
max-age=300(5 分) で設定し、サイト全体が HTTPS で正常に動作することを確認 - Step 2:
max-age=86400(1 日) に延長し、1 週間程度運用して問題がないことを確認 - Step 3:
max-age=31536000; includeSubDomainsに拡大 - Step 4: 必要に応じて
preloadを追加し、Preload リストに申請
特に注意すべきケースとして、CDN やサードパーティサービスが HTTP で配信しているリソースがある場合、HSTS 適用後に混在コンテンツ (Mixed Content) エラーが発生します。導入前にすべての外部リソースが HTTPS で配信されていることを確認してください。
CSP の upgrade-insecure-requests ディレクティブと併用すると、ページ内の HTTP リソース参照を自動的に HTTPS に書き換えてくれるため、移行期間中の混在コンテンツ問題を緩和できます。
よくある誤解
- HTTPS にリダイレクトしていれば HSTS は不要
- HTTP から HTTPS へのリダイレクト中、最初のリクエストは平文で送信されます。この瞬間に中間者攻撃 (SSL ストリッピング) が成立する可能性があります。HSTS はブラウザ側で HTTP リクエスト自体を HTTPS に書き換えるため、リダイレクトでは防げない攻撃を防御します。
- HSTS を設定すれば即座にすべてのユーザーに適用される
- 通常の HSTS はブラウザがヘッダーを受信して初めて有効になるため、初回アクセス時は保護されません。すべてのユーザーを初回から保護するには、HSTS Preload リストへの登録が必要です。