ApacheでHSTS(HTTP Strict-Transport-Security)を使う

はじめに

HSTSについてセキュリティの勉強も兼ねて設定をしてみる。

前提知識

HSTSとは?

簡潔に言うと、HTTPSでの接続をブラウザ側で強制する仕組み。
以下を参照すると理解が早まる。

準備

例によって、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-age63072000
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-01

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を選択する。

chrome-hsts-01

上記のようにずらっと並んでいれば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設定が生成できそうだ。

参考

おわりに

HSTSについて設定の方法やその仕組みについて調べた。
ここでは、設定の方法にしか記載していないが、参考にさせて頂いたサイトにてHSTSの仕組みを知れてセキュリティについての理解が深まったと思う。
今度は、自サイトをHSTSのプリロードリストに申請してみようかな〜。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。