HSTSの設定方法と注意点(nginx・Cloudflare・preloadのリスク)

公開日: 2026-07-19

HSTSとは何か、なぜ必要か

HSTS(Strict-Transport-Security レスポンスヘッダー)は、「このドメインには今後 必ずHTTPSでアクセスすること」をブラウザに覚えさせる仕組みです。

HTTPSへのリダイレクト(http:// へのアクセスを301/302で https:// に転送する設定)は 広く使われていますが、これだけでは最初の1回が保護されません。利用者が http://example.com に直接アクセスした場合、リダイレクトが返るまでの間、その最初の HTTPリクエストは平文で送信されます。この隙を突いて通信を横取りし、HTTPSへの アップグレードを妨害してHTTPのまま通信を継続させる攻撃手法がSSLストリッピングです。

HSTSを一度受け取ったブラウザは、以後 max-age で指定した期間、そのドメインへの アクセスをブラウザ内部で強制的に https:// に書き換えます。つまりHTTPリクエストが そもそもネットワークに出て行かなくなるため、SSLストリッピングの隙をなくせます。

設定方法

前提条件

HSTSを有効にする前に、サイト全体(HSTSを適用する全パス、includeSubDomains を 使う場合は全サブドメイン)が問題なくHTTPSで応答できることを確認してください。 HSTSはブラウザにキャッシュされるため、有効化後にHTTP専用のコンテンツが見つかった 場合、max-age の期間が過ぎるまで是正が反映されません。

まずは短い max-age(例: 300秒〜1日程度)から始めて問題がないことを確認し、 段階的に6か月(15552000秒)・1年(31536000秒)へ延ばすことを推奨します。

nginxの設定例

HTTPSの server ブロックにのみ追加してください。HTTP側に追加しても、 HTTPS経由で送られない限りブラウザはヘッダーを無視します。

server {
    listen 443 ssl;
    server_name example.com;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}

always を付けることで、エラーレスポンス(4xx/5xx)でもヘッダーが付与されます。 また、nginxの add_header はより具体的なコンテキスト(location 等)で別の add_header が定義されると、上位レベルの指定は継承されず無効になる点に注意してください。 location ブロックごとに add_header を使っている構成では、必要な location すべてに HSTSの指定を追加する必要があります。

Cloudflareの設定例

ダッシュボードの SSL/TLS > Edge Certificates > HTTP Strict Transport Security (HSTS) から有効化します。

  • Max Age Header:6か月(15768000秒)や12か月(31536000秒)などを選択
  • Apply HSTS policy to subdomains:全サブドメインがHTTPS対応している場合のみON
  • Preload:次項の注意点を確認してからONにしてください

includeSubDomainsとpreload:任意の強化オプション

HSTSには必須事項(ヘッダー自体の送信・十分な max-age)のほかに、任意の強化オプションが 2つあります。どちらも欠けていること自体は警告(warn)ではなく、あくまで追加の強化余地 として案内されるべき項目です。

  • includeSubDomains:全サブドメインにもHSTSを適用します。一部のサブドメインが まだHTTP専用の場合、有効化するとそのサブドメインにアクセスできなくなります。
  • preload:ブラウザベンダー(Chrome・Firefox・Safari等)が管理する「HSTS preload list」にドメインを登録し、利用者が一度もアクセスしたことがない状態からでも 最初からHTTPS接続を強制します。通常のHSTSは「一度HTTPSでアクセスした後」から 有効になるため、preloadはその最初の1回すら保護します。

preloadを有効にする前に:復旧が困難な副作用

preloadには他の設定と異なる重大な注意点があります。一度登録すると、削除を申請してから 実際に利用者のブラウザから消えるまでに数か月〜それ以上かかることです。登録期間中に 何らかの理由でHTTPS提供を取りやめる、または一時的にでも http:// のみに戻す必要が 生じた場合、対象ドメイン(および includeSubDomains の対象となる全サブドメイン)は 削除が反映されるまで利用者が一切アクセスできなくなります。

hstspreload.org への登録要件は次のとおりです。

  • max-age が31536000(1年)以上であること
  • includeSubDomains が付与されていること(全サブドメインがHTTPS対応済みであること)
  • preload ディレクティブが付与されていること
  • ルートドメイン・www サブドメイン(存在する場合)の両方がHTTPSで正しく応答すること
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

上記の副作用を理解し、明示的にpreloadを希望する場合のみ申請してください。 preloadなしでも、通常のHSTS(必須事項を満たしたもの)だけで基本的な保護効果は 得られます。

設定後の確認方法

curl -I https://<host>Strict-Transport-Security ヘッダーが返ることを 確認したうえで、以下のフォームから再診断してください。診断結果では、HSTSの 有無・max-age の十分性・includeSubDomains・preloadの状況をまとめて確認できます。

まとめ

  • HSTSは、HTTPSリダイレクト設定だけでは防げない「最初の1回」のリスクを減らします。
  • 必須事項(ヘッダーの送信・十分な max-age)と、任意の強化オプション (includeSubDomains・preload)は分けて考えてください。
  • preloadは復旧が困難な副作用があるため、内容を理解したうえで希望する場合のみ 有効にしてください。

証明書自体の有効期限管理についてはSSL証明書の有効期限を確認する方法 もあわせてご確認ください。診断結果の取り扱いについては免責事項も ご覧ください。

診断する

診断結果の取り扱いについては免責事項をご確認ください。