HTTP Strict Transport Security

HTTP Strict Transport Security(しばしば HSTS と略されます)は、HTTP の代わりに HTTPS を用いて通信を行うよう、Web サイトからブラウザにに伝達するためのセキュリティ機能です。

利点

例えばユーザが http://www.foo.com/ または単に foo.com と入力すると、Web サイトが HTTP で受け付けたコネクションを HTTPS へリダイレクトする場合、リダイレクトされるまでユーザは暗号化されない接続を行うことになるでしょう。

この方法には、リダイレクトによりユーザを元のサイトの安全なバージョンではなく悪意のあるサイトへ誘導するという、中間者攻撃のおそれがあります。

HTTP Strict Transport Security 機能により、Web サイトはブラウザに対して、そのサイトでは HTTP を使用せず、代わりに HTTPS へ置き換えてアクセスすることを試みるように伝達することが可能になります。

事例

あなたは、空港で無料の Wi-Fi アクセスポイントにログインして Web の閲覧を開始し、オンラインバンキングサービスで残高の確認や取引を行います。しかし不運にも、あなたが使用したアクセスポイントはハッカーのノートパソコンであり、そのハッカーはあなたの HTTP リクエストを傍受して、本物の銀行のサイトではなく偽のサイトへリダイレクトしています。これにより、あなたの個人情報はハッカーにさらされてしまいます。

Strict Transport Security はこのような問題を解決します。銀行の Web サイトが Strict Transport Security を利用していると、あなたが一度銀行の Web サイトへ HTTPS でアクセスすれば、ブラウザは自動的に HTTPS のみを用いるよう理解して、ハッカーによるこの種の中間者攻撃の実行を防ぎます。

Strict Transport Security の有効化

この機能を Web サイトで有効化する方法は、HTTPS でアクセスを受けた際に Strict-Transport-Security HTTP レスポンスヘッダを応答することです:

Strict-Transport-Security: max-age=expireTime [; includeSubDomains] [; preload]
max-age
そのサイトに HTTPS だけで接続することをブラウザが記憶する時間です。この時間は秒単位で指定します。
includeSubDomains Optional
このパラメータは省略可能です。Strict Transport Security のルールをすべてのサブドメインにも同様に適用します。
preload Optional
詳しくは Strict Transport Security のプリロード を参照してください。このパラメータは仕様 (RFC 6797) で定義されていません。
注: サーバが HTTP で Strict-Transport-Security ヘッダを送信してきた場合、ブラウザはこのヘッダを無視します。なぜなら、攻撃者による HTTP 接続の傍受、ヘッダの挿入・削除が可能だからです。Web サイトに HTTPS でアクセスし、かつ証明書のエラーがない場合、ブラウザはサイトの HTTPS が有効なものであると判断し、Strict-Transport-Security ヘッダの内容に従います。

ブラウザでの取り扱い

ブラウザがその Web サイトに初めて HTTPS 接続をしたときに、サーバから Strict-Transport-Security ヘッダを応答すると、ブラウザはその情報を記録します。これによって Strict Transport Security の機能が有効になり、 ブラウザが そのサイトへ HTTP 接続することはなくなり、自動的に HTTPS 接続を試みるようになります。

Strict-Transport-Security ヘッダで指定された有効期限が経過すると、自動的な HTTPS への変換は行われなくなり、通常通り HTTP で接続を試みるようになります。

なお、Strict-Transport-Security ヘッダがブラウザへ送られるたびに、その Web サイトに対する有効期限は更新されます。よってサイトはこの情報を再設定することで、有効期限が切れることを防ぐことができます。Strict-Transport-Security を無効にする必要がある場合は、HTTPS 通信時に max-age の値を 0 に設定することで Strict-Transport-Security ヘッダが失効し、ブラウザからの HTTP 接続が許されることになります。

Strict Transport Security のプリロード

Google では ドメインを HSTS Pre-loaded List に登録するサービス を行っています。記載された手順に従ってドメインを登録すれば、今後ブラウザとそのドメインとの間に安全でない通信は起こらなくなります。これに登録するには Strict-Transport-Security ヘッダに preload パラメータを含める必要があります。

仕様

仕様書 策定状況 備考
HTTP Strict Transport Security (HSTS) IETF RFC 初期段階の定義

ブラウザ実装状況

機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本サポート 4.0.211.0 4.0 (2.0) 11 (2015年6月) 12 7 on Maverics
機能 Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本サポート 18 4.0 (2.0) 未サポート ? 未サポート

関連情報

ドキュメントのタグと貢献者

 このページの貢献者: hashedhyphen, hamasaki, yassan, clariroid, zatsubun, yyss
 最終更新者: hashedhyphen,