客户端通过身份验证时的安全性和 TLS 握手

标签 security p2p ssl handshake

在配置了客户端身份验证的 TLS 握手中,有一个步骤,服务器接收客户端的证书并选择是否信任它(例如,在 Java 中,它是通过 TrustManager 完成的)。

我想知道来自服务器的最终“信任失败”消息是在服务器确保客户端确实拥有该公钥之前还是之后发送的(例如,通过首先从握手中接收一些编码为客户端的私钥)。

我的问题的目的是看看第三方是否可以通过伪装成这个客户端并使用他的公钥来检查服务器是否信任客户端。

注意:当在具有特定安全要求的上下文中使用 TLS 时,风险是真实存在的。例如,假设一个 P2P 应用程序在对等点之间使用 TLS,并使用 TrustManager 作为从他的联系人列表中验证对等点的方法。此联系人列表应该是私有(private)的。 ISP 可以列出与节点通信的 IP,然后通过与它启动 TLS 握手来获取他的公共(public)证书,然后他可以尝试连接 IP 列表中的每个其他节点。最终,ISP 可以获得本应保密的联系人列表的很大一部分。

最佳答案

OpenSSL 也会在收到客户端证书消息后立即验证客户端证书。

但正如 Eugene 所说,如果服务器发送有意义的警报,那么您是立即发送 bad_certificate 还是仅在验证 Certificate Verify 消息中的签名后才发送都没有关系。这只会阻止某人在他们另外发送格式错误的签名(例如使用错误的 key )时发现证书是否可信。但是,如果服务器是以这种方式实现的,那么您所要做的就是使用您刚刚生成的私钥签署您的证书验证消息。然后签名将有效,然后服务器将尽职地验证您发送的证书,显示与以前相同的信息。

要缓解这种情况,您实际上必须使用一个定制的服务器,它根本不发送相应的警报,而是发送一些不那么暴露的东西。

关于客户端通过身份验证时的安全性和 TLS 握手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6888858/

相关文章:

python - 重写实时 TCP/IP(第 4 层)(即套接字层)流

cuda - 运行多 GPU CUDA 示例时 P2P 内存访问失败 (simpleP2P)

windows - 在 Laravel 5 中发送电子邮件不起作用

python - 使用 python 在 docker 中唯一出现本地颁发者证书错误

database - 可用性数据

ssl - WSO2 api 管理器不向 WSO2 DAS(数据分析服务器)发送数据

javascript - 向 ASP.NET MVC JsonResult 添加无法解析的内容

java - x-power-by 在响应 header 中显示

ios - 以编程方式锁定 iOS 设备上的文件

java - 有没有人用过并置?它有多好?