TrustStore无法初始化,但KeyStore成功

时间:2017-12-15 22:22:14

标签: java tomcat ssl

我正在尝试配置Tomcat,以便我的Web应用程序可以使用LDAPS。它在UAT服务器上工作正常,但由于某种原因,生产服务器无法初始化信任存储。 我打开了调试(通过forall (T : forall x : A, B x -> Type), T (fst (Sigma _ _ x y)) (snd (Sigma _ _ x y)) -> T x y ),错误是:

  

默认上下文init失败:java.io.IOException:Keystore被篡改,或密码错误

我100%确定密码是正确的,因为我运行了keytool并列出了信任库的内容,并从工作的UAT服务器获取了相同的文件。

作为一个实验,我将Tomcat配置为对密钥库和信任库使用相同的存储文件(我意识到这不是典型的设置,但根据我的理解,文件格式等是相同的,所以它们都应该加载):< / p>

C:\Program Files\Microsoft Service Fabric

并且密钥库有效:

  

keyStore是:C:\ Program Files \ Apache Software Foundation \ Tomcat 7.0 \ bin.keystore
  keyStore类型是:jks
  keyStore提供者是:
  init keystore
类型为SunX509的init keymanager   ***
找到关键词:tomcat

虽然信任库失败..但相同的文件和密码!

  

trustStore是:C:\ Program Files \ Apache Software Foundation \ Tomcat 7.0 \ bin.keystore
  trustStore类型是:jks
  trustStore提供者是:
  init truststore
  默认上下文init失败:java.io.IOException:密钥库被篡改,或密码不正确

从Web应用程序中,堆栈跟踪有一些更详细的信息(是否有帮助我不确定..我研究了TrustManagerFactoryImpl的java源代码并将其与日志记录相匹配,但它没有解释行为)

-Djavax.net.debug=all

我完全失去了 - 任何帮助/想法都会非常感激!

3 个答案:

答案 0 :(得分:2)

感谢大家的帮助,我终于发现,由于某些未知原因,有人确实在Catalina.properties中设置了信任库密码(通过javax.net.ssl.trustStorePassword)。看起来这甚至超过了Tomcat UI中设置的java变量的优先级:(

答案 1 :(得分:0)

出于完整性考虑,如果不存在配置相同的密钥库文件(此处为错误的 file:/// 前缀),也会发生这种情况。它仍然导致:

trustStore is: No File Available, using empty keystore.
trustStore type is : jks
trustStore provider is : 
init truststore
keyStore is : file:///c:/my.jks
keyStore type is : jks
keyStore provider is : 

与OpenJDK 1.8.0.181相比,keyStore is :行仅会误导输出javax.net.ssl.keyStore [1],而首先检查给定的trustStore是否存在[2]。

[1] sun.security.ssl.SSLContextImpl
[2] sun.security.ssl.TrustManagerFactoryImpl

答案 2 :(得分:-1)

您不需要提供信任库密码。所以,不要。

NB keytool -list根本不需要密码,并且不能证明您知道正确的密码。另一方面,您获得的错误 证明密码不正确。

您不应对密钥库和信任库使用相同的文件。