サーバーのSSL/TLS設定をテストするssltest.shでの結果に対処する apache編

ALL
スポンサーリンク

SSL/TLSのサーバー設定や脆弱性のテスト等を行う、bashスクリプト版のツール testssl.sh でのテストで検出されたセキュリティ問題への対処方法です。
今回は、WEBサーバーの設定(apache)についてです。

testssl.sh については、次の記事を参照してください。
TLS/SSL暗号をサポートするサービスをチェックする testssl.sh | パソコン鳥のブログ

スポンサーリンク

テスト方法

次のように実行すると、https/ポート443番に対してテストします。
xxxxxxの箇所は、サーバー名またはURLを指定します。
この時、サーバー証明書の内容と、サーバー名またはURLで指定したサーバー名が異なると、証明書のテストで「certificate does not match supplied URI」となって問題が検出されますので、注意してください。

./testssl.sh xxxxxx

実行すると、次のようにチェック結果が表示されます。
下記では表示結果の一部分だけを示していますが、実際はこの後に続けていろいろ表示されます。
ここで検出された問題の対処方法を以降で説明します。

検出された問題の対処方法

以降ではセキュリティ重大度が CRITICAL(ターミナル上で桜色で表示される項目)、HIGH(赤)、MEDIUM(暗い黄色)への対処方法を説明します。

以降のssl.conf はCentOS/RockyLinux では /etc/httpd/conf.d/ssl.conf になります。
httpd.conf は /etc/httpd/conf/httpd.conf になります。
また設定を変更後、service httpd reload を実行して反映してください。

なお、SSLProtocol 、SSLCipherSuite を次のようにすると多くの問題が修正されます。
先に下記を設定してから testssl.sh を実行してください。

SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite !SHA1:!SHA256:!SHA384:!SSLv3:!DSS:AESGCM+ECDHE:AESGCM+EDH

注意点

複数のバーチャルホストでSSL設定を行っている場合

複数のバーチャルホストでsslの設定を行っている場合は、以降のssl.conf への設定はそれら全てで行わないと、問題が解決しません。
下記を実行して表示されたファイルで設定する必要があります。

cd /etc/httpd/conf.d/
grep "SSLEngine" *.conf

参考:ApacheでSSLv3の無効化に出来ない場合にやること

Let’s Encrypt 導入時の注意

Let’s Encrypt で証明書を導入している場合は、ssl.conf への記述は、
Include /etc/letsencrypt/options-ssl-apache.conf
の行より後におこなってください。

これは、Inlucdeしている options-ssl-apache.conf 内に SSLProtocol や SSLHonorCipherOrder、SSLCipherSuite の記述があり、Includeより前にこれらの項目を記述しても上書きされてしまうためです。

Testing protocols via sockets

testssl.sh の実行結果で、「Testing protocols via sockets」の箇所で検出された問題への対処方法です。

SSLv3、TLS 1、TLS 1.1

ssl.conf で SSLProtocol を以下にします。

SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

Testing cipher categories

testssl.sh の実行結果で、「Testing cipher categories」の箇所で検出された問題への対処方法です。

LOW: 64 Bit + DES, RC[2,4] (w/o export)

ssl.conf で SSLProtocol 、SSLCipherSuite を以下にします。

SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite !SHA1:!SHA256:!SHA384:!SSLv3:!DSS:AESGCM+ECDHE:AESGCM+EDH

Triple DES Ciphers / IDEA

ssl.conf で SSLProtocol 、SSLCipherSuite を以下にします。

SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite !SHA1:!SHA256:!SHA384:!SSLv3:!DSS:AESGCM+ECDHE:AESGCM+EDH

Obsolete CBC ciphers (AES, ARIA etc.)

ssl.conf で SSLProtocol 、SSLCipherSuite を以下にします。

SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite !SHA1:!SHA256:!SHA384:!SSLv3:!DSS:AESGCM+ECDHE:AESGCM+EDH

Testing server preferences

testssl.sh の実行結果で、「Testing server preferences」の箇所で検出された問題への対処方法です。

Has server cipher order?

ssl.conf で SSLHonorCipherOrder を以下にします。

SSLHonorCipherOrder on

Negotiated cipher

ssl.conf で SSLHonorCipherOrder を以下にします。

SSLHonorCipherOrder on

Testing HTTP header response @ “/”

testssl.sh の実行結果で、「Testing HTTP header response @ “/”」の箇所で検出された問題への対処方法です。

Strict Transport Security

httpd.conf で以下を記述します。

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Server banner

httpd.conf で以下を記述します。

ServerTokens ProductOnly
ServerSignature off

Application banner

/etc/php.ini で次を設定します。

expose_php = Off

設定を変更後、service httpd reload を実行してください。

Testing vulnerabilities

testssl.sh の実行結果で、「Testing vulnerabilities」の箇所で検出された問題への対処方法です。

POODLE, SSL (CVE-2014-3566)

ssl.conf で SSLProtocol を以下にします。

SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

SWEET32 (CVE-2016-2183, CVE-2016-6329)

ssl.conf で SSLProtocol 、SSLCipherSuite を以下にします。

SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite !SHA1:!SHA256:!SHA384:!SSLv3:!DSS:AESGCM+ECDHE:AESGCM+EDH

BEAST (CVE-2011-3389)

ssl.conf で SSLProtocol を以下にします。

SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

LUCKY13 (CVE-2013-0169), experimental

ssl.conf で SSLProtocol 、SSLCipherSuite を以下にします。

SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite !SHA1:!SHA256:!SHA384:!SSLv3:!DSS:AESGCM+ECDHE:AESGCM+EDH

RC4 (CVE-2013-2566, CVE-2015-2808)

ssl.conf で SSLProtocol 、SSLCipherSuite を以下にします。

SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite !SHA1:!SHA256:!SHA384:!SSLv3:!DSS:AESGCM+ECDHE:AESGCM+EDH

参考

CentOS8で「TLS暗号設定ガイドライン」に準拠したSSLの暗号設定を行う – Qiita
Server Cipher Order enforcement | cPanel Forums
ApacheでSSLv3の無効化に出来ない場合にやること
TLS 暗号設定ガイドライン~安全なウェブサイトのために(暗号設定対策編)~
攻撃を受ける前に見直すApacheの基本的なセキュリティ10のポイント – レムシステム エンジニアブログ
openssl – How to disable CBC-mode ciphers – Information Security Stack Exchange

コメント