N-LAB.

AWSのCLB(Classic Load Balancer)配下にHSTSとPreload設定を行う方法

投稿日:2023/04/11

目標

  • AWSのCLB(Classic Load Balancer)配下で運用しているWebサイトにHSTS(HTTP Strict Transport Security)とPreload設定を行う。


前提

  • AWSのCLB(Classic Load Balancer)を利用していること。
  • WebサイトがSSL化されていること。


目次

  1. HSTS(HTTP Strict Transport Security)とは
  2. HSTSの有効化
  3. HSTS Preloadとは


1. HSTS(HTTP Strict Transport Security)とは

  • HSTSとは、ユーザがWebサイトにHTTPでアクセスした際に、強制的にHTTPSで通信を行うためのセキュリティ機能のことです。


  • 従来の301/302リダイレクトでも、ユーザがHTTPでアクセスした際にHTTPSでアクセスするようにする点では同じですが、以下の問題が存在します。

1. HTTPで通信を行った後にHTTPSにリダイレクトされるため、HTTPからHTTPSにリダイレクトされる途中で第三者により通信の改ざんや攻撃を受ける可能性がある。
2. HTTPは通信の改ざんチェックを行わないため、HTTPSへリダイレクト途中で攻撃されてしまった場合に検知することができない。

  • HSTSでは上記の問題を解決するため、HTTP通信を行った際にサーバ側でHTTPSリダイレクトは行わず、ブラウザ内部でHTTPSリダイレクトを行ったのちに通信を始めます。最初からHTTPSで通信をすることになるため、中間攻撃をうけません。開発者ツール等で「Status Code」を表示した際に、「307 Internal Redirect」になります。従来の301/302リダイレクトでは上述の問題があるため、WebサイトのSSL化を行った際に併せてHSTSをサポートすることが望ましいです。


  • HSTSはWebサイトの初回アクセス時には機能せず、2回目以降のアクセスから機能するため、後述のHSTS Preloadも併せてサポートすることを推奨します。 初回アクセス時にHSTSが機能しないのは、Webサイトの初回アクセス後にブラウザがHSTS対応Webサイトとして記憶し、2回目以降からHSTSの機能が有効になるためです。


2. HSTSの有効化

  • HSTSを有効にするためには、ドキュメントルート直下のディレクトリに存在する「.htaccess」に以下を追記します。本手順書ではwebサーバーにはApacheを利用している想定としています。
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto}=http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

※RewriteCond %{HTTP:X-Forwarded-Proto}=httpを記述しないとリダイレクトのループが起こるため必ず記載してください。

  • HSTSが有効になっているかを確認するにはChromeの場合、以下の手順で確認が可能です。

1. 「chrome://net-internals/#hsts」にアクセスします。

2.「Query HSTS/PKP domain」の「Domain」にドメインを入力し、「Query」をクリックします。
check hsts
3.「Found」が表示されていればHSTSが有効になっています。

3. HSTS Preloadとは

  • ユーザがWebサイトにHTTPで初回アクセスした場合でもHSTSが有効になり、初回から必ずHTTPSでアクセスを行うための仕組みのことです。事前に自身の所持するWebサイトのドメインをHSTS preloadリストに登録する必要があります。


  • HSTS preloadリストとは主要ブラウザ(Chrome、Firefox、Safari、IE11、Edge、Opera)が参照するHSTS対応サイトリストのことです。HSTS preloadリストに登録されているWebサイトは、ブラウザが予めSSL/TLSを使用することが分かるようになるため、初回からHSTS機能が有効になります。


  • 自身の所持するWebサイトのドメインをHSTS preloadリストに登録する手順は以下になります。

1. HSTS preloadリスト登録サイトにアクセスします。
https://hstspreload.org/

2. 自身の所持するWebサイトのドメインを入力し、「Check HSTS preload status and eligibility」をクリックします。

3. 以下の二つのチェックボックスにチェックをいれ、「Submit {ドメイン名} to the HSTS preload」をクリックします。
「I am the site owner of {ドメイン名} or have their permission to preload HSTS.」
「I understand that preloading {ドメイン名} through this form will prevent all subdomains and nested subdomains from being accessed without a vaild HTTPS certificate.」
※1つ目のチェックボックスでは、サイトのオーナーであるか、またはHSTS Preloadを行う承認を得ているかの確認
※2つ目のチェックボックスでは、全てのサブドメインで有効なHTTP認証が存在しないとアクセスできなくなることを理解しているかの確認

4. 画面下に「Success」と表示されていれば正しく申請が完了しています。

5. 申請状況を確認するには、再度自身の所持するWebサイトのドメインを入力し、「Check HSTS preload status and eligibility」をクリックします。
※申請中の場合は、「Status: {ドメイン名} is pending submission to the preload list」と表示されます。
※登録完了の場合は、「Status: {ドメイン名} is currently preloaded」と表示されます。


以上で全ての手順は完了になります