IBM HTTP Server環境で有効なSSL 暗号仕様(CipherSpec)とプロトコル・バージョンを確認方法

# 概要
使用しているIHS環境で現在有効な暗号リストとプロトコル・バージョンをコマンドで確認する方法を記載します。

# はじめに
IHSのSSL暗号仕様（CipherSpec）は、以下サイトで確認可能ですが、使用しているIHSのバージョンによってデフォルトの有効な暗号のリストと有効なTLSプロトコル・バージョンが変わります。

また、IHSの構成ファイル(httpd.conf)内のSSL構成により暗号仕様やTLSプロトコル・バージョンを変更できるため、それらの確認も必要で煩雑になる場合があります。

SSL 暗号仕様：
https://www.ibm.com/docs/ja/was/9.0.5?topic=SSEQTP_9.0.5/com.ibm.websphere.ihs.doc/ihs/rihs_ciphspec.htm

以下に、使用しているIHSにおいて有効な暗号リストとプロトコル設定を確認できるコマンドについて記載します。

# 確認コマンド
以下コマンドで、有効な暗号リストとプロトコル・バージョンを確認可能です。

```
Windows環境：
<IHS_ROOT>/bin/httpd -t -D DUMP_SSL_CONFIG -f <IHS_ROOT>/conf/httpd.conf

Unix環境：
<IHS_ROOT>/bin/apachectl -t -D DUMP_SSL_CONFIG -f <IHS_ROOT>/conf/httpd.conf
```

# 検証
**1. デフォルト設定における有効な暗号リストとプロトコル設定を確認します**

IHSバージョンにより有効なプロトコル・バージョンが変更になっています。
```
IHSv9.0.5.2以降、TLSv13はデフォルトで有効に変更されています。
IHSv9.0.5.9以降、TLSv10/TLSv11はデフォルトで無効に変更されています。
```
**<結果>**
有効なプロトコル・バージョンを確認することができ、また、有効な暗号仕様についても確認可能であることが分かります。

- IHSv9.0.5.1におけるデフォルト設定での有効な暗号リストとプロトコル・バージョン
```
<IHS_ROOT>/bin>apache -v
Server version: IBM_HTTP_Server/9.0.5.1 
Server built:   Aug 12 2019 17:34:04

<IHS_ROOT>/bin>httpd -t -D DUMP_SSL_CONFIG -f <IHS_ROOT>/conf/httpd.conf
SSL configuration:
SSL server defined at: <IHS_ROOT>/conf/httpd.conf:816
Server name: **********
SSL enabled: YES
FIPS enabled: 0
Keyfile: <Plugin_ROOT>/config/webserver1/plugin-key.kdb
Protocols enabled: TLSv10,TLSv11,TLSv12
Ciphers for SSLV2: (protocol disabled)
Ciphers for SSLV3: (protocol disabled)
Ciphers for TLSv10: (defaults) TLS_RSA_WITH_AES_256_CBC_SHA(35b),TLS_RSA_WITH_AES_128_CBC_SHA(2F)
Ciphers for TLSv11: (defaults) TLS_RSA_WITH_AES_256_CBC_SHA(35b),TLS_RSA_WITH_AES_128_CBC_SHA(2F)
Ciphers for TLSv12: (defaults) TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384(C02C),TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256(C02B),TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384(C024),TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256(C023),TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA(C00A),TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA(C009),TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384(C030),TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256(C02F),TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384(C028),TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256(C027),TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA(C014),TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA(C013),TLS_RSA_WITH_AES_256_GCM_SHA384(9D),TLS_RSA_WITH_AES_128_GCM_SHA256(9C),TLS_RSA_WITH_AES_256_CBC_SHA256(3D),TLS_RSA_WITH_AES_128_CBC_SHA256(3C),TLS_RSA_WITH_AES_256_CBC_SHA(35b),TLS_RSA_WITH_AES_128_CBC_SHA(2F)
```

