HSTSとは?仕組み・メリット・設定時の注意点

HSTSとは?仕組み・メリット・設定時の注意点

HSTSとは、WebサイトをHTTPSでのみ接続するようブラウザに指示する仕組みです。正式名称は「HTTP Strict Transport Security」で、HTTPS対応済みのサイトをより安全に運用するために使われます。

ただし、HSTSはSSL証明書を設定する機能でも、HTTPからHTTPSへ301リダイレクトする機能でもありません。設定を間違えると、サブドメインまで開けなくなることがあるため、仕組みを理解してから有効化する必要があります。

30秒でわかる結論

  • HSTSは「このサイトは今後HTTPSだけで開く」とブラウザへ伝える仕組み
  • HTTPへアクセスしても、HSTSを記憶したブラウザはHTTPSへ切り替えて接続する
  • HSTSはHTTPS化や301リダイレクトの代わりではない
  • 設定にはStrict-Transport-Securityレスポンスヘッダーを使う
  • max-ageはブラウザがHSTS設定を記憶する秒数
  • includeSubDomainsを付けるとサブドメインにも適用される
  • preloadは長期的な影響があるため、初心者が安易に追加しない
  • すべての対象ドメイン・サブドメインでHTTPSが正常に使えることを確認してから設定する

HSTSとは?

HSTSは、Webサーバーがブラウザへ「このホストには今後HTTPSで接続してください」と伝えるセキュリティ機能です。

WebサーバーはHTTPSのレスポンスに、次のようなHTTPヘッダーを付けます。

HSTSヘッダーの基本例

Strict-Transport-Security: max-age=31536000

この例では、ブラウザがそのホストをHSTS対象として約1年間記憶します。

その後、利用者が「http://example.com」のようなHTTP URLを入力しても、HSTSを記憶しているブラウザはHTTPSへ切り替えて接続します。

初心者向けに一言でいうと

HSTSは、「このサイトはHTTPではなくHTTPSで開く」とブラウザに覚えさせる仕組みです。

HSTSの仕組み

HSTSは、ブラウザとWebサーバーの間で次のように働きます。

1.利用者がHTTPSでサイトへアクセス
有効なTLS接続でWebサーバーへ接続します。
2.サーバーがHSTSヘッダーを返す
Strict-Transport-SecurityヘッダーをHTTPSレスポンスに含めます。
3.ブラウザがHSTS対象として記憶
max-ageで指定された期間、ポリシーを保存します。
4.次回HTTP URLが指定される
ブラウザ側でHTTPSへ切り替えます。
HTTPS接続を優先
HTTPで接続してから転送される前にHTTPSを使います。

RFC 6797では、HSTSヘッダーは安全な接続で受信した場合に処理されます。HTTPで送られたStrict-Transport-Securityヘッダーはブラウザに無視されます。

HSTSとHTTP→HTTPSリダイレクトの違い

HSTSと301リダイレクトは似て見えますが、働く場所が異なります。

項目 HSTS HTTP→HTTPSリダイレクト
動作する場所 主にブラウザ側 Webサーバー側
HTTP接続 記憶後はHTTPSへ切り替える 一度HTTPでサーバーへ接続する
主な目的 HTTPS利用を強制する HTTP URLをHTTPS URLへ転送する
初回アクセス 通常は事前情報なし HTTPからHTTPSへ転送可能
単独でHTTPS化できるか できない できない

HTTPS化したサイトでは、通常はHTTPからHTTPSへのリダイレクトも設定します。そのうえでHSTSを追加すると、以後のHTTP接続をブラウザ側でHTTPSへ切り替えられます。

SSL/TLS設定 + HTTP→HTTPSリダイレクト + HSTS = HTTPS運用をより強固にする構成

HSTSのメリット

HTTPへのダウングレードを防ぎやすくなる

利用者がHTTP URLを入力した場合でも、HSTSを記憶しているブラウザはHTTPSへ切り替えます。

そのため、HTTPからHTTPSへ転送する前の通信を狙う「SSLストリッピング」のような攻撃への対策になります。

HTTPリンクを踏んでもHTTPSへ切り替えられる

古いブックマークや外部サイトに「http://」のリンクが残っていても、HSTSを記憶したブラウザではHTTPSが使われます。

証明書エラーを無視して進みにくくなる

HSTS対象ホストで証明書エラーが発生した場合、ブラウザは利用者に危険な接続をそのまま続行させない動作をします。

HSTSの目的は速度ではなく安全性

HSTSを設定したからWebサイトが大幅に高速化するわけではありません。主な目的はHTTPS運用の安全性を高めることです。

max-ageとは?

max-ageは、ブラウザがHSTSポリシーを何秒間記憶するかを指定する値です。

