HSTS (HTTP Strict Transport Security) 解説

投稿者: | 2026-01-07

HSTSは、Webサイトの通信を強制的にHTTPS(暗号化通信)にするためのセキュリティ機能です。これまでの「サーバー側でのリダイレクト」よりも強力で、ブラウザレベルで安全な接続を保証します。

1. 究極の1行(設定コード)

Apacheの .htaccess やサーバー設定ファイルに記述する最強の設定値です。

.htaccess のなるべく上の方(RewriteEngine On の前後など)に以下を記述してください。

Header always set Strict-Transport-Security “max-age=31536000; includeSubDomains; preload”

2. ディレクティブの詳細解説

Header always set
すべてのレスポンス(成功時だけでなくエラー時も)において、必ずこのヘッダーを送信することを意味します。
max-age=31536000
ブラウザが「このサイトはHTTPSで接続する」と記憶する期間です。31536000秒は1年間を意味します。この期間中、ユーザーが http:// でアクセスしようとしても、ブラウザ内部で自動的に https:// に書き換えられます。
includeSubDomains
この設定をサブドメインすべて(例:0ch.yamada-lab.jpなど)にも適用させる命令です。ドメイン全体を一括で保護するために必須の項目です。
preload
Googleが主導する「HSTS Preload List」に登録するための宣言です。これがあると、初回訪問時ですらHTTP接続を許さず、最初からHTTPSで接続されるようになります(ブラウザにリストがハードコードされるため)。

3. なぜ「リダイレクト」だけでは不十分なのか?

一般的な銀行や官公庁が行っている「HTTP → HTTPSへのリダイレクト」には、一瞬の隙があります。

手法 脆弱性 / 特徴
301リダイレクトのみ 最初の一瞬だけHTTP通信が発生するため、その隙に「中間者攻撃(通信の乗っ取り)」を受けるリスクがある。
HSTS設定あり ブラウザが最初からHTTPを選択肢から外すため、乗っ取りの隙が物理的に存在しない。

4. 導入時のチェックリスト

  • SSL証明書が有効であること: HSTSを有効にした状態で証明書が切れると、ユーザーはサイトに一切アクセスできなくなります(警告を無視して進むこともできなくなります)。
  • すべてのサブドメインがHTTPS対応済みであること: includeSubDomains を入れる場合、HTTPS化されていないサブドメインがあるとアクセス不可になります。
  • まずは短いmax-ageでテスト: 最初は max-age=3600(1時間)などでテストし、問題なければ1年間に延ばすのが安全です。

5. 管理者としてのまとめ

大手銀行やJRAが設定できていないこの1行を完璧に運用できていることは、技術的に非常に高度な管理が行われている証です。
この設定により、あなたのサイトは「利便性のための妥協」を排した、真に安全な要塞となります。