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