Strict-Transport-Security(HSTS)

当ページではHTTP Strict Transport Security (HSTS)の概要と、その機能を実現するHTTP通信のレスポンスヘッダ「Strict-Transport-Security」の使い方について紹介しています。
 
 

HTTP Strict Transport Security (HSTS)の概要

HTTP Strict Transport Security (HSTS)とは、ユーザがWebサイトに「HTTP」で接続した際、強制的に「HTTPS」へリダイレクトし、以降のそのドメインへの接続はすべてHTTPSでの通信を要求する機能のこと。
仕様はRFC6797で規定されている。
HSTSを設定することで、メッセージの内容を通信の途中で傍受されること(中間者攻撃)を防ぐことができる。

Strict-Transport-Securityヘッダの動作

HSTSの機能を実現するために通信のレスポンスにて、「Strict-Transport-Security」ヘッダを付与する。
 
【上の図に対応する動作手順】
① ユーザがHTTPプロトコルでWebサーバへアクセスする。
② WebサーバはHTTPSプロトコルでアクセスし直すようにレスポンスを返す。
③ ブラウザはHTTPSプロトコルでリクエストを送り直す。
④ Webサーバはコンテンツを返すと共に、Strict-Transport-Securityヘッダを付与する。
⑤ ユーザが再びHTTPプロトコルでWebサーバへアクセスする。
⑥ ブラウザはStrict-Transport-Securityヘッダの有効期限内の場合、HTTPSプロトコルでリクエストを送る。
⑦ Webサーバはコンテンツを返す。
 

Strict-Transport-Securityヘッダの構文

HTTPのレスポンスヘッダに以下の構文のヘッダを追加することで、HSTSが有効になる。
フィールド値に設定できる値は以下の通り。
説明
max-age=<秒数>HTTPS接続を強要する時間(秒)。HSTSの機能を有効にする時間。必須
includeSubDomainsサブドメインにも機能を適用する場合に指定する。任意
preloadHSTS PreloadリストにWebサイトの登録を要求する場合に指定する。任意

HSTS Preloadリストについて

HSTSでは、初回の1回のアクセスはHTTPで通信を行うことになる。
HSTS Preloadリストと呼ばれるリストにサイトを登録することで、初回アクセスでもHTTPSで通信が可能となる。
登録はHSTS Preload List Submissionから可能。
 

参考

セキュリティ対策で使われる、その他のヘッダフィールドは以下のようなものがあります。
 
Strict-Transport-Securityヘッダの詳細は以下を参照!
Strict-Transport-Security - HTTP | MDN
もし、訪問者が http://www.foo.com/ または単に foo.com と入力したとき、ウェブサイトが接続を HTTP で受け付け、 HTTPS にリダイレクトするようになっていると、訪問者はリダイレクトされる前にまず、暗号化されないバージョンのサイトと通信する可能性があります。これは中間者攻撃の機会を作ってしまいます。リダイレクトは訪問者を、本来のサイトの安全なバージョンではなく、悪意のあるサイトに導くために利用される可能性があるからです。 HTTP の Strict Transport Security ヘッダーは、ブラウザーに対してサイトを HTTP を使用して読み込まず、サイトへのすべてのアクセスを、自動的に HTTP から HTTPS リクエストに変換するよう指示することができます。 Note: メモ: サイトに HTTP を使用してアクセスしたとき、ブラウザーは Strict-Transport-Security ヘッダーを無視します。これは攻撃者が HTTP 接続に介入して、ヘッダーを挿入したり削除したりするかもしれないからです。ウェブサイトに HTTPS でアクセスして、証明書のエラーがない場合、ブラウザーはサイトが HTTPS でアクセスできることを知り、 Strict-Transport-Security ヘッダーを信用します。