max-age おおよその期間
300 5分
86400 1日
604800 1週間
2592000 30日
31536000 1年
63072000 2年

たとえば次の設定では、ブラウザが約1年間HSTSを記憶します。

1年間の設定例

Strict-Transport-Security: max-age=31536000

重要なのは、max-ageを長くすると、設定ミスの影響も長く残りやすいことです。

最初から長期間にしない

HSTS Preload公式では、5分・1週間・1か月のように段階的にmax-ageを長くし、その間に問題がないか確認する方法が案内されています。

includeSubDomainsとは?

includeSubDomainsを指定すると、そのドメイン配下のサブドメインにもHSTSポリシーを適用します。

サブドメインを含める例

Strict-Transport-Security: max-age=31536000; includeSubDomains

たとえばexample.comでこの設定を有効にすると、次のようなサブドメインも影響を受けます。

  • www.example.com
  • shop.example.com
  • mail.example.com
  • test.example.com

HTTPしか使えないサブドメインが1つでもあるなら注意

includeSubDomainsを付けると、古いシステム・社内用サブドメイン・検証環境などもHTTPS接続が必要になります。すべて確認してから有効化してください。

preloadとは?

通常のHSTSには弱点があります。初めて訪問するブラウザは、まだそのサイトがHSTS対象だと知りません。

この初回接続の問題を補うために使われる仕組みがHSTS preloadです。

preloadリストへ登録されたドメインは、対応ブラウザにあらかじめHSTS対象として組み込まれます。そのため、初回アクセスからHTTPSへ接続できます。

preloadを含む代表例

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload

現在のHSTS Preloadの登録要件では、少なくとも次の条件が求められます。

  • 有効な証明書を使用している
  • HTTPからHTTPSへリダイレクトする
  • すべてのサブドメインをHTTPSで提供する
  • max-ageが31536000秒以上
  • includeSubDomainsを指定する
  • preloadを指定する

preloadは通常のHSTSより慎重に

HSTS Preload公式は、preloadをデフォルトで有効にしないよう注意を促しています。リストからの削除には時間がかかり、サブドメインをHTTPへ戻したくてもすぐには戻せません。

HSTSを設定する前に確認すること

設定前チェック

  • Webサイト全体がHTTPSで正常表示できる
  • SSL/TLS証明書が正常である
  • HTTPからHTTPSへリダイレクトできている
  • HTTPSでフォーム・ログイン・決済などが正常動作する
  • Mixed Contentが残っていない
  • includeSubDomainsを使う場合、すべてのサブドメインがHTTPS対応している
  • CDNやリバースプロキシを使っている場合、どこでHSTSヘッダーを付与するか把握している

WordPressの場合も、WordPress管理画面だけでHSTSが完結するとは限りません。HSTSはWebサーバー、レンタルサーバー、CDNなどのレスポンスヘッダー設定として追加することが多いためです。

HSTSの設定方法

HSTSは、HTTPSレスポンスにStrict-Transport-Securityヘッダーを付与して設定します。

どこで設定するかは利用環境によって異なります。

環境 主な設定場所
共用レンタルサーバー サーバー管理画面・対応機能
Apache サーバー設定・.htaccess等
Nginx サーバー設定
CDN利用 CDN側のレスポンスヘッダー設定
マネージドサービス サービス側で自動設定される場合あり

具体的な設定方法はサーバー構成によって異なります。共用レンタルサーバー利用者は、サーバー会社がHSTS機能を提供しているかを先に確認してください。

HSTSを確認する方法

設定後は、HTTPSレスポンスにStrict-Transport-Securityヘッダーが含まれているか確認します。

ブラウザの開発者ツールで確認

対象ページをHTTPSで開き、ネットワークタブのレスポンスヘッダーを確認します。

確認するヘッダー

Strict-Transport-Security: max-age=31536000

HTTPヘッダー確認ツールを使う

外部のHTTPヘッダー確認サービスでも確認できます。ただし、CDN・地域・キャッシュなどにより表示が異なる場合があるため、必要に応じて複数環境で確認します。

サブドメインも確認する

includeSubDomainsを使う場合は、メインドメインだけでなく実際に使用しているサブドメインもHTTPSで正常表示できるか確認してください。

HSTS設定時の注意点

HTTPSが壊れるとサイトを開けなくなる

HSTSを記憶したブラウザはHTTPSを優先します。その状態で証明書が失効したり、HTTPS設定を削除したりすると、HTTPへ戻して一時回避することが難しくなります。

証明書エラーを無視して進めない

これはHSTSの安全性でもありますが、運営側から見ると、証明書更新ミスがそのままアクセス不能につながります。

