HSTS (HTTP Strict Transport Security) の導入

  • 210
    いいね
  • 3
    コメント
この記事は最終更新日から1年以上が経過しています。

HTTPで接続した際に、強制的にHTTPSへリダイレクトし、以降のそのドメインへの接続はすべてHTTPSとする機能がHSTS (HTTP Strict Transport Security) である。RFC6797で標準化されている。

これはHTTPヘッダに以下を含むことで実現される。

Strict-Transport-Security:max-age=有効期間秒数;includeSubDomains

max-ageではHTTPSで通信する期間を設定する。また、includeSubDomainsを指定することで、サブドメインにもHSTSが適用されるように設定できる。

HSTSのサポートは、2015年6月9日にマイクロソフトがIEへのサポートを追加したことで、すべてのメジャーブラウザにおいてサポートが完了し、HTTPサーバーとしてもApacheを始めとし設定が可能だ。

Apacheの設定

Apacheにおいては、以下のバーチャルホストの設定になる。
ここではexample.comのサブドメインすべてにHSTSが適用されるように設定されており、365日(31,536,000秒)が有効期間である。

<VirtualHost *:443>
    ServerName example.com
    SSLEngine on
    Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</VirtualHost>`

その他のHTTPサーバーの設定

IPA(情報処理推進機構)のSSL/TLS暗号設定ガイドライン~安全なウェブサイトのために(暗号設定対策編)~ のAppendix B.4. HTTP Strict Transport Security(HSTS)の設定方法例を参照。

Preloaded HSTS

HSTSを用いても、最初の接続にHTTPを用いる限り、完全なセキュリティは実現されない。これを解決するために、ChromeではPreloaded HSTS、すなわち最初からブラウザにHSTSを組み込めば良い。これはブラウザ本体にHSTSで接続するドメインのリストを持つことにより実現できる。

Chromeに組み込まれたPreloaded HSTSはここで参照できる。

また、ChromeのPreloaded HSTSに組み入れるためには、こちらから申請する。

特定のドメインがPreloaded HSTSとして登録されているかどうかの確認はChromeのアドレスバーにchrome://net-internals/#hsts を入力し表示されるChrome Net-Internalsのページから確認することもできる。"Query domain"にドメイン名を入力し、QueryをすることでHSTS情報を得ることができる。以前に訪れたドメインの場合は、"Delete domain"でそのドメインを一度削除すると良い。

スクリーンショット 2015-07-01 17.42.47.png

参考情報