今回はCentOS9の環境で、Apacheで特定の暗号化スイートの除外設定した内容を紹介します。
暗号化スイートとは
暗号スイート(Cipher Suite)は、暗号通信システムにおいて使用される暗号アルゴリズムやハッシュ関数、鍵長などの設定の組み合わせです。これは、データの安全性を確保するために使用される様々な暗号化ツールやアルゴリズムのセットとして機能します。
暗号スイートは主に以下の4つの要素で構成されています。
- 鍵交換アルゴリズム(Kx)
- 認証アルゴリズム(Au)
- 暗号化アルゴリズム(Enc)
- メッセージ認証符号(Mac)
例えば、SSL/TLSプロトコルでは、通信を開始する前にクライアントとサーバーが使用する暗号スイートについて交渉し、合意します。これにより、通信内容の暗号化、鍵の共有、メッセージの完全性確認、デジタル証明書による認証などが適切に行われます。
暗号スイートは、インターネットバンキング、オンラインショッピング、メッセージアプリなど、機密性の高い情報をやり取りする様々な場面で使用されており、データを第三者から保護する重要な役割を果たしています。
環境
OS | CentOS Stream release 9 |
Apache | 2.4.62 |
OpenSSL | 3.0.7 |
特定の暗号化スイート除外方法
Apacheの設定ファイル:/etc/httpd/conf.d/ssl.confのSSLCipherSuiteを指定することで、利用できる暗号化スイートを制御することができます。
特定の暗号化スイートを除外する場合は、既存の暗号化スイートに追加で「:-(暗号化スイート名)」を記載します。
SSLCipherSuite (既存の設定)
↓
SSLCipherSuite (既存の設定):-(除外したい暗号化スイート名)
では、実際に環境で検証してみます。
検証環境のデフォルト設定では、以下の暗号化スイートが利用できるようです。
今回はこの設定から、赤色部分の「TLS_DHE_RSA_WITH_AES_128_CBC_SHA」を除外してみます。
[root@test conf.d]# nmap -sV --script ssl-enum-ciphers -p 443 (サーバのIPアドレス)
Starting Nmap 7.92 ( https://nmap.org ) at 2024-12-15 11:08 JST
Nmap scan report for (サーバのIPアドレス)
Host is up (0.00013s latency).
PORT STATE SERVICE VERSION
443/tcp open ssl/http Apache httpd 2.4.62 ((CentOS Stream) OpenSSL/3.0.7)
|_http-server-header: Apache/2.4.62 (CentOS Stream) OpenSSL/3.0.7
| ssl-enum-ciphers:
| TLSv1.2:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - A
| TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CCM (rsa 2048) - A
| TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CCM (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 2048) - A
| TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (dh 2048) - A
| TLS_DHE_RSA_WITH_AES_256_CCM (dh 2048) - A
| TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 2048) - A
| TLS_DHE_RSA_WITH_AES_128_CCM (dh 2048) - A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (dh 2048) - A
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (dh 2048) - A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
| compressors:
| NULL
| cipher preference: server
| TLSv1.3:
| ciphers:
| TLS_AKE_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A
| TLS_AKE_WITH_CHACHA20_POLY1305_SHA256 (ecdh_x25519) - A
| TLS_AKE_WITH_AES_128_GCM_SHA256 (ecdh_x25519) - A
| TLS_AKE_WITH_AES_128_CCM_SHA256 (ecdh_x25519) - A
| cipher preference: server
|_ least strength: A
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 13.03 seconds
[root@test conf.d]#
設定ファイルの修正を実施します。
「TLS_DHE_RSA_WITH_AES_128_CBC_SHA」のOpenSSLでの表記は「DHE-RSA-AES128-SHA」となるため、そちらの名前を追記します。
[root@test ~]# vi /etc/httpd/conf.d/ssl.conf
・・・
# SSL Cipher Suite:
# List the ciphers that the client is permitted to negotiate.
# See the mod_ssl documentation for a complete list.
# The OpenSSL system profile is configured by default. See
# update-crypto-policies(8) for more details.
#SSLCipherSuite PROFILE=SYSTEM #コメントアウト
SSLCipherSuite PROFILE=SYSTEM:-DHE-RSA-AES128-SHA #行追加(赤マーカー部分を追記)
・・・
設定の反映のために、以下のコマンドを実行します。
systemctl reload httpd
または
systemctl restart httpd
正常に除外されたかを確認します。
再度nmapコマンドを実行します。以下の通り、「TLS_DHE_RSA_WITH_AES_128_CBC_SHA」が除外されました。
[root@test ~]# nmap -sV --script ssl-enum-ciphers -p 443 (サーバのIPアドレス)
Starting Nmap 7.92 ( https://nmap.org ) at 2024-12-15 11:21 JST
Nmap scan report for (サーバのIPアドレス)
Host is up (0.00011s latency).
PORT STATE SERVICE VERSION
443/tcp open ssl/http Apache httpd 2.4.62 ((CentOS Stream) OpenSSL/3.0.7)
| ssl-enum-ciphers:
| TLSv1.2:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - A
| TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CCM (rsa 2048) - A
| TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CCM (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 2048) - A
| TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (dh 2048) - A
| TLS_DHE_RSA_WITH_AES_256_CCM (dh 2048) - A
| TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 2048) - A
| TLS_DHE_RSA_WITH_AES_128_CCM (dh 2048) - A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (dh 2048) - A
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (dh 2048) - A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
| compressors:
| NULL
| cipher preference: server
| TLSv1.3:
| ciphers:
| TLS_AKE_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A
| TLS_AKE_WITH_CHACHA20_POLY1305_SHA256 (ecdh_x25519) - A
| TLS_AKE_WITH_AES_128_GCM_SHA256 (ecdh_x25519) - A
| TLS_AKE_WITH_AES_128_CCM_SHA256 (ecdh_x25519) - A
| cipher preference: server
|_ least strength: A
|_http-server-header: Apache/2.4.62 (CentOS Stream) OpenSSL/3.0.7
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.71 seconds
[root@test ~]#
まとめ
今回は、CentOS9のApacheの設定で特定の暗号化スイートを除外してみた内容を紹介しました。
ご参考になれば、幸いです。
以上になります。ありがとうございました。
参考
https://qiita.com/kimisyo/items/68fd334fc6f1ba8a8f94
https://qiita.com/miyuki_samitani/items/f3c1572f426176bce3dd
https://www.cryptrec.go.jp/report/cryptrec-gl-3001-3.0.1.pdf
https://www.anet.co.jp/security/engineer_blog/nmapweb.html
コメント