includeSubDomainsの影響範囲が広い

親ドメインで設定すると、将来作るサブドメインも影響を受けます。古い管理画面や社内システムがHTTPだけで動作している場合は特に注意します。

max-ageはすぐ元に戻せない

設定を解除するときは、HTTPSレスポンスで次のように送ります。

HSTS解除用の値

Strict-Transport-Security: max-age=0

ただし、利用者のブラウザがそのHTTPSレスポンスを受信する必要があります。証明書が壊れてサイトへHTTPS接続できない状態では、単純に解除できません。

preloadはさらに解除しにくい

preloadリストから削除申請しても、変更が各ブラウザへ行き渡るまで時間がかかります。そのため「試しにpreload」は避けるべきです。

HSTSはWordPressサイトに必要?

WordPressだから必須というわけではありません。判断基準は、WordPress本体ではなくHTTPS運用を長期的に固定できるかです。

個人ブログ

必要度:中

HTTPS運用が安定しているなら有効ですが、サーバー側で自動対応している場合もあります。

会社サイト

必要度:高め

問い合わせ・ログインなどを扱い、HTTPSを恒久運用するなら検討価値があります。

検証環境が多いサイト

注意度:高い

includeSubDomainsを付ける前に、検証用サブドメインもHTTPS対応しているか確認します。

初心者の共用サーバー

まず公式機能を確認

自分でヘッダーを追加する前に、レンタルサーバー側のHTTPS・HSTS対応を確認します。

HSTSを使わなくてもHTTPSは使える?

はい。HSTSがなくても、SSL/TLS証明書を設定してHTTPSでWebサイトを公開できます。

HSTSはHTTPSそのものではなく、HTTPS運用をさらに強くする追加のセキュリティ機能です。

HTTPS=通信を暗号化する仕組み
HSTS=HTTPSだけを使うようブラウザへ指示する仕組み

初心者はまずHTTPS化を正しく完了し、その後にHSTSを検討してください。

教科書判定

教科書判定

HSTSはHTTPS運用が完全に安定してから有効化する

初心者はまず「HSTSはHTTPSをブラウザに強制する仕組み」と理解すれば十分です。

個人ブログや会社サイトでも、HTTPS・証明書更新・HTTP→HTTPSリダイレクトが安定しているならHSTSは有効な追加対策になります。

一方、includeSubDomainsやpreloadは影響範囲が大きいため、すべてのサブドメインを長期的にHTTPS運用できることを確認してから使ってください。特にpreloadは安易に有効化しない方が安全です。

FAQ

Q. HSTSを設定すればSSL証明書は不要になりますか?

A. いいえ。HSTSは有効なHTTPS接続を前提にする仕組みです。SSL/TLS証明書は必要です。

Q. HSTSと301リダイレクトはどちらを使えばよいですか?

A. 役割が違うため、HTTPS運用では両方を使う構成があります。301はHTTPからHTTPSへ転送し、HSTSはブラウザへHTTPSのみを使うよう指示します。

Q. max-ageは長いほど安全ですか?

A. 長期間のHSTSは保護期間を長くできますが、設定ミスの影響も長く残ります。最初は短期間でテストし、問題がないことを確認して段階的に伸ばす方が安全です。

Q. includeSubDomainsは付けた方がよいですか?

A. すべてのサブドメインをHTTPSで運用できる場合に検討します。HTTPしか使えないサブドメインがあるなら付けないでください。

Q. preloadは初心者でも設定した方がよいですか?

A. 基本的には急いで設定する必要はありません。全サブドメインを長期的にHTTPS運用でき、解除に時間がかかることまで理解したうえで判断します。

まとめ

HSTSはHTTPSをより確実に使わせるセキュリティ機能

  • HSTSはStrict-Transport-Securityヘッダーで設定する
  • ブラウザにHTTPSのみを使うよう記憶させる
  • max-ageは記憶期間を秒数で指定する
  • includeSubDomainsはサブドメインにも適用する
  • HSTSはHTTPS化や301リダイレクトの代替ではない
  • 証明書やHTTPS設定に問題があるとアクセス不能になる可能性がある
  • 最初は短いmax-ageから段階的に確認する
  • preloadは影響が長期化するため慎重に使う

初心者は、まずHTTPS運用を完全に安定させてください。そのうえでHSTSを追加し、includeSubDomainsやpreloadは必要性と影響範囲を理解してから設定するのが安全です。

次に読む

次に読む

「HTTPからHTTPSへリダイレクトする方法」「TLSとは?SSLとの違いを初心者向けに解説」「Mixed Contentとは?HTTPS化後の警告原因と直し方」「SSL証明書の有効期限と更新方法を解説」もあわせて確認してください。