【发布时间】:2015-03-17 10:44:43
【问题描述】:
编辑 1:https://security.stackexchange.com/questions/83972/trust-ca-and-parent-ca-but-not-other-derivative-cas。见评论。我的客户端/服务器在 java 中,因此可能的解决方案涉及实现我自己的 javax.net.ssl.TrustManager 实现。
客户端通过 SSL 安全套接字连接到服务器时遇到问题。我有 3 个 CA:
- 根 CA:用于签署其他 CA 证书。
- testers CA:由根 CA 签名,用于签署 beta-tester 客户端证书。
- 生产 CA:由根 CA 签名,用于签署生产客户端证书。
我想为以下服务器创建一个信任库:
- 允许测试人员 CA 的所有签名客户端证书。
- 允许根 CA 的所有签名客户端证书。
- 拒绝生产 CA 的所有签名客户端证书。
我的问题:如果我生成只包含测试者 CA 证书的信任库,那么由根 CA 签名的客户端证书将失败(我希望证书链允许它)。如果我生成包含测试 CA 和根 CA 的信任库,则还允许生产签名的证书。
有什么办法吗?
【问题讨论】:
-
我不认为这是特定于 Java 的。您可能会在security.stackexchange.com 获得更好的答案
-
你可以使用 2 种不同的 root cas 来签名测试和生产吗?
-
konstantin:我需要部署一个“主”客户端来管理测试和生产,但我想让服务器信任库只相信它的签名 CA,所以你的目的也会受到问题的影响。
-
Thomas:谢谢,你可能是对的......我会看看这里是否有任何回复,如果没有,则假设这不是 Java 特定的,并在 security.stackschange.com 中询问。跨度>
-
security.stackexchange.com/questions/83972/… 似乎 x509 证书链验证是这样工作的,并且只涉及受信任的密钥库。做到这一点的唯一方法是实现自定义证书链验证机制。由于可能的解决方案是自定义的,并且我的客户端/服务器在 java 中,因此该解决方案最终必须与 java 相关。如果我想出如何创建自定义链验证器,我会尝试发布自己的答案。