客户端身份验证Tomcat - trustAnchors参数必须为非空

时间:2017-01-11 12:50:40

标签: java tomcat ssl

我知道这个问题似乎没有堆栈溢出很多,例外情况是缺少信任库 - 但这是我的问题:

  1. 在Windows上使用Apache Tomcat v7.0.56作为服务器,使用Java 8.0.71
  2. 修改tomcat / conf / server.xml以包含SSL Connector,其中truststoreType =“PKCS12”,truststoreFile =“conf / regtomcat.truststore”truststorePass =“password”
  3. 我启动tomcat,我知道它正在正确读取此信任库文件,因为我最初没有pkcs12格式的文件,并且tomcat在启动时报告错误。我也试过打破文件位置只是为了看到tomcat启动失败,因为它找不到文件。所以tomcat启动没关系 - 它正在读取信任库,它必须意味着它存在并且可以被阅读。

    我将p12文件加载到浏览器证书中,然后转到我的应用程序URL。然后我得到了tomcat错误:

    handling exception: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: 
    the trustAnchors parameter must be non-empty
    

    鉴于我的信任存在,并且包含我的证书 - 问题是什么?

    我使用keytool生成了所有证书和信任库。信任库是使用命令

    创建的
    keytool -importcert -alias regClient -storetype PKCS12 -keystore regtomcat.truststore -file regClient.cer
    

3 个答案:

答案 0 :(得分:2)

好的 - 问题是证书是使用JDK 1.8创建的,并且tomcat是使用JRE 1.7运行的 - 无论出于何种原因导致问题,所以修复是使用JRE 1.8,现在一切正常。

答案 1 :(得分:0)

一个可能的原因可能是,如果我们使用相同的.jks文件作为密钥库和信任库,则服务器启动将失败,并出现以下错误:java.security.InvalidAlgorithmParameterException:trustAnchors参数必须为非空。 密钥库用于存储ServerCerts,信任库用于存储CA证书。在.jks中添加至少一个CA证书后,上述问题将得到解决。

答案 2 :(得分:0)

面对同样的问题。我的密钥库只有网站的私钥对。从密钥对一直到根都导入了公共证书,并且有效。