【问题标题】:Tomcat as a client. Web application on Tomcat does not use SSL client certificateTomcat 作为客户端。 Tomcat 上的 Web 应用程序不使用 SSL 客户端证书
【发布时间】:2012-09-06 07:45:25
【问题描述】:

我在 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 包含三个证书:

  • 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()

为了证明这个密钥库的正确性,我编写了一个小型 Java 应用程序,它使用相同的密钥库连接到同一台服务器 B,并成功协商客户端证书。

我已尝试将此客户端证书更改为 X509 类型,但即使这样我也遇到错误并且无法通信。

我想也许我错过了什么?有人有这种东西的经验吗?

谢谢

【问题讨论】:

    标签: tomcat web-applications ssl authentication


    【解决方案1】:

    这似乎是因为客户端证书未启用“客户端身份验证”使用。您可以通过打开证书并检查“详细信息”选项卡下的“增强密钥使用”字段来进行验证。它应该在字段中有“客户端身份验证”。

    【讨论】:

      猜你喜欢
      • 2012-07-19
      • 1970-01-01
      • 1970-01-01
      • 2010-12-05
      • 2014-08-29
      • 2015-07-27
      • 2010-11-13
      • 1970-01-01
      • 2019-04-06
      相关资源
      最近更新 更多