はじめに
SSLProtocolとSSLCipherSuiteを指定することで、Apacheサーバーが受け付けるTLSプロトコルバージョンと暗号化の方法を制限できます。
本記事では、Apache httpd(mod_ssl環境)のTLS暗号化の設定方法を紹介します。
注意事項
本記事では、ソースコードからのインストールなど、一般的によくあるユースケースを前提に解説します。
Apache側でTLSバージョンや暗号スイートの許容設定を行っても、OS設定によって拒否になる場合があります。設定する前に一度OS設定を確認しましょう。
RHEL9設定関連
また、各レポジトリーのApacheパッケージに改造が入ってる可能性があり、Apacheのデフォルト設定や設定方法が異なる可能性があります。
SSLProtocolの設定方法
SSLProtocol記述の後ろに、+プロトコル名を付けることで指定したプロトコルを許容でき、 -プロトコル名でプロトコルの通信を拒否できます。
プロトコルを複数指定する場合スペースで区切ります。
指定できるプロトコル名
SSLv3、TLSv1、TLSv1.1、TLSv1.2、TLSv1.3
上記以外、allという特殊記述があり、OpenSSL 1.0.1以降 +SSLv3 +TLSv1 +TLSv1.1 +TLSv1.2の略になります。
ゼロベースから設定したい場合、設定の先頭に-allを付けておきましょう。
TLSv1.2とv1.3を許容する記述例
<VirtualHost *:443> ... SSLProtocol -all +TLSv1.2 +TLSv1.3 </VirtualHost>
SSLProtocolのデフォルト設定
SSLProtocolのデフォルト設定はApacheとOpenSSLのバージョンによります。
Apache <= 2.4.16かつOpenSSL < 1.0.1 : +SSLv3 +TLSv1 Apache <= 2.4.16かつOpenSSL >= 1.0.1 : +SSLv3 +TLSv1 +TLSv1.1 +TLSv1.2 Apache > 2.4.16かつOpenSSL >= 1.0.1 : +TLSv1 +TLSv1.1 +TLSv1.2
SSLCipherSuiteの設定方法
SSLCipherSuite記述の後ろに、許可したい暗号スイートを:で区切って指定できます。
暗号スイートを複数指定する場合、先に指定された暗号スイートが優先されます。
TLS_AES_128_GCM_SHA256、TLS_AES_256_GCM_SHA384とECDHE-ECDSA-AES128-GCM-SHA256を利用可能にする記述例
<VirtualHost *:443> ... SSLCipherSuite TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES128-GCM-SHA256 </VirtualHost>
個別の暗号スイートだけでなく、特徴ベースのタグで暗号スイートを一括指定できます。
暗号スイートの前に記号をつけることで優先順位を変更できます。
+:暗号スイートをこの位置に移動する -:暗号スイートを許可しない(再許可可能) !:暗号スイートを許可しない(再許可不可)
MD5を使う暗号スイート以外すべて許可、低い安全性の暗号スイートの優先度を一番低くする例
SSLCipherSuite ALL:!MD5:+LOW
SSLCipherSuiteのデフォルト設定
SSLCipherSuiteのデフォルト設定はOpenSSLのデフォルト暗号スイートセットを使用しています。
セットの内容はOpenSSLバージョン依存で、以下のように確認できます。
# openssl ciphers -v 'DEFAULT' TLS_AES_256_GCM_SHA384 TLSv1.3 Kx=any Au=any Enc=AESGCM(256) Mac=AEAD TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any Au=any Enc=CHACHA20/POLY1305(256) Mac=AEAD TLS_AES_128_GCM_SHA256 TLSv1.3 Kx=any Au=any Enc=AESGCM(128) Mac=AEAD TLS_AES_128_CCM_SHA256 TLSv1.3 Kx=any Au=any Enc=AESCCM(128) Mac=AEAD ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD ...
Apacheパッケージ提供元の改修によって、SSLCipherSuiteのデフォルト値が別で設定される場合があるため、設定に気を付けましょう。
設定が効いてるかの確認方法
nmapを使って、サーバーが受け付けるTLSバージョンと暗号スイートを確認できます。
https://nmap.org/nsedoc/scripts/ssl-enum-ciphers.html
[root@ip-10-0-101-157 bin]# nmap --script ssl-enum-ciphers {IPアドレス}
Starting Nmap 7.93 ( https://nmap.org ) at 2025-05-02 09:43 UTC
Nmap scan report for ●●●.net (●●●)
Host is up (0.0013s latency).
Not shown: 998 filtered tcp ports (no-response)
PORT STATE SERVICE
80/tcp open http
443/tcp open https
| ssl-enum-ciphers:
| TLSv1.0:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (ecdh_x25519) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
| compressors:
| NULL
| cipher preference: server
| warnings:
| 64-bit block cipher 3DES vulnerable to SWEET32 attack
| TLSv1.1:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (ecdh_x25519) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
| compressors:
| NULL
| cipher preference: server
| warnings:
| 64-bit block cipher 3DES vulnerable to SWEET32 attack
| TLSv1.2:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (ecdh_x25519) - A
| TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
| compressors:
| NULL
| cipher preference: server
| warnings:
| 64-bit block cipher 3DES vulnerable to SWEET32 attack
| TLSv1.3:
| ciphers:
| TLS_AKE_WITH_AES_128_GCM_SHA256 (ecdh_x25519) - A
| TLS_AKE_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A
| TLS_AKE_WITH_CHACHA20_POLY1305_SHA256 (ecdh_x25519) - A
| cipher preference: client
|_ least strength: C
Nmap done: 1 IP address (1 host up) scanned in 6.47 seconds
参考資料
推奨される暗号スイート
設定方法の情報参考元