gpt4 book ai didi

java - SSL - 只允许特定的客户端或服务器(Java 信任库)

转载 作者:搜寻专家 更新时间:2023-10-31 20:20:50 24 4
gpt4 key购买 nike

如果信任库应仅包含根 CA 证书(根据我所读的内容,这似乎是推荐的),您如何限制对特定方的访问(而不是信任库中由 CA 验证的任何一方)。

更多详情:

我有两个 Java 应用程序 - 我们称它们为 A 和 B - 使用 SSL 来保护通信。 A 和 B 都有客户端和服务器部分来发送(客户端)和接收(服务器)消息。客户端使用存储在 client.keystore 中的 key ,服务器使用 server.keystore 中的 key ,并且两者都使用单个信任库来验证另一个应用程序的身份(即应用程序 A 有 3 个 keystore ,应用程序 B 有 3 个 keystore ) .

到目前为止,我已经使用 key 工具为客户端和服务器生成 key ,对它们进行签名(使用我自己的测试 CA),并将签名的证书加载回 keystore 。我为应用程序 A 和 B 执行此操作。为了完成 SSL 握手,我发现信任库需要包含用于签署其他应用程序 key 的 CA 证书(因此应用程序 A 的信任库必须包含 CA 证书用于签署应用程序 B 的客户端和服务器 key ,反之亦然)。

到目前为止这是有道理的,但是因为信任库包含一个根 CA 证书,我可以生成另一组 key ,使用相同的 CA 对它们进行签名,并让它们被另一个应用程序接受——换句话说,应用程序 B 将接受一个看起来像应用程序 A 的流氓代理,只要它具有由根 CA 签名的 key 。

SSL 是否有防止这种情况发生的机制?我已尝试将应用程序 A 的客户端和服务器的公钥导入应用程序 B 的信任库(反之亦然),但如果没有根证书,SSL 握手将无法完成。

最佳答案

Does SSL have a mechanism to prevent this?

没有。 SSL 提供保密性、完整性和身份验证。同龄人是他们所说的人。你说的是授权:这个点是我想与之交谈的点吗?这是应用程序的责任。您可以通过 SSLSocket.getSession() 获取对等证书链,并在握手期间通过 HandshakeCompletedListener 检查它以授权对等方。如果您不喜欢他,请关闭 socket 。连接上不会发生任何其他事情。

关于java - SSL - 只允许特定的客户端或服务器(Java 信任库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19906440/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com