はじめに
HSTSについてセキュリティの勉強も兼ねて設定をしてみる。
前提知識
HSTSとは?
簡潔に言うと、HTTPSでの接続をブラウザ側で強制する仕組み。
以下を参照すると理解が早まる。
Strict-Transport-Security
https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Strict-Transport-SecurityHTTP Strict Transport Security(HSTS)とは?
https://zenn.dev/ak/articles/dfaa9e01b374a0HSTSプリロードリストについて調べてみた
https://zenn.dev/harusame0616/articles/b285a061e0c1f9
準備
例によって、Dockerを使う。
以前、他の記事でも使ったDockerのリポジトリにコミットしていく。
https://github.com/katsuobushiFPGA/apache-tomcat-docker
手順
1. mod_headersモジュールを有効化する
httpd -MLoaded Modules:
...
headers_module (shared)
...headers_module が有効になっていればOK.
なっていない場合は、/etc/httpd/conf.modules.d/00-base.conf の下記に追記 or コメントを外す。
LoadModule headers_module modules/mod_headers.so2. ssl.confにHSTSヘッダーの設定を行う
<VirtualHost _default_:443>
...
+Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
# General setup for the virtual host, inherited from global configuration
#DocumentRoot "/var/www/html"
#ServerName www.example.com:443
...
設定の内容としては、
| 設定名 | 項目値 |
|---|---|
| max-age | 63072000 |
| includeSubDomains | - |
Header always set について 指定したヘッダーを無条件で設定し、同じヘッダーが既に存在する場合は上書きされるようにしている。
Header addでもできるが、addの場合は既に同じヘッダーが存在する場合は、複数ヘッダーを設定することになるようなので、より適切な方を選定した。max-age=63072000について HTTPSでのアクセスを2年間(63072000秒)有効にする。ブラウザは指定された期間中、指定されたドメインに対してHTTPではなくHTTPSでのみアクセスするようになる。
includeSubDomainsについて
この設定はサブドメインにも適用される。つまり、example.comだけでなく、subdomain.example.comなどのサブドメインに対してもHTTPSアクセスが強制されるようになる。
3. Apacheをリロードする
構文チェックを行う。
httpd -t設定のリロード
systemctl reload tomcat※ 今回は Dockerなのでコンテナをビルドし直した。
4. HTTPSのURLにアクセスして確認をする
https://localhost/sample にアクセスをする。

Headerが付与されていればOK
5. ChromeのHSTSの設定を確認する
ブラウザバーに下記を入力して遷移する。
chrome://net-internals/#hsts
Query HSTS/PKP domain
Input a domain name to query the current HSTS/PKP set:
とある部分に、localhostを入力し、Queryを選択する。

上記のようにずらっと並んでいればOK
※ちなみに、HTTPSアクセス時にサーバ証明書がブラウザによって信頼されていないとそのサーバのHSTSの設定を保持してくれない。
6. httpのURLにアクセスした際にhttpsのリダイレクトされることを確認する
http://localhost/sampleにアクセスし、307リダイレクトされることを確認する。
ここまで確認できればOK
余談
調べた中で、Apacheのセキュリティに関係することがあったのでメモしておく。
Security Tipsについて
Apacheの公式ページにSecurity Tipsというページがあり、Apacheで気をつけるべきセキュリティの問題が記載されている。
SSL Configuration Generator
ミドルウェアのSSL設定ジェネレータがMozillaから提供してくれている。
これを使うと最適なSSL設定が生成できそうだ。
- SSL Configuration Generator
https://ssl-config.mozilla.org/
参考
Apache - Configuring HTTP Strict Transport Security
https://www.xolphin.com/support/Apache_FAQ/Apache_-_Configuring_HTTP_Strict_Transport_SecurityHow to enable HSTS for Enhanced Web Security in Apache
https://tecadmin.net/enable-hsts-in-apache/Apache モジュール mod_headers
https://httpd.apache.org/docs/2.4/ja/mod/mod_headers.htmlHSTS – HTTP Strict Transport Securityの使い方
https://kinsta.com/jp/knowledgebase/hsts-strict-transport-security/
おわりに
HSTSについて設定の方法やその仕組みについて調べた。
ここでは、設定の方法にしか記載していないが、参考にさせて頂いたサイトにてHSTSの仕組みを知れてセキュリティについての理解が深まったと思う。
今度は、自サイトをHSTSのプリロードリストに申請してみようかな〜。