1.前提・実現したいこと
クライアントから指定される暗号スイートが、以下パターンのいずれかの場合においても、Tomcat と通信を行えるようにしたいです。
0. TLS_RSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 の両方
0. TLS_RSA_WITH_AES_128_CBC_SHA256 のみ
0. TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 のみ
現状、1.および3.は通信できていますが、2.の通信ができていません。
※以下、TLS_RSA_WITH_AES_128_CBC_SHA256 を RSA 、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 を ECD と記載します。
クライアントはサードパーティのJavaプロセスで動作しており、上記のいずれかで ClientHello が行われます。
それに対し、Tomcat はいずれの場合においても ServerHello で返答できるようにしたいです。
なお、クライアント、Tomcatサービス共にローカルホストにて起動しており、ローカルホスト上でやり取りをしています。
server.xml の設定やその他で、設定不備や認識不足・誤りなどがあればご教授いただけますと幸いです。
2.発生している問題・エラーメッセージ
現在、Tomcat の server.xml では RSA と ECD の暗号スイートを許容するよう設定していますが、ClientHelloで RSA のみ指定された場合は HandShakeError となります。
⇒複数の暗号スイートを許容した場合、RSA による通信ができません。
また、1-1)においても通信はできますが、ServerHelloでは ECD の暗号スイートが指定されました。
⇒ Tomcat の server.xml で RSA を優先度高としているので、RSA で返すことを期待していました。
「3.該当のソースコード」参照。
3.該当のソースコード
Tomcat の server.xml の抜粋を添付します。
"ciphers"にて許容している暗号スイートを RSA と ECD と指定しています。
"honorCipherOrder"にて暗号スイートの優先度を設定しています。
("ciphers"の左から優先度高 [ RSA > ECD ])
また、キーストアファイル"truststore.jks"と"keystore.jks"には RSA と ECD による証明書が含まれています。
<SSLHostConfig certificateVerification="required" sslProtocol="TLS" protocols="TLSv1.2" ciphers="TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256" honorCipherOrder="true" truststoreFile="....\Cert\Server\truststore.jks" truststorePassword="XXX"> <Certificate certificateKeystoreFile="....\Cert\Server\keystore.jks" certificateKeystorePassword="XXX" type="RSA" /> </SSLHostConfig>
4.試したこと
- Tomcat側の設定において、RSA のみを許容する設定とすると、1-2)の通信は行えましたが、1-1)が失敗するようになりました。その際、キーストアファイルも RSA のみで作り直しています。server.xml の設定は以下になります。
<SSLHostConfig certificateVerification="required" sslProtocol="TLS" protocols="TLSv1.2" ciphers="TLS_RSA_WITH_AES_128_CBC_SHA256" honorCipherOrder="true" truststoreFile="....\Cert\Server_tmp\truststore_RSA.jks" truststorePassword="XXX"> <Certificate certificateKeystoreFile="....\Cert\Server_tmp\keystore_vtn_vtn_RSA.jks" certificateKeystorePassword="XXX" type="RSA" /> </SSLHostConfig>
- Tomcat側の設定において、ECD のみを許容した場合、1-1)および1-3)の通信が行えます。その際、キーストアファイルも ECD のみで作り直しています。
server.xml の設定は以下になります。
<SSLHostConfig certificateVerification="required" sslProtocol="TLS" protocols="TLSv1.2" ciphers="TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256" honorCipherOrder="true" truststoreFile="....\Cert\Server\truststore_ECD.jks" truststorePassword="XXX"> <Certificate certificateKeystoreFile="....\Cert\Server\keystore_vtn_vtn_ECD.jks" certificateKeystorePassword="XXX" /> </SSLHostConfig>
表にまとめると以下になります。
No.4~No.7が試したことです。
No.2を解決したいのですが、暗号スイートが複数指定であった場合、Tomcat が RSA の暗号スイートを選択してくれていないように見えます。
No. | Tomcat設定 | ClientHello | ServerHello | 通信結果 | 備考 |
---|---|---|---|---|---|
1 | RSA、ECD | RSA、ECD | ECD | ◯ | 1-1.のパターン |
2 | RSA、ECD | RSA | - | × | 1-2.のパターン |
3 | RSA、ECD | ECD | ECD | ◯ | 1-3.のパターン |
4 | RSA | RSA、ECD | - | × | 試したこと |
5 | RSA | RSA | RSA | ◯ | 試したこと |
6 | ECD | RSA、ECD | ECD | ◯ | 試したこと |
7 | ECD | ECD | ECD | ◯ | 試したこと |
5.補足情報(FW/ツールのバージョンなど)
以下に各ツールのバージョンを記載します。
- Apatch Tomcat 8.5
- java version "1.8.0_271" 32bit (Tomcatサービス起動時のJava)
また、端末OSはWindows 10 Proです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/10 08:26