0
0

ALB配下のEC2 VirtualhostにてHSTSの設定をしてみた

Last updated at Posted at 2024-08-03

はじめに

HSTSはクライアントがリクエスト送信する時点でhttpsになるそうです。

apacheのバーチャルホストごとにHSTSの設定ができるか検証してみました

今回ドメインを例としてexample.comとしましたが各自のドメイン名に置き換えてください

以下の記事を参考にさせていただきました。

今回はRoute53にレコード「server1.example.com」と「server2.example.com」でそれぞれ
エイリアスにてALBを紐づけました。
ACMはリクエストを行い*.example.comで証明書を発行しました
ALBにてリスナー443ポートを追加してACM*.example.comで証明書を設定してターゲットグループにVirtualhostのEC2を紐づけました。

ALBにEC2を紐づけるためには事前にEC2のセキュリティグループの80ポートをALBのセキュリティグループを許可
する必要があります。許可し忘れるとEC2がターゲットグループにてunhealtyとなってしまいます。

以下のサイトを引用させていただきました。
EC2 Amazon Linux 2 のVirtualHost 設定手順
https://qiita.com/gama1234/items/02640dd9d9185360c4f0

HSTS (HTTP Strict Transport Security) の導入
https://qiita.com/takoratta/items/fb6b3486257eb7b9f12e

AWS ALB 配下で HSTS の設定を行う方法
https://qiita.com/syoimin/items/db85769349d2cb9bda24

前提条件

ACM ALB EC2を事前に作成する

対応手順

rootに昇格する

$ sudo su -

yum updateを実施する
今回はupdateするパッケージがありませんでした。

# yum update

今回はパッケージのアップデートはありませんでした。
Dependencies resolved.
Nothing to do.
Complete!

apacheのパッケージをインストールする

# yum install httpd

apacheのサービスを起動する

# systemctl start httpd

apacheのサービスの自動起動を有効にする

# systemctl enable httpd

自分の環境のドメイン名のディレクトリを作成する

例 mkdir -p /var/www/example.com/public_html

フォルダの権限を変更する

# chmod -R 755 /var/www

HTMLファイルを作成する

# echo "<html><body><h1>server1.examplecom Hello word</h1></body></html>" | sudo tee /var/www/server1.example.com/public_html/index.html


# echo "<html><body><h1>server2.examplecom Hello word</h1></body></html>" | sudo tee /var/www/server2.example.com/public_html/index.html

ディレクトリの所有ユーザー:所有グループを変更する

# chown -R apache:apache /var/www/example.com/public_html

example.comのapacheの設定ファイルを作成する

# vi /etc/httpd/conf.d/example.com.conf
<VirtualHost *:80>
    ServerAdmin root@localhost
    ServerName server1.example.com
    DocumentRoot /var/www/server1.example.com/public_html
    ErrorLog /var/log/httpd/example.com-error.log
    CustomLog /var/log/httpd/example.com-access.log combined
    Header set Strict-Transport-Security "max-age=31536000; preload" ※HSTSの設定をした
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin root@localhost
    ServerName server2.example.com
    DocumentRoot /var/www/server2.example.com/public_html
    ErrorLog /var/log/httpd/example.com-error.log
    CustomLog /var/log/httpd/example.com-access.log combined
</VirtualHost>

apacheの文法チェックをする。

# httpd -t
Syntax OK

apacheのサービス再起動をする

# systemctl restart httpd

コマンドプロンプトを開きcurlコマンドを実行した

HSTSはブラウザに対して動作するため、コマンドプロンプトのチェックは意味がありません。

image.png

HSTSの設定をブラウザで確認した

キャッシュが残ると正しく設定しているか確認出来ないため、chromeのシークレッドウィンドウで試すことをお勧めします。

①chromeを開き、https://server1.example.comでアクセスする
②chrome://net-internals/#hstsをURLの箇所に入力して以下の画面を開く、またはchormeのブラウザをリロードする
以下の赤枠「Query HSTS/PKP domain」に「server1.example.com」ドメインを入力してQueryボタンを押下した
Foundと表示されたパラメータが表示されたため、HSTSが設定されています。

image.png

次にHSTSを設定していないドメインを
①chromeを開き、https://server2.example.comでアクセスする
②chrome://net-internals/#hstsをURLの箇所に入力して以下の画面を開くまたはchormeのブラウザをリロードする
以下の赤枠「Query HSTS/PKP domain」に「server2.example.com」ドメインを入力してQueryボタンを押下した
Not Foundと表示されたため、HSTSが設定されていません。
image.png

chrome://net-internals/#hstsのHSTS状態確認の手順は以下のサイトを参考にしました。
https://chidakiyo.hatenablog.com/entry/chrome-hsts

一度ブラウザでHSTSが設定してあるサブドメインで、https://サブドメインでアクセスすると
ブラウザにHSTSの設定が保存されてしまうため、
再度試したい場合は以下の赤枠「Delete domain security policies」にドメインを入力して削除をしてください
削除後、上記の①~②手順を実施する。
image.png

まとめ

バーチャルホストのFQDNごとにHSTSを設定できることが分かりました。
/etc/httpd/httpd.confにHSTSの設定がされている場合は、/etc/httpd/conf.d/バーチャルホストファイル.conf
でHSTSが許可されていなくてもHSTSが設定されてしまいます。
注意が必要です。

同じドメインを持つサブドメインの場合は、HSTSのパラメータにincludeSubDomainsが含まれている場合は
server1.example.comにHSTSを許可したら、server2.example.comにHSTSが許可されていなくても許可されてしまうそうです。そのため、同じドメインのサブドメインごとにHSTSを設定有り無しを分ける場合は、includeSubDomainsのパラメータをHSTSに含めないでください

includeSubDomainsのパラメータについて以下のサイトがとても参考になりました。
引用させていただきました。
https://tech.quickguard.jp/posts/disable-subdomain-hsts/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0