Apache TomcatサーバーAにWebアプリケーションがあります。このWebアプリケーションは、別の場所で実行されているサーバーBに接続します。このサーバーBには、SSL証明書によるクライアント認証が必要です。
私が達成しようとしているのは、サーバーAでこのWebアプリケーションを作成し、SSLクライアント証明書を使用してサーバーBで認証することです。
したがって、TomcatサーバーAにいくつかの追加のJAVA_OPTSを提供しました。
-Djavax.net.ssl.trustStore=/location/keystore.jks
-Djavax.net.ssl.trustStorePassword=changeit
-Djavax.net.ssl.keyStore=/locaton/keystore.jks
-Djavax.net.ssl.keyStorePassword=changeit
-Djavax.net.debug=ssl
現在、このkeystore.jksには3つの証明書が含まれています。
- CA証明書
- サーバー証明書(PKCS12)これはサーバーAの証明書です
- クライアント証明書(PKCS12)これは、Webアプリで使用するクライアント証明書です。
tomcat / logs / catalina.outはこれを提供します:
Client write key:
0000: some hex
Server write key:
0000:some hex
... no IV used for this cipher
*** CertificateVerify
pool-1-thread-2, WRITE: TLSv1 Handshake, length = 134
pool-1-thread-2, WRITE: TLSv1 Change Cipher Spec, length = 1
Finished
verify_data: { data }
pool-1-thread-2, WRITE: TLSv1 Handshake, length = 32
pool-1-thread-2, READ: TLSv1 Alert, length = 2
pool-1-thread-2, RECV TLSv1 ALERT: fatal, unsupported_certificate
pool-1-thread-2, called closeSocket()
pool-1-thread-2, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: unsupported_certificate
pool-1-thread-2, called close()
このキーストアの正しさを証明するために、同じキーストアで同じサーバーBに接続し、クライアント証明書を正常にネゴシエートする小さなJavaアプリケーションを作成しました。
このクライアント証明書をX509タイプに変更しようとしましたが、それでもエラーが発生し、通信できません。
何か足りないものがあるのではないかと思いました。誰かがこの種のものの経験がありますか?
ありがとうございました