Google公式データによると、ChromeでHTTPS経由で読み込まれたページの割合は、2020年5月16日現在87%となっています。多くのウェブマスターがHTTPSを導入して、訪問するユーザーへ安全にアクセスできる環境を整備していることが分かります。
しかし、HTTPSを導入しているにも関わらず、HSTSを設定していないサイトを見ます。
HTTPでアクセスしたユーザーに対して、安全で保護された環境を提供できるので、HSTSを設定することをオススメします。
この記事では、HSTSの設定方法や、正しく設定できたかどうかの確認方法をお伝えします。
HSTSとは
HSTSとはHTTP Strict Transport Securityの略で、SSL化されたサイトに対して、ユーザーがHTTPで接続することを極力減らすためのセキュリティ機能です。
サイトにHSTSを設定すると、ユーザーがHTTPのURLにアクセスした場合でも、2回目以降はブラウザ側で強制的にHTTPSで接続するので、セキュリティが上がります。
301リダイレクトとは別物
ユーザーに対してHTTPSのページを表示する意味では似ていますが、301リダイレクトとは全く別物で、HSTSはセキュリティのために導入します。
例えば、SSL化以前のHTTPの被リンクがあったとします。このページに何回もアクセスする同一ユーザーがいた場合、
- HSTSを設定していないサイト・・・毎回HTTPで接続してHTTPSにリダイレクト
- HSTSを設定しているサイト・・・初回はHTTPで接続してHTTPSにリダイレクトするが、2回目以降はリダイレクトなしにHTTPSで接続
つまり、HSTSを設定していないサイトはHTTPSへリダイレクトするとはいえ、毎回HTTPで接続するので、ユーザーに対して保護されていないHTTPのコンテンツを提供するリスクが生じます。
HTTPは改竄の検知機能を持っていないので、攻撃者から中間者攻撃が行われ、悪意のあるサイトへリダイレクトする指示に書き換えられることもあります。
HSTSを設定しているサイトの場合、保護されていないHTTPのコンテンツを提供するのは初回のみで、2回目以降は直接HTTPSをユーザーに提供できるので、セキュリティは上がります。
301リダイレクトを設定していたとしても、HSTSを設定する・しないによって、セキュリティは大きく変わってくることを覚えておいてください。
HSTS プリロードとは
今お伝えしたとおり、HSTSを設定したとしても、1回目のアクセスは安全ではありません。ここで登場するのがHSTS プリロードです。
HSTS プリロードとは、リストに登録したサイトに対して、1回目のアクセスからHTTPSで接続するセキュリティ機能です。
Chrome・Safari・Firefox・Edge・IE11など主要なブラウザは、HSTS プリロードに対応しています。
登録しておけば、主要なブラウザからアクセスがあった際、初回訪問を含めて常時HTTPSで接続され、中間者攻撃のリスクも減ります。
HSTS プリロード リストにサイトを登録することで、よりセキュリティが上がりますので、こちらも合わせて設定します。
※サイト内の一部に非SSL化ページがあると、ユーザはアクセスできなくなります。この注意点については後述します。
HSTSを設定する手順
次の手順でHSTSを設定します。
ちなみにHSTSを設定するには、SSL化が行われていることが前提になるのでご注意ください。
- .htaccessにコードを追加
- HSTS プリロード リストに登録
1. .htaccessにコードを追加
次のコードを.htaccessに追加します。記述する場所は、どこでも構いません。
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
1度アクセスがあると、31536000秒間 (1年間) 保存されます。
2. HSTS プリロード リストに登録
HSTS プリロードに登録すると、初回のアクセスから直接HTTPSに接続できますので、必ず登録します。
①HSTS Preload List Submissionにアクセス
②ドメインを入力
③「チェックボックス」にチェックを入れて「Submit」をクリック
注意点
HSTS プリロード リストに登録すると、初回のアクセスから直接HTTPSに接続します。
SSL化していないHTTPのページが残っていると、ユーザーはアクセスできなくなるのでご注意ください。
- max-age (有効期限) は最低31536000秒 (1年)
- HSTS プリロードに登録するとドメイン全体に対して行われるので、サブドメイン (sub.example.com) のみ適用したり、特定のサブディレクトリ(example.com/directory) のみ適用することはできない
- SSL化していないページが残っている状態でHSTS プリロードに登録すると、非SSLページにアクセスできなくなる
- 上記の場合、登録の解除も可能だが、変更がChromeユーザーに届くには数ヶ月かかり、他のブラウザは保証できない
初めて導入するのであれば、サイト全体とサブドメインで長期的にHTTPSをサポートできることを確認してからリクエストします。
max-ageを段階的に増やしていくと良いでしょう。
- 5分:
max-age=300; includeSubDomains
- 1週間:
max-age=604800; includeSubDomains
- 1ヶ月:
max-age=2592000; includeSubDomains
問題がないと確認したら、max-ageを1年に増やして、サイトをHSTS プリロードリストに登録します。
HSTSが設定できたかどうか確認する
2通りの方法があります。
- Chrome デベロッパーツールで確認
- SSL Server Testで確認
Chrome デベロッパーツールで確認
①デベロッパーツールを開く
②「Network」タブを開いて、ページをリロード
③一番上のページのファイルを開き、Response Headersを確認
④「strict-transport-security」の項目があればOK
SSL Server Test
①SSL Server Testにアクセス
②ドメインを入力して「Submit」をクリック
③HTTP Strict Transport Securityが表示されればOK
さいごに
HSTSの設定方法についてお伝えしました。
ナレッジ