这个问题在这里已有答案:
所以我(可能不正确)理解SSL握手的工作方式是:
我想知道为什么MITM无法解密敏感信息:
至于MitM伪造公钥 - 这就是使用证书的原因。证书将公钥与其所有者绑定,如果网站是其域名。因此,如果您输入ab.com,您将从服务器获得带有ab.com证书的公钥(如果没有,浏览器会抱怨)。如果中间有一个人,他们必须拥有为ab.com颁发的证书,这不是(轻松)可能的,但是看到CA黑客,攻击者利用证书颁发机构漏洞发布欺诈性证书。
SSL握手也比这复杂得多,其中一部分称为密钥交换,并且是基于先前商定的算法提出用于流量加密的会话密钥。请注意,有多种算法可用于提供会话密钥(在客户端上生成它并使用公钥加密发送它是一种非常简单的方法),以及使用此类密钥进行加密的多种算法。
在SSL / TLS会话期间使用的“密码套件”实际上是为不同目的选择的算法列表。
客户端向服务器发送(可能是未加密的,因为客户端没有加密信息)请求到服务器发送回客户端的公钥(MITM易于访问)。
否。服务器将签名证书发送回客户端,该证书包含其公钥,签名者和使用服务器私钥的数字签名。
客户端生成一个永远不会与任何人共享的随机密码,并使用公钥(只能用于加密数据)对其进行加密,然后将此加密密码发送到服务器。服务器用其私钥解密加密密码(只有它知道,并且只能用于解密数据),从而获得客户端的密码,而不让MITM得到它,因为他没有私钥。
只在一些密码套房。不是全部。
不知何故,这用于在客户端和服务器之间传输敏感信息(我不确定随机密码用于什么。
除了某些密码套件外,它根本不被使用。无论如何,对称会话密钥由两个对等体协商并且根本不传输。
难道所有敏感信息都不能用公钥加密吗?)。
不。您还必须建立身份,即进行身份验证。
我想知道为什么MITM无法解密敏感信息:
因为MITM无法在证书上伪造数字签名。否则,你正和任何人进行秘密谈话。
将所有流量从客户端重定向到MITM拥有的站点。这包括客户端对公钥的请求,该公钥将被MITM的服务器公钥替换。此外,回复应伪装成来自真实服务器的回复。
不可能,见上文。
MITM的服务器将使用其私钥解密此流量,从而泄露敏感信息。然后,可以使用真实服务器的公钥对此敏感信息进行加密,并将其发送到真实服务器,以便客户端获取所需的任何信息。
不可能,见上文。
您对TLS和PKI的理解存在严重缺陷。