概要
サイトのセキュリティを高めるため、HSTSプリロードを設定したときのメモとなります。
環境
- OS: Ubuntu 20.04
- Apache 2.4系
- Let's Encryptで取得した証明書を利用
前提条件
- インターネット上に公開されたサイトであること。(非ローカル環境)
- 公開するWebサイトドメイン全てに適切な証明書が設定されていること。
- Webサーバの設定で、httpアクセス全てをhttpsに変換する設定になっていること。
- 必要なモジュール(header、SSL等)がインストールされていること。
ここでは、hoge.example.com というサイトに対してHSTSプリロードを設定します。
注意点
- サブドメイン全てに対して適用されます。(hoge.example.comの場合はwww.example.comはもちろん、example.comも対象となることを注意してください)
- https化されていないサイトに対してもhttps接続を強制します。つまり、他にhttps化されていないシステムに対してもです。
- プリロードリストに登録された場合、解除はとても難しくなります。相応の運用が試されることに注意してください。
さっくりとした手順
- HSTSを有効にします。
- httpdサービスを再起動します。
- HSTSサイトにドメインを登録します。
実施手順
apacheのバーチャルサイトファイルを修正します。
- 修正後のファイル
※ドメインやDocumentRoot等は書き換えてください。また、サブドメインごとに複数のサイトがある場合、その全てを修正します。
<VirtualHost _default_:80>
servername hoge.example.com
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>
<VirtualHost _default_:443>
servername hoge.example.com
ErrorLog /var/log/apache/error.log
CustomLog /var/log/apache/access.log combined
DocumentRoot /var/www/html/hoge
<Directory /var/www/html/hoge>
Options -MultiViews
AllowOverride All
Require all granted
</Directory>
SSLEngine on
Protocols h2 http/1.1
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
SSLCertificateFile /etc/certs/hoge.example.com.crt
SSLCertificateKeyFile /etc/private/hoge.example.com.key
</VirtualHost>
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder off
SSLSessionTickets off
- 主な差分
- Header always set Strict-Transport-Security "max-age=63072000"
+ Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
-SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
+SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
- HSTSのプリロードを有効化しています。
- ついでに弱いSSL(TLSv1.2)を無効化します。
apacheサービスを再起動します。
sudo apache2ctl configtest
# Syntax OKを確認します
sudo systemctl restart apache2.service
systemctl satus apache2.service
# active(running)を確認します。
HSTSプリロードサイトへの登録
- https://hstspreload.org/ にアクセスします。
- 上記で設定したドメイン名を入力して登録を進めていきます。(サブドメインは含みません)
- エラーがなければ
Status: laplacemine.com is pending submission to the preload list.
と表示されます。 - 2~3週間ほど待って正式に登録されるのを待ちます。
設定確認
- https://www.ssllabs.com/ssltest にアクセスします。
- HSTSを設定したサイトのドメイン名を入力して診断します。
- Strict Transport Security (HSTS) が「YEえs」となっていれば成功です。
コメントを残す