はじめに
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 -M
Loaded Modules:
...
headers_module (shared)
...
headers_module
が有効になっていればOK.
なっていない場合は、/etc/httpd/conf.modules.d/00-base.conf
の下記に追記 or コメントを外す。
LoadModule headers_module modules/mod_headers.so
2. 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のプリロードリストに申請してみようかな〜。