我在Apache Tomcat服务器A上有一个Web应用程序。这个webapp连接到运行在其他地方的服务器B.此服务器B需要使用SSL证书进行客户端身份验
我想要实现的是,使服务器A上的此Web应用程序使用SSL客户端证书在服务器B上进行身份验证。
因此我为Tomcat Server 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包含三个证书:
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()
为了证明这个密钥库的正确性,我编写了一个小的java应用程序,它使用相同的密钥库连接到同一个服务器B,并成功协商客户端证书。
我尝试将此客户端证书更改为X509类型,但即使这样,我也会收到错误,但无法进行通信。
我想也许有些东西我不见了?有人有这种东西的经验吗?
谢谢
答案 0 :(得分:1)
这看起来是因为客户端证书未启用“客户端身份验证”用法。您可以通过打开证书并在“详细信息”选项卡下选中“增强型密钥用法”字段进行验证。它应该在该字段中具有“客户端身份验证”。