HSTS(HTTP Strict Transport Security)について
HSTS(HTTP Strict Transport Security)とは
HSTSとは平たく言うと、2回目からの通信を必ず「https」での通信にする様にブラウザに登録する設定の事を指します。
初回の通信からではなく、2回目からの通信に対しておこなわれる設定ですね。
初回で設定、2回目から実施
それはなぜかと言うと、初回の1回目でHSTSの設定をするからです。
2回目からはhttpsでの通信をするようにサーバー側がブラウザに命令をするので、2回目以降はHSTS設定が続く限り、https:通信がされます。
1回目・2回目といきなり述べてもよくわからないかも知れませんので、順を追って説明していきましょう。
HSTSが必要な理由
前回SSL化の手順(HTML版・ワードプレス版)のページでもSSLの転送について説明をしておりました。
.htaccessの強制転送(301リダイレクト)を掛けて、http:での通信をhttps:通信へ転送する事が重要だとしていましたね。
.htaccessに記載したhttpsへのリダイレクト設定
RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://lpeg.info/$1 [R=301,L]
この時、WEBサイトがhttps:になったからといって、お気に入り登録をしているユーザーは改めて登録をし直したりはしません。
強制転送を掛けている訳ですから、常にユーザーには自動でhttpsのWEBページが表示されます。
.htaccessなどで転送を掛け続ける必要がある
この時ユーザーに違和感はまるでありませんので、ブックマークなどに登録されているURLは以前として「http」のままなのです。
これは当たり前の事ですよね。
上記の理由から.htaccessによる設定をずっと掛け続けなければならないのですね。
あわせて読みたい関連記事
外部傍受やフィッシング詐欺の危険性あり
SSL化後に対象のサイトをブックマークやお気に入りに入れたユーザーであれば、問題はありません。
しかしそれ以前から登録していたユーザーはSSL化されたサイトであろうと、毎回毎回まずは「http」で通信をしようとする訳です。
1回目の通信を狙う
瞬時にhttpsに転送されるのですが、一瞬でもhttpで通信をする事は事実です。
特に無線LANなどの環境ではその一回目のhttp通信が外部から傍受されたり、フィッシング詐欺に遭ったりする危険性があるとされています。
これを防ぐのにHSTSが利用されているという訳です。
グーグルはhttpsをランキング要因に組み込んだことを発表した際に「サイトでHSTSを有効にするように」と指示しています。
その事からもこのHSTSの重要性がうかがえます。
具体的なフィッシング詐欺事例
例えばあなたが空港で無料Wi-Fiアクセスポイントにログインしてインターネットを利用するとします。
そして銀行サイトにログインをしてオンラインで自身の口座残高の確認や取引をしようとしたとしましょう。
ここで仮にあなたが使用したWi-Fiアクセスポイントが、本当のアクセスポイントではなく「ハッカーが用意していたノートパソコン」だったら。
アクセスポイントのなりすまし
WiFiなどのアクセスポイントは画面に表示されるリスト一覧の中から選択をしているだけのはずです。
接続先の機器(物体)を確認しないので「どんな端末とつながっているか」はわかりません。
アクセスポイントになったそのノートパソコンがあなたのhttpでの通信を傍受し、本物の銀行サイトではなくあらかじめ用意していた「偽」の銀行サイトへ転送させる事ができるのです。
するとあなたの個人情報が第三者に漏れてしまう事になりますよね。
もし2回目の通信なら
あなたは空港でサイトを訪問する前に必ず一度はその銀行のWEBサイトを訪問しているはずです。
ここで銀行のWEBサイト側が前もってHSTSを利用していれば、その1回目のアクセス時に自動的にhttpsのみを用いるようブラウザに設定がされます。
そうすると空港でのアクセスは必然と「2回目以降」となりますので、最初からhttps通信によるアクセスになります。
暗号化通信ならアクセスポイントに「なりすまし」ができない
つまりノートパソコンによるアクセスポイントのなりすましができなくなるのです。
このようにしてハッカーによるこの種のハッキング攻撃を防ぐ事ができるのですね。
HSTSの設定方法
HTTPSのドキュメントルートの「.htaccess」ファイルに以下の記述を追加します。
WEBサイトの状況に合わせて「max-age」以降の記述を修正しましょう。
Header set Strict-Transport-Security "max-age=31536000;" 或いは Header set Strict-Transport-Security "max-age=31536000; includeSubDomains;" 或いは Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
max-age | HSTSの設定をブラウザに記憶させる期間です。単位は「秒」です。まず最初は「max-age=86400;」(86400秒=丸1日です)程度に設定しておき、何か不備があれば修正をしましょう。 この場合1日でWebブラウザのHSTSの設定が一旦リセットされます。問題がなければ31536000秒=丸1年で設定するとよいでしょう。 |
---|---|
includeSubDomains(省略可能) | 対象のWEBサイトで使用するドメイン配下にある全てのサブドメインにも、このHSTSのルールを同様に適用する設定です。 このパラメータを付加すると、サブドメインがHTTPSに対応していないWEBサイトであった場合にも強制的にSSL化(https:)が強制されますので、場合によってはアクセスできなくなるので注意しましょう。 |
preload(省略可能) | プリロードHSTS(Preload HSTS)に対応させる場合はこのパラメータを付加します。詳細は次のプリロードHSTSの欄で解説します。 |
HSTS(HTTP Strict Transport Security)の弱点
HSTSの設定はあくまで2回目以降のアクセスの際にhttpのURLをブラウザで表示しようとすると、https通信でアクセスさせる仕組みです。
.htaccessのリダイレクト制御は使わずにhttpsで表示してくれますが、それは2回目からです。
1回目からのアクセスを防げない
つまり初回のアクセスについては、やはりHTTPでアクセスすることがあり得るのでセキュリティは万全とはいえない状態なのです。
先ほどの事例ですが、仮に空港でおこなった銀行サイトへのアクセスが「初めて」だった場合は、いくら銀行サイトがHSTS設定をしていても間に合いません。
http:通信を一瞬してしまうため、偽の銀行サイトへ飛ばされる事を防げないのです。
あわせて読みたい関連記事
プリロードHSTSで弱点をカバー
ここで対象となるWEBサイトがHSTSを適用していることを、アクセスする前から何かしらの方法でブラウザが知っていればどうでしょうか。
事前に把握していれば初めてアクセスする時からhttp:ではなくhttps:で接続できるようになりますよね。
この仕組みをプリロードHSTS(Preload HSTS)と呼びます。
事前にブラウザに登録する専用フォーム
Google ChromeとFirefox・Safariの3つのブラウザのみ事前登録できる
グーグル社員のイリア・グリゴリク氏がGoogle+でプリロードHSTSの一覧にサイトを登録するフォームを紹介しています。
このフォームにWEBサイトを前もって登録しておきます。
するとGoogle ChromeとFirefox・Safariの3つのブラウザからアクセスした時に初回訪問時から常にhttps:でのアクセスをしてくれます。
登録フォームはこちら
つまり銀行側が自身のWEBサイトのSSL化後にこの登録フォームにURLを事前登録しておけば良いのです。
積極的に事前登録をしよう
登録しておけば初めて訪問するユーザーがたとえどんな場所からアクセスをしても常にhttps:で通信できるようになります。
これでよりハッキング防止に役立つわけですね。
ですのであなたがWEBサイトをSSL化してかつサーバー側でHSTSを実装したのであれば、ぜひ登録しておきましょう。
登録の注意
ただしプリロードHSTSを登録できるのはペイレベルドメイン名(example.comなど)だけです。サブドメイン単位(sub.example.comなど)では登録ができないので注意しましょう。