HTTP Strict Transport Security(しばしば HSTS と略されます)は、HTTP の代わりに HTTPS を用いて通信を行うよう、Web サイトからブラウザにに伝達するためのセキュリティ機能です。
利点
例えばユーザが https://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) で定義されていません。
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 パラメータを含める必要があります。
- Chrome が実装している HSTS プリロードリストに関する情報と問い合わせ : https://www.chromium.org/hsts
- Firefox が実装している HSTS プリロードリストに関する問い合わせ : nsSTSPreloadList.inc
仕様
仕様書 | 策定状況 | 備考 |
---|---|---|
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) | 未サポート | ? | 未サポート |
関連情報
- ブログ記事: HTTP Strict Transport Security has landed!
- ブログ記事: HTTP Strict Transport Security (force HTTPS)
- OWASP の記事: HTTP Strict Transport Security
- Wikipedia: HTTP Strict Transport Security