1

我想了解验证链的工作方式。我的信任库中真正需要哪些证书?

我有一个带有根 CA -> 中间 1 -> 中间 2 -> 服务器证书的链。我的信任库中只有中间 2 证书。在我的一台测试机器上,这一切正常,但在我的另一台机器上却不行(联系具有类似配置的不同服务器)。我得到了这个流行的 SunCertPathBuilderException:无法找到请求的目标异常的有效证书路径。服务器发送完整的链。我想解决方案是将整个链放到根 CA 到我的信任库。

我想知道为什么它可以在一台机器上运行,而在另一台机器上不行。是否有可能对链验证的工作方式产生影响?服务器可以要求全链验证吗?

我不知道是否自动包含来自 jdk 的默认信任库。两台机器的 jdk 版本 1.7.0_21(不工作)和 1.7.0_25(工作)略有不同。有关系吗?

还有一件事:这个 SunCertPathBuilderException - 是否有可能找出他不喜欢链的哪一部分?

我很高兴任何提示。谢谢,海克

4

2 回答 2

1

您应该只需要中间证书。更有可能是另一台机器的配置有问题。你可以加-Djavax.net.debug=ssl到 JVM 选项以显示调试信息。

(更多在这里http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html#Debug

于 2013-08-13T09:47:21.653 回答
1

您只需要证书链中任何签名者的证书。通常是最上面的一个。

我会仔细查看在-Djavax.net.debug=ssl,handshake本地信任库文件中可见的链本身,以确保链中至少有一个证书具有与调试日志中相同的签名、日期、subjectDN、issuerDN 等。

于 2013-08-13T10:31:10.363 回答