在配置了客户端身份验证的 TLS 握手中,有一个步骤是服务器接收客户端的证书并选择是否信任它(例如,在 Java 中,它是通过 TrustManager 完成的)。
我想知道来自服务器的最终“信任失败”消息是在服务器确保客户端真正拥有该公钥之前还是之后发送的(例如,通过首先从握手中接收一些用客户端的私有密钥编码的消息钥匙)。
我的问题的目的是查看第三方是否有可能通过假装是该客户端并使用他的公钥来检查服务器是否信任客户端。
注意:在具有特定安全要求的上下文中使用 TLS 时,风险是真实存在的。例如,假设一个 P2P 应用程序在对等点之间使用 TLS,并使用 TrustManager 作为从其联系人列表中对对等点进行身份验证的一种方式。此联系人列表应该是私人的。ISP 可以列出节点与之通信的 IP,然后通过与它开始 TLS 握手来获取他的公共证书,然后他可以尝试连接 IP 列表中的每个其他节点。最后,ISP 可以获得很大一部分本应是私有的联系人列表。