HSTSとは
HSTS(HTTP Strict Transport Security)は、「このサイトには、今後は必ずHTTPSで接続する」とブラウザに覚えさせる仕組みです。サーバーがHTTPSの応答に Strict-Transport-Security ヘッダーを付けると有効になります。仕様はRFC 6797です。
HSTSが必要な理由
サイトをHTTPS化しても、利用者が http:// でアドレスを入力したり、古いリンクから訪れたりすると、最初の1回はHTTPで接続します。この通信は暗号化されていません。公衆Wi-Fiなどでは、通信の途中にいる第三者がHTTPSへの切り替えを妨げ、偽のページを見せることがあります。
HSTSを有効にすると、ブラウザは記憶している期間、HTTPでの接続を自分でHTTPSに読み替えます。証明書にエラーがある場合も、利用者が警告を無視して先へ進むことはできなくなります。
HSTSの仕組み
- ブラウザがHTTPSでサイトに接続し、応答にHSTSヘッダーが含まれる。
- ブラウザが、そのドメインと有効期間(max-age)を記憶する。
- 期間内は、HTTPのアドレスを内部でHTTPSに置き換えてから接続する。
| 指定 | 意味 |
|---|---|
max-age=31536000 | 記憶する秒数。31536000秒は1年 |
includeSubDomains | サブドメインにも適用する |
preload | ブラウザに組み込まれるHSTSリストへの登録を希望する(別途申請が必要) |
HTTPの応答に付いたヘッダーは無視されます。また、記憶する前の初回訪問は保護されません。
HSTSの確認方法
ブラウザの開発者ツール(F12)で「ネットワーク」タブを開き、ページを再読み込みして、最上段のHTML文書のレスポンスヘッダーに strict-transport-security があるかを見ます。コマンドでは次のとおりです。
curl -s -D - -o /dev/null https://example.com/ | grep -i '^strict-transport-security'
何も表示されなければ未設定です。WindowsのPowerShellでは curl.exe -s -D - -o NUL https://example.com/ | Select-String strict-transport-security を使います。
HSTSの設定例
HTTPSで返す応答にだけ付けます。初めて有効にするときは、数値を300(5分)などの短い値にして始め、問題がなければ段階的に延ばします。hstspreload.orgは、5分、1週間、1か月と延ばし、最終的に1年(31536000秒)以上にする手順を示しています。以下は最終的な値の例です。
Apache(.htaccess)の例です。
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000" env=HTTPS
</IfModule>
nginx(HTTPSのserverブロック)の例です。
add_header Strict-Transport-Security "max-age=31536000" always;
WordPress(子テーマのfunctions.php)の例です。
add_action('send_headers', function () {
if (is_ssl()) {
header('Strict-Transport-Security: max-age=31536000');
}
});
よくある間違いと注意点
- 最初から長い期間を指定すると、証明書の期限切れや設定ミスが起きたとき、その期間いっぱいサイトを開けない利用者が出ます。
includeSubDomainsは、社内用やテスト用を含むすべてのサブドメインがHTTPSで動くと確かめてから付けます。preloadは、取り消しにブラウザの更新を待つため、数か月かかることがあります。hstspreload.orgの要件(max-ageが1年以上、includeSubDomains、preload)を満たし、HTTPSを長く維持できる場合だけ申請します。- HTTPからHTTPSへの301転送は別に必要です。HSTSだけでは、初回のHTTP接続は防げません。
- CDNやリバースプロキシの背後では、ヘッダーが利用者まで届いているかを、公開URLで実際に確認します。
Webサイト セキュリティチェッカーで確認する
Webサイト セキュリティチェッカーは、URLを入力すると、HSTSヘッダーの有無とmax-ageの長さ、HTTPからHTTPSへの転送の状態を診断します。結果には、判断の根拠となった応答の内容が示されます。
関連用語
関連する用語
サイトの設定を無料で確認する
サイトのURLを入力するだけで、HSTS などの設定状況を診断できます。Webサイト セキュリティチェッカー「Security Checker X」は、登録なしで使えます。









