ページ更新日:2026/05/29
Strict-Transport-Security: max-age=31536000; includeSubDomains⚠ 証明書エラーがある状態で有効にするとサイトにアクセスできなくなるため、必ず HTTPS が正常に動作してから設定してください。まずは短い
max-age でのテストを推奨します。
HSTS(HTTP Strict Transport Security)は、Webサーバーがブラウザに対して「このサイトには常にHTTPSで接続してください」と指示するセキュリティ機能です。
一度アクセスしたブラウザは、指定期間中は自動的にHTTPSでのみ接続するようになり、中間者攻撃(MITM)やSSLストリッピング攻撃を防止します。
HSTSは、サーバーがHTTPSレスポンスに以下のようなヘッダーを付与することで機能します:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
| パラメータ | 説明 |
max-age=31536000 |
ブラウザがHTTPS強制を記憶する期間(秒)。31536000秒=1年。 |
includeSubDomains |
サブドメインにも同じポリシーを適用する。 |
preload |
HSTSプリロードリストへの登録を許可。ブラウザ出荷時からHTTPSを強制。 |
HSTS は Chrome・Firefox・Safari・Edge など主要ブラウザがすべて対応しています(Internet Explorer 11 以降も対応)。
HSTSは「一度 HTTPS でアクセスしたブラウザのみ」に効力が及びます。初回アクセスがHTTPの場合は対象外です(プリロードリストに登録すれば初回から有効)。
https://example.com に初めてアクセスStrict-Transport-Security ヘッダーを返すmax-age 秒間 HTTPS 必須」と記録http://example.com を入力してもブラウザ側で自動的に https:// に変換してリクエスト(サーバーへの HTTP リクエスト自体が発生しない)server {
listen 443 ssl;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
...
}
# mod_headers モジュールが必要 Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains" />
</customHeaders>
</httpProtocol>
</system.webServer>
Chrome・Firefox・Safari・Edgeなどの主要ブラウザは HSTSプリロードリスト(hstspreload.org)を持っており、リストに登録されたドメインには初回アクセスからHTTPSが強制されます。
登録するには以下の要件を満たす必要があります:
max-age=31536000(1年以上)、includeSubDomains、preload が含まれること登録は hstspreload.org から申請できます。
HSTS は一度有効にすると簡単に解除できません。以下のステップで段階的に導入することを強く推奨します。
max-age=300(5分)で設定し、ブラウザ・モバイル・SEOツールで問題がないか確認する。max-age=2592000(30日)→ max-age=31536000(1年)と段階的に延ばす。max-age の目安: テスト 300(5分)→ 初期運用 2592000(30日)→ 安定運用 31536000(1年)。プリロード申請には max-age=31536000(1年)以上が必須で、63072000(2年)以上が推奨されます。
curl -I https://www.example.com
レスポンスに Strict-Transport-Security: max-age=31536000; ... が含まれていれば正しく設定されています。
Chrome のアドレスバーに chrome://net-internals/#hsts と入力すると、HSTS キャッシュの確認・削除ができます。
開発・テスト環境でHSTSをクリアしたい場合は「Delete domain security policies」欄にドメインを入力して削除してください。
max-age=0 になっていないか、値が極端に小さくないかを確認してください。
Chrome は chrome://net-internals/#hsts の「Delete domain security policies」で対象ドメインの HSTS を削除できます。サーバー側では Strict-Transport-Security: max-age=0 を返すことでブラウザの記憶を解除できます。
includeSubDomains を付けるとすべてのサブドメインが HTTPS 必須になります。証明書が未設定のサブドメインがある場合は、includeSubDomains を外すか、該当サブドメインにも証明書を用意してください。
混在コンテンツ(HTTPS ページ内の http:// リソース)でお困りの場合は 混在コンテンツ(Mixed Content)の対処 もご覧ください。
includeSubDomains を省いてください。max-age=300)でテストし、問題がなければ長期間に変更することを推奨します。Strict-Transport-Security: max-age=0 を返す(ブラウザに「このドメインの HSTS を忘れてください」と指示)、その後ヘッダーを削除します。ただしすべてのユーザーへの反映は即座ではなく、旧設定の max-age が切れるまで強制が続くブラウザもあります。
📌 関連ページ:
NginxのHSTSとTLS設定強化(SSL Labs A+ 達成設定例)
ApacheでHSTS(常時SSL)設定
TLSバージョンと暗号スイートの設定ガイド
混在コンテンツ(Mixed Content)の対処
NginxへのSSL証明書インストール手順
ApacheへのSSL証明書インストール手順
常時SSL(Always On SSL)について