HSTSの解説と設定方法【.htaccessの書き方】
HSTSの解説
HSTS(HTTP Strict Transport Security)とは、アクセスしてきた閲覧者のブラウザに「このサイトへのアクセスはすべてHTTPSで接続するように」と指示するセキュリティ技術のことです。
HSTSを有効にすることで、HTTP通信を狙った中間者攻撃を防ぎ、サイトの安全性を高めることができます。
HTTPS接続についての詳細は、SSL(https)についてわかりやすく解説をご覧ください。
HSTSの仕組み
HSTSが有効になっているサイトにアクセスすると、閲覧者のブラウザはHSTSの指示を記憶し、次回のアクセスから強制的にHTTPSで接続するようになります。
閲覧者のブラウザがHSTSの指示を記憶している期間(強制的にHTTPSで接続する期間)は、HSTSに設定された有効期間によって決まり、そのサイトにアクセスするたび有効期間は上書き更新されます。
HSTSの必要性
常時SSL化しているサイトでは、HTTPへのアクセスをHTTPSにリダイレクトしていますが、これだけではセキュリティ的に不完全な状態です。
例えば、HTTPへのアクセスをHTTPSにリダイレクトしている「https://example.com」というサイトに、「http://example.com」や「example.com」とアドレスバーに入力してアクセスした場合、まずHTTPのページに接続されて、その後にHTTPSのページへリダイレクトされます。
HTTPSにリダイレクトしているので何も問題ないように見えますが、暗号化されていないHTTPのページを経由することになるため、通信傍受やフィッシングといった中間者攻撃の危険があるのです。
このような問題を防ぐための技術がHSTSです。
HSTSが有効になっているサイトでは、HTTPを経由せず強制的にHTTPSで接続するので、中間者攻撃からサイトと閲覧者を守ることができます。
HSTSプリロードについて
HSTSの仕組みは、アクセスしてきた閲覧者のブラウザにHSTSの指示を記憶させ、2回目以降のアクセスから強制的にHTTPSで接続するというものです。
つまり、初回のアクセスに関しては、中間者攻撃の危険が残っているということになります。
この問題の解決策として考えられたのが「HSTSプリロード」という仕組みです。
HSTSプリロードは、HSTSを有効にするサイト(ドメイン)のリストをブラウザに組み込んでおくことで、初回のアクセスから強制的にHTTPSで接続するようになるというものです。
HSTSプリロードを有効にするためには、Googleが管理している「HSTSプリロードリスト」にドメインを登録する必要があります。
HSTSプリロードリストは、Chrome・Firefox・Safari・Edge・Operaといった主要ブラウザで採用されており、リストにドメインが登録されると、これらのブラウザでHSTSプリロードが有効になります。
HSTSの設定方法
HSTSの設定自体は簡単にできるのですが、サイトを常時SSL化していないとHSTSを有効にすることはできません。
まず、常時SSL化できているか確認してから、.htaccessでHSTSの設定をしていきます。
常時SSL化できているか確認する
HSTSはすべての接続をHTTPSにするため、サイトを常時SSL化(すべてのページをSSL化)している必要があります。
HTTPSで接続できないページやコンテンツがあるとHSTSを有効にすることはできないので、HSTSの設定をする前に以下の項目についてよく確認してください。
- 内部リンク・画像・CSS・JavaScriptなどへのURL(パス)がHTTPSになっているか
- HTTPからHTTPSにリダイレクトしているか
- 「wwwあり・なし」の両方をSSL化しているか
※URL正規化していても、両方をSSL化する必要があります
常時SSL化の詳しい設定方法については、常時SSL化とは?設定方法をわかりやすく解説を参考にしてください。
.htaccessでHSTSの設定をする
.htaccessとは、Webサーバーの挙動を設定できるファイルのことで、ApacheというWebサーバーを採用しているレンタルサーバーで使用することができます。
HSTSの設定をする方法はとても簡単で、「Strict-Transport-Security」に有効期限とオプションを指定するだけです。
ただし、強制的にHTTPSで接続するという強力な指示なので、サイトの表示や動作を見ながら慎重に設定するようにしてください。
※.htaccessは挙動にかかわる重要なファイルなので、必ずバックアップをとり、記入間違いのないように注意してください。
※.htaccessのルールとして、最後の行を必ず改行(空白の行)にしてください。
※メモ帳で.htaccessの編集をすると「.htaccess.txt」というファイルになってしまうので、FTPソフトでレンタルサーバーにアップロードした後、FTPソフト上で「.txt」の部分を削除してください。
HSTSの設定例
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
指示文の解説
- Header set Strict-Transport-Security
- レスポンスヘッダーにStrict-Transport-Securityを追加するという意味です。
- max-age=○○
-
HSTSの有効期間(強制的にHTTPSで接続する指示をブラウザが記憶する時間)です。
秒単位で指定します。HSTSプリロードリストに登録する場合は、31536000秒(1年)以上に指定する必要があります。
ただし、サイトの表示や動作に問題ないかを見るために、最初は300秒(5分)などでテストすることが推奨とされています。 - includeSubDomains
-
サブドメインでもHSTSを有効にする設定です。
この設定を指定する場合は、運用しているすべてのサブドメインをSSL化しておかなくてはいけません。省略可能ですが、HSTSプリロードリストに登録するためには指定する必要があります。
- preload
-
HSTSプリロードリストに登録するための設定です。
省略可能ですが、HSTSプリロードリストに登録するためには指定する必要があります。
HSTSプリロードリストに登録する方法
Googleが管理しているHSTSプリロードリストに登録することで、初回のアクセスからHSTSを有効にすることができます。
まず、HSTSプリロードリストの登録条件を満たしているか確認し、その後専用のサイトからドメインを登録申請します。
一度HSTSプリロードリストに登録してしまうと、簡単には削除することができなくなります。
HSTSを有効にしてから色々な状況でテストし、問題がないか確認してから登録するようにしてください。
HSTSプリロードリストの登録条件を確認する
HSTSプリロードリストに登録するためには、常時SSL化していることに加えて下記の条件も満たす必要があります。
- すべてのサブドメインをSSL化している
- Strict-Transport-Securityヘッダーの「max-age」は31536000秒(1年)以上にする
- Strict-Transport-Securityヘッダーに「includeSubDomains」ディレクティブを指定する
- Strict-Transport-Securityヘッダーに「preload」ディレクティブを指定する
サブドメインを使用している場合は、すべてSSL化する必要があるので注意してください。
HSTSプリロードリストに登録申請する
HSTS Preload List Submissionにアクセスして、入力欄にドメインを入力し、「Check HSTS preload status and eligibility」をクリックします。
2つの項目(サイトの所有者であるか & SSL化していないサブドメインにはアクセスできなくなることを理解しているか)にチェックを入れ、「Submit 〇〇 to the HSTS preload」をクリックします。
申請が承認されれば、HSTSプリロードリストに登録されます。
※承認には数日から数週間かかります。
最初のページに戻って申請したドメインをもう一度入力すると、現在の状況(登録済み or 承認待ち)を確認できます。
「currently preloaded」と表示されていれば登録が完了しています。
HSTSの確認方法
HSTSが有効になっているかを確認するには、ブラウザの開発者ツールで確認する方法と、SSLテストツールで確認する方法があります。
調べられる項目が違うので、両方の方法でチェックすることをおすすめします。
ブラウザの開発者ツールで確認する
ブラウザの開発者ツールを使用すれば、HSTSが有効になっているかを簡単に確認することができます。
Google Chromeの場合は以下の手順で確認できます。
- 調べたいサイトのページでキーボードの「F12」を押す
- 「Network」をクリック
- 再読み込みをする
- HTMLファイル(ページのURLになっているファイル)をクリック
- 「Response Headers」に『strict-transport-security』ヘッダーがあるか、設定した値になっているかを確認する
SSLテストツールで確認する
Qualys SSL Labsが提供しているSSLテストツールは、SSLの安全性をテストすることができる無料ツールで、HSTSが有効になっているかどうかも調べることができます。
SSL Server Testにアクセスして、入力欄に調べたいサイトのドメインを入力します。
最近テストされたドメインの一覧に表示させたくない場合は、「Do not show the results on the boards」にチェックを入れてください。
グリーンのボックスに「HTTP Strict Transport Security (HSTS) with long duration deployed on this server.」が表示されていれば、HSTSが有効になっています。
脆弱性の問題があった場合、オレンジやピンクのボックスが出て評価が下がります。
脆弱性の問題がないことに加えて、HSTSが有効になっていれば「A+」の評価がでるようです。
HSTSの設定をする際の注意事項
HSTSの設定自体はとても簡単ですが、強制的にHTTPSで接続するという強力な指示であるため、設定を間違えるとサイトが正しく表示されなくなる可能性があります。
繰り返しになる部分もありますが、HSTSを設定する際の注意点をまとめておきます。
- HSTSの設定は、常時SSL化していることが前提となります。
特に、「wwwあり・なし」両方でSSL化する必要があるということに注意してください。 - .htaccessファイルは編集する前に必ずパックアップを取り、編集後はサイトの表示や動作に問題がないか確認してください。
- ブラウザの開発者ツールで、Strict-Transport-Securityヘッダーが指定した設定になっているか確認してください。
- HSTSプリロードリストに一度登録してしまうと、ブラウザのアップデートがあるまで元に戻せなくなるため、HSTSを有効にしてもサイトが問題なく表示されているか確認してから登録してください。
また、すべてのサブドメインをSSL化する必要があるということに注意してください。