公開用のWordPressサーバを構築する!(Ubuntu 20.04/TLS暗号強度を強化する!)

Apache + OpenSSLによるTLS通信の暗号設定を強化します。

TLSの設定内容を決定する!

最初にTLSの設定内容を決定します。最初に、IPAで定義された高セキュリティ型のTLSを行うことにします。

  • TLSのバージョンは、TLS1.2とTLS1.3のみとする。
  • 暗号スイート順序サーバ優先設定を行う。
  • IPAで定義された高セキュリティ型の暗号化方式のみを接続可能とする。

TLSの暗号化強度の設定を変更する!

TLSの設定内容を変更します。以下のSSLEngine on以下を追加します。

$ sudo vi /etc/apache2/sites-available/default-ssl.conf
...
SSLEngine on
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-CCM:ECDHE-ECDSA-AES256-CCM8:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-CCM:ECDHE-ECDSA-AES128-CCM8:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-CCM:DHE-RSA-AES256-CCM8:DHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-CCM:DHE-RSA-AES128-CCM8
SSLCipherSuite TLSv1.3 TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256:TLS_AES_128_CCM_8_SHA256
SSLProtocol TLSv1.2 +TLSv1.3
SSLHonorCipherOrder On
...

この設定は、IPAの以下の資料をもとに決定しました。

HSTSを有効化する!

セキュリティを高めるために「HSTS(HTTP Strict Transport Security)」を有効化します。本設定により、ブラウザにHTTPSで通信するように指示します。

$ sudo vi /etc/apache2/sites-available/default-ssl.conf
...
<VirtualHost _default_:443>
...
Header set Strict-Transport-Security: "max-age=31536000; includeSubDomains; preload"
...
</VirtualHost>

mod_headersを有効化して、Apacheを再起動します。

$ sudo a2enmod headers
Enabling module headers.
To activate the new configuration, you need to run:
  systemctl restart apache2
$ sudo systemctl restart apache2

設定を見直す!

ここで、以下設定を見直します。

  • 当サイトの証明書はRSAなので、証明書に楕円暗号を使用している暗号化方式を除く。
  • 鍵交換でDHEを使用しているブラウザは少ないので、DHEは「DHE-RSA-AES256-GCM-SHA384」のみにする。
  • 古いブラウザやスマホ用に「ECDHE-RSA-AES256-SHA384」を設定する。

結果、以下の設定となりました。

SSLEngine on
SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384
SSLCipherSuite TLSv1.3 TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256:TLS_AES_128_CCM_8_SHA256
SSLProtocol TLSv1.2 +TLSv1.3
SSLHonorCipherOrder On 
Header set Strict-Transport-Security: "max-age=31536000; includeSubDomains; preload"

設定結果をテストする!(SSL Labs)

以下のサイトにアクセスします。

以下のとおり、テストするサイトのURLの入力とチェックを行い、「Submit」ボタンを押すと、サイトの暗号化通信の強度や脆弱性のチェックが開始されます。

  • Hostname:脆弱性を確認したいサイトをURLで指定します。
  • Do not show the results on the boards:確認結果を公開したくない場合はチェックを入れます!

確認結果(概要)

当サイトは、ランク「A+」を獲得することができました!弱めの暗号「ECDHE-RSA-AES256-SHA384」が残っていますが、「SSL Labs」での評価は低くはなりませんでした。当サイトは基本は情報提供型なので、厳しすぎる設定にしなくてもよいという結論に落ち着きました。

さらに暗号化強度を高めるためには・・・

さらに暗号化強度を高めるには、証明書をRSAから楕円暗号に変える必要があり、今回は断念しました。

おわりに

暗号化の設定内容を決めるのは難しいですが、IPAのガイドが参考になります。設定を終えたら、脆弱性のチェックを行いましょう。

関連記事