- IHSv9.0.5.11におけるデフォルト設定での有効な暗号仕様とプロトコル・バージョン
```
<IHS_ROOT>/bin>apache -v
Server version: IBM_HTTP_Server/9.0.5.11 
Server built:   Feb  7 2022 12:08:58

<IHS_ROOT>/bin>httpd -t -D DUMP_SSL_CONFIG -f <IHS_ROOT>/conf/httpd.conf
SSL configuration:
SSL server defined at: <IHS_ROOT>/conf/httpd.conf:816
Server name: **********
SSL enabled: YES
FIPS enabled: 0
Keyfile: <Plugin_ROOT>/config/webserver1/plugin-key.kdb
Protocols enabled: TLSv12,TLSv13
Ciphers for SSLV2: (protocol disabled)
Ciphers for SSLV3: (protocol disabled)
Ciphers for TLSv10: (protocol disabled)
Ciphers for TLSv11: (protocol disabled)
Ciphers for TLSv12: (defaults) TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384(C02C),TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256(C02B),TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384(C024),TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256(C023),TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA(C00A),TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA(C009),TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384(C030),TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256(C02F),TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384(C028),TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256(C027),TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA(C014),TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA(C013),TLS_RSA_WITH_AES_256_GCM_SHA384(9D),TLS_RSA_WITH_AES_128_GCM_SHA256(9C),TLS_RSA_WITH_AES_256_CBC_SHA256(3D),TLS_RSA_WITH_AES_128_CBC_SHA256(3C),TLS_RSA_WITH_AES_256_CBC_SHA(35b),TLS_RSA_WITH_AES_128_CBC_SHA(2F)
Ciphers for TLSv13: (defaults) TLS_AES_128_GCM_SHA256(1301),TLS_AES_256_GCM_SHA384(1302),TLS_CHACHA20_POLY1305_SHA256(1303)
```
<br>

**2. httpd.conf内のSSL設定で暗号仕様とプロトコル・バージョンを変更した場合の結果を確認する**

以下のようなSSL設定をhttpd.confに構成した状態でコマンドを実行する。
- TLSv13を無効にする(SSLProtocolDisable TLSv13)
- 暗号仕様を変更する(SSLCipherSpec ALL NONE/SSLCipherSpec ALL +9C +C02C +1304 +1305)

**<結果>**
httpd.confに定義した構成が正しく反映された有効な暗号仕様とプロトコル・バージョンを確認することができた。

```
LoadModule ibm_ssl_module modules/mod_ibm_ssl.so
  Listen [::]:443
  <VirtualHost *:443>
    SSLEnable
    ServerName **********
    SSLProtocolDisable TLSv13
    SSLCipherSpec ALL NONE 
    SSLCipherSpec ALL +9C +C02C +1304 +1305
  </VirtualHost>
SSLDisable	  
KeyFile "<Plugin_ROOT>/config/webserver1/plugin-key.kdb"
```

- IHSv9.0.5.11における上記のSSL構成で有効な暗号仕様とプロトコル・バージョン
```
<IHS_ROOT>/bin>apache -v
Server version: IBM_HTTP_Server/9.0.5.11 
Server built:   Feb  7 2022 12:08:58

<IHS_ROOT>/bin>httpd -t -D DUMP_SSL_CONFIG -f <IHS_ROOT>/conf/httpd.conf
SSL configuration:
SSL server defined at: <IHS_ROOT>/conf/httpd.conf:810
Server name: **********
SSL enabled: YES
FIPS enabled: 0
Keyfile: <Plugin_ROOT>/config/webserver1/plugin-key.kdb
Protocols enabled: TLSv12
Ciphers for SSLV2: (protocol disabled)
Ciphers for SSLV3: (protocol disabled)
Ciphers for TLSv10: (protocol disabled)
Ciphers for TLSv11: (protocol disabled)
Ciphers for TLSv12: TLS_RSA_WITH_AES_128_GCM_SHA256(9C),TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384(C02C)
Ciphers for TLSv13: (protocol disabled)
```

# まとめ
使用しているIHSのバージョンや構成ファイル(httpd.conf)を確認することなく、有効な暗号仕様とプロトコル・バージョンを確認するためのコマンドについてまとめました。

# 参考情報
SSLCipherSpec
https://www.ibm.com/docs/ja/ibm-http-server/9.0.5?topic=communications-ssl-directives#rihs_ssldirs__SSLCipherSpec

SSLProtocolEnable
https://www.ibm.com/docs/ja/ibm-http-server/9.0.5?topic=communications-ssl-directives#rihs_ssldirs__SSLProtocolEnable
SSLProtocolDisable
https://www.ibm.com/docs/ja/ibm-http-server/9.0.5?topic=communications-ssl-directives#rihs_ssldirs__SSLProtocolDisable