我正在尝试配置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
我完全失去了 - 任何帮助/想法都会非常感激!
答案 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
根本不需要密码,并且不能证明您知道正确的密码。另一方面,您获得的错误 证明密码不正确。
您不应对密钥库和信任库使用相同的文件。