【发布时间】:2013-11-23 06:14:12
【问题描述】:
如果信任库应该只包含根 CA 证书(这似乎是我所阅读的建议),您如何限制对特定方的访问(而不是信任库中由 CA 验证的任何一方)。
更多详情:
我有两个 java 应用程序——我们称它们为 A 和 B——它们使用 SSL 来保护通信。 A 和 B 都有一个客户端和服务器部分来发送(客户端)和接收(服务器)消息。客户端使用存储在 client.keystore 中的密钥,服务器使用存储在 server.keystore 中的密钥,并且两者都使用单个信任库来验证另一个应用程序的身份(即应用程序 A 有 3 个密钥库,应用程序 B 有 3 个密钥库) .
到目前为止,我已经使用 keytools 为客户端和服务器生成密钥,对它们进行签名(使用我自己的测试 CA),并将签名证书加载回密钥库。我为应用程序 A 和 B 执行此操作。为了完成 SSL 握手,我发现信任库需要包含用于签署其他应用程序密钥的 CA 证书(因此应用程序 A 的信任库必须包含 CA 证书用于签署应用 B 的客户端和服务器密钥,反之亦然)。
到目前为止,这是有道理的,但是因为信任存储包含根 CA 证书,我可以生成另一组密钥,使用相同的 CA 对它们进行签名,并让它们被其他应用程序接受 - 换句话说,应用程序 B 将接受一个看起来像应用 A 的恶意代理,只要它具有由根 CA 签名的密钥。
SSL 是否有防止这种情况发生的机制?我尝试将应用 A 的客户端和服务器的公钥导入应用 B 的信任库(反之亦然),但如果没有根证书,SSL 握手将无法完成。
【问题讨论】: