tomcat9如何使用客户端证书?

How to use client certificate with tomcat 9?

我最近将受客户端证书保护的应用程序从 tomcat 7 迁移到 tomcat 9。tomcat 应该根据自位于信任库中的签名证书。

工作 tomcat 7 配置使用了以下连接器(取自 server.xml):

<Connector 
  port="8443" 
  ...
  clientAuth="true" 
  truststoreFile="/usr/share/tomcat/truststore.jks" 
  truststorePass="..." 
/>

我在tomcat9中已经根据官方文档将此迁移到以下配置:

<Connector port="8443" ...>
  <SSLHostConfig protocols="TLSv1.2" certificateVerification="required"
                 truststoreFile="/usr/share/tomcat9/truststore.jks"
                 truststorePassword="..."
                 truststoreType="PKCS12">  
  </SSLHostConfig>
  ...
</Connector>

启动tomcat9时,出现如下错误:

java.lang.IllegalArgumentException: the trustAnchors parameter must be non-empty

用谷歌搜索这个错误会产生一堆结果,这通常似乎指向一个空的/不可访问的信任库。我的信任库不为空,并且位于也用于密钥库的同一目录中,可以毫无问题地使用它。因为同一个信任库与 tomcat 7 一起工作,所以我 运行 不知道如何在这个问题上取得进展。 有人有什么想法吗?谢谢。

以防万一,信任库如下所示:

> keytool -list -keystore truststore.jks                                                                                                                                                                                              

Keystore type: PKCS12
Keystore provider: SUN

Your keystore contains 1 entry

mycert, Sep 15, 2021, PrivateKeyEntry,
Certificate fingerprint (SHA-256): ...

感谢 dave_thompson_085 and Piotr P. Karwasz 的分析和评论,我可以通过将 truststoreAlgorithm="SunPKIX" 添加到连接器配置来解决问题。

正如他们指出的那样,这个 answer 可能是一个替代解决方案,但涉及修改信任库。