Hypertext Strict Transport Security(HSTS)は、WebブラウザにTLSの使用を強制するポリシーメカニズムです。
WebブラウザがHSTS指定されているWebサイトにアクセスすると、Webサーバーは次回からhttpsアクセスするようにWebブラウザに通知します。
こうして、HSTSはすべての通信がクライアント側のセキュアなトランスポート層を介して行われることを保証することにより、TLSのより効果的な実装を可能にします。
HSTSは、特に中間者(MiTM)攻撃防止に有効とされています。
HSTSは2012年にRFC 6797で規定されています。
Strict-Transport-Security ヘッダーを構成するフラグは「max-age」「includeSubDomains」「preload」です。
ブラウザがHSTSポリシーをキャッシュして適用する時間を秒単位で指定します。
このフラグが指定された場合は、ブラウザが現在のドメイン以下のすべてのサブドメインにもこのポリシーを適用する必要があることを示します。
HSTS Preloadリストに含まれることを希望する場合、このフラグを指定します。
HSTS Preloadリストとは各ブラウザが持つリストです。このリストに登録されたドメインにhttpでアクセスしようとした場合、ブラウザは自動的にhttpsに切り替えてアクセスします。
HSTS Preloadリストはすでに主要ブラウザ(Chrome、Firefox、Safari、Internet Explorer、Microsoft Edge、Opera)で採用されています。
HSTSが指定されていてもHSTS Preloadリストに未登録のサイト場合は、初回のアクセスに限りhttp接続になることがあります。
HSTS Preloadリストへの登録を急ぐ場合は、Strict-Transport-Security preloadを指定した上でHSTS Preload List Submissionで申請することができます。
もし設定に間違いがあった場合も「max-age」の間は取り消すことができないので、最初は「max-age」を数分以内にし、設定に間違いがないことが分かってから、HSTS Preload List Submissionが規定している、10886400秒(18週)以上を設定します。
「preload」も設定に間違いがないことが確認できてから指定します。
IIS サーバーでの設定方法は複数ありますがその一つは「インターネットインフォメーション サービス (IIS) マネージャー」を使う方法です。
web.config ファイルに、たとえば以下のような記述を追加する方法もあります。
また、以下は、IIS 7.0 以降で http アクセスを https にリダイレクトし、HSTSを有効にする web.config の例です。
/etc/nginx/nginx.conf 等の設定ファイルを開き、対象のServer Blockに、たとえば以下を追記して、Nginxの再起動を行います。
/etc/httpd/conf.d/ssl.conf 等の設定ファイルを開き、対象のVirtualHostディレクティブに、たとえば以下を追記して、Apacheの再起動を行います。