我想了解验证链的工作方式。在我的信任库中我真正需要哪些证书?
我有一个链 根CA - >中间体1 - >中间体2 - >服务器证书。 我的信任库中只有中间2证书。在我的一台测试机器上,这可以正常工作,但在我的另一台机器上它没有(与其他具有类似配置的服务器联系)。我得到了这个流行的SunCertPathBuilderException:无法找到所请求的目标异常的有效证书路径。服务器发送完整的链。 我想解决方案是将整个链接到根CA到我的信任库。
我想知道它为什么在一台机器上运行而不在另一台机器上运行。是否有可能影响链验证的工作原理?服务器是否需要完整的链验证?
如果自动包含jdk的默认信任库,我无法弄清楚。这两台机器的jdk版本略有不同1.7.0_21(不工作)和1.7.0_25(工作)。这有关系吗?
还有一件事:这个SunCertPathBuilderException - 是否有可能找出他不喜欢的链的哪个部分?
我很满意任何提示。 谢谢,Heike
答案 0 :(得分:1)
您应该只需要中间证书。它更可能是其他机器配置的问题。您可以将-Djavax.net.debug=ssl
添加到JVM选项以显示调试信息。
(更多信息http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html#Debug)
答案 1 :(得分:1)
您只需要证书链中任何签名者的证书。通常是最顶层的。
我会好好看一下从-Djavax.net.debug=ssl,handshake
和本地信任库文件可见的链本身,以确保链中至少有一个证书具有相同的签名,日期,subjectDN, issuerDN等在调试日志中。