2

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タイプに変更しようとしましたが、それでもエラーが発生し、通信できません。

何か足りないものがあるのではないかと思いました。誰かがこの種のものの経験がありますか?

ありがとうございました

4

1 に答える 1

2

これは、クライアント証明書が「クライアント認証」の使用に対して有効になっていないためと思われます。証明書を開き、[詳細]タブの[拡張キーの使用法]フィールドを確認することで確認できます。フィールドに「クライアント認証」が含まれている必要があります。

于 2013-01-28T16:22:13.787 に答える