【发布时间】:2013-10-27 12:36:15
【问题描述】:
我的 Dev OPs 团队希望在我们的 Java 密钥库中使用中间 CA 证书。我相信在密钥库中添加中间证书与添加“常规证书”的过程相同,对吗?有什么我需要注意的“陷阱”吗?另外,我如何在测试中验证 Java 使用的是中间证书,而不是通过 CA 进行检查?
【问题讨论】:
我的 Dev OPs 团队希望在我们的 Java 密钥库中使用中间 CA 证书。我相信在密钥库中添加中间证书与添加“常规证书”的过程相同,对吗?有什么我需要注意的“陷阱”吗?另外,我如何在测试中验证 Java 使用的是中间证书,而不是通过 CA 进行检查?
【问题讨论】:
按顺序回答您的问题:
我相信将中间证书添加到密钥库与添加“常规证书”的过程相同,对吗?
是的。例如,请参阅this VMWare documentation on installing intermediate CA's。
我需要注意什么“陷阱”吗?
只有每个中间 CA 需要它自己的别名。
另外,我如何在测试中验证 Java 使用的是中间证书,而不是使用 CA 进行检查?
如果你只是想验证它不检查根CA,那么就不要安装它,你就知道它不能使用。
更新:针对@Bruno 的评论,公平地指出,这个答案只解决了问题中提出的问题。我在这里假设围绕信任和证书分发的问题,首先是拥有中间 CA 的正常原因,已经得到处理,这是理想的解决方案。有关这些问题的更多信息,您应该查看Bruno's answer。
【讨论】:
您需要根据证书链进行推理。中间 CA 证书的目标是让远程方在最终实体证书(例如服务器或客户端证书本身)和另一个 CA 证书之间建立一个链。
如果您正在讨论将此中间 CA 证书导入将用作信任库的密钥库,那么该 CA 证书是中间证书还是“根”CA 证书并不重要:它将成为使用该信任库的应用程序的另一个受信任锚点。
如果您说的是用作密钥库的密钥库,则需要确保您的 EEC 将与正确的链一起显示。
例如,假设 CA_1 为 CA_2 颁发证书,CA_2 为服务器 S 颁发证书。 您的客户在其受信任的锚点中有证书 CA_1(但不一定是 CA_2):您需要提供一个链“S,CA_2”,以便他们可以通过 CA_2 验证该链(否则,他们将不知道如何链接CA_1 到 S)。
为此,您需要确保 S 及其私钥的条目包含它需要发送的链(S,CA_2),而不仅仅是证书 S。在密钥库中的单独条目中导入 CA_2 不会使JSSE 在出示证书 S 时为您构建链。
this answer 中描述了如何执行此操作(尽管这是从客户端证书的角度来看的)。
【讨论】: