HTTP Strict Transport Security (よく HSTS と略されます) は、Web サイトがブラウザに対して、HTTP の代わりに HTTPS を用いて通信を行うように伝達することができるセキュリティ機能です。
利点
例えばユーザが 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]
expireTime
- ブラウザがそのサイトに対して HTTPS のみで接続することを記憶する時間です。この時間は、秒単位です。
includeSubDomains
Optional- この省略可能なパラメータが指定されている場合は、Strict Transport Security のルールをすべてのサブドメインにも同様に適用します。
preload
Optional- 詳しくは Preloading 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 のプリロード
Google では ドメインを HSTS Pre-loaded List に登録するサービス を行っています。記載された手順に従ってドメインを登録すれば、今後ブラウザとそのドメインとの間に安全でない通信は起こらなくなります。これに登録するには Strict-Transport-Security ヘッダに preload パラメータを含める必要があります。
- Chrome の HSTS プリロードリストの情報と相談 : https://www.chromium.org/hsts
- Firefox の HSTS プリロードリストの相談 : nsSTSPreloadList.inc
ブラウザ実装状況
機能 | 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) | 未サポート | ? | 未サポート |
仕様書
関連情報
- Blog post: HTTP Strict Transport Security has landed!
- Blog post: HTTP Strict Transport Security (force HTTPS)
- OWASP Article: HTTP Strict Transport Security
- Wikipedia: HTTP Strict Transport Security