"man in the middle" 攻击 https 可以读取所有通信吗?

Can a "man in the middle" attack on an https READ all the communication?

如果攻击者在握手之前进行了 MIM 攻击并且正在完成,请获取两个 public 证书并充当侦听器。

不要试图充当一方,只需阅读所有通信即可获得有用的信息,例如 JWT 令牌和有关用户在该网站上所做的其他信息。

鉴于攻击者能够在连接安全之前拦截证书,它可以在握手完成后打开所有数据包,我错了吗?

这可能吗?

是和否,这取决于游戏中的一些其他元素...

在没有SSL证书的情况下,答案是肯定的!

怎么办?

让我们考虑一下经典案例,其中 2 个对等点是 Alice 和 Bob,他们试图通过 HTTPS 进行通信。

MITM 只能从 Alice 和 Bob 那里得到 public 密钥。不是私钥。即使在原来的情况下,Alice 也只能使用 Bob 的 public 密钥将信息加密给 Bob,Bob 也只能使用 Alice 的 public 密钥将信息加密给 Alice。

"smart" MITM 会做的是替换通道中为每一对传送的 public 密钥。换句话说:Alice 发送 Bob 应该收到的密钥。 MITM 将拦截此密钥而不将其传递给 Bob,而是 he/she 将替换为自己的密钥(我们称之为黑客密钥),然后将此黑客密钥传递给 Bob。

Bob 应该发送给 Alice 的密钥在另一个方向上会发生同样的事情。

嗯...现在 Alice 和 Bob 都收到了一个黑客密钥,他们认为密钥是来自另一个对等方的原始密钥(因为没有证书),但原始密钥由黑客保留。 你有看到?黑客可以只从一方接收信息并解密(因为它是用黑客的 public 密钥加密的),然后用另一方的原始 public 密钥重新加密。就这么简单!

...但如果有 SSL 证书,答案是否定的。

为什么?

因为证书的存在正是为了解决上述这个问题。这意味着,来自 Alice/Bob 的 public 密钥如果确实属于 Alice 和 Bob,则可以通过数字签名进行验证,因此,如果他们使用 SSL 证书,Alice 和 Bob 就能够检测到一些 MITM 交换了原始密钥。这是如何工作的超出了这个问题的范围,但是 "as a short answer" 这两个站点都有第三方证书 "pre-installed" 可用于验证正在交换的 public 密钥的真实性。

您因此得出了错误的结论:"Given that the attacker will be able to intercept the certificates before the connection goes secured "。

在用于 TLS 通信的经典 PKI 模型(如 HTTPS)中,基本上只有客户端对服务器进行身份验证(也可能是相互的),客户端有一个受信任的证书颁发机构列表。这些当局应该只有在仔细审查后才能颁发证书。

所以 "normally" 只有 "www.example.com" 的真正所有者才能获得它的证书。因此,客户端将验证证书,因为它在其本地存储中有一个受信任的 CA(它有它的 "root" 和最终颁发此证书的中间证书)

证书本身并不能识别某些东西,因为这是 public。它是从受信任的 CA 到应由其签名的最终证书的整个信任路径。

如果中间有一个人,证书要么是另一个名字,要么是由一个未知的 CA 颁发的,例如通常是由它自己签名的(最近著名的此类案例:https://blog.cloudflare.com/bgp-leaks-and-crypto-currencies/)

现在,这种用于 Web 的 PKI 模型的全部问题是客户端需要信任数百个 CA,并且任何 CA 都可以为任何名称提供证书。因此,一旦您发现流氓或故障,理论上您可以为您并不真正拥有的资源获得第二个证书。这种情况过去发生过多次。

在客户端或服务器端,有多种方法可以解决这个问题。客户端可以 trim 其允许的 CA 列表。服务器可以使用 DNS 中的 DANE 来准确发布客户端在连接到它时应该看到的证书或 CA(并且 MiTM 无法击败它,因为 DANE 受 DNSSEC 保护)。