我已经在win2016上成功设置了带有Microsoft tomcat服务和AD(用于使用Spring)的kerberos身份验证用于用户登录的AD集成的tomcat(8.5.30 x64)。 我已经使用自定义Java密钥库(用于Windows服务)和自定义java信任库(用于kerberos和用户自定义)做到了这一点,并且一切正常,没有任何问题。
两种方法都使用明文形式的密钥库/信任库密码,密钥库在server.xml中指定了密码(https连接器条目),信任库在tomcat Windows服务中指定了密码(resgistry条目)。 没有用于加密该密码的方法。
因此,为了避免在文件系统上使用明确的密码,我使用Windows-MY存储(SunMSCAPI)代替了Java密钥库,而使用Windows-ROOT(SunMSCAPI)代替了Java信任库。 显然,我已经将在JKS密钥库上可以正常工作的相同必需证书导入Windows证书库,“个人”(Windows-MY)中的密钥库证书和“受信任的根CA”(Windows-ROOT)中的信任库证书。
很明显,我还授予Windows服务用户以递归方式访问(rx)所有本地文件系统certstore(C:\ ProgramData \ Microsoft \ Crypto ..)。
Tomcat正常使用Windows-MY“个人”存储和导入的证书正常启动,不会出现问题。 该问题发生在Spring登录模块上,但相同的代码可用于jks truststore,我认为它以及证书都是正确的。
以下是标准输出的摘录(我不知道如何附加日志文件):
javax.naming.CommunicationException: SASL bind failed: masterdc02:636
..
[Root exception is javax.net.ssl.SSLHandshakeException: Error signing certificate verify]
..
Caused by: javax.net.ssl.SSLHandshakeException: Error signing certificate verify
..
Caused by: java.security.SignatureException: Keyset does not exist`
..
感谢任何帮助 谢谢