22

大多数 wiki 文章都描述了客户端浏览器如何使用公钥(证书)加密敏感数据(例如用户名/密码)并将这些加密数据发送到服务器。服务器将使用私钥对其进行解密。我明白这部分。但没有明确的信息说明服务器如何加密数据并发送回浏览器。

以我的网上银行为例:

(0) 我已经接受了来自我的网上银行的可信证书(公钥)。

(1) 通过 SSL URL,我的浏览器访问https://myonlinebanking.com

(2) 我输入用户名/密码登录。这些数据是加密的,所以中间人只能看到无意义的数据。

(3) 银行网络服务器收到我的加密数据,并使用其私钥解密并成功验证我的帐户。

现在这是我的问题:

银行如何发回我的数据?银行用什么密钥加密响应数据?如果银行使用“公钥”加密,中间人可以看到它,就像我看到它一样。所以中间人不知道我的用户名/密码,但他仍然可以看到我的帐户余额?

谢谢您的帮助。

4

2 回答 2

10

你有一些错误的假设:

  • HTTP 数据并不总是使用服务器的公钥加密,以便将其发送到服务器。
  • 服务器的公钥只是在开始时使用(握手协议)来建立一个安全密钥,用于安全密钥加密(对称加密)。
  • 所有通信都通过密钥或对称密钥加密,其中客户端(浏览器)和服务器使用相同的密钥来加密和解密数据。

TLS(传输层安全)协议使用非对称加密(公钥)和对称加密(安全密钥)的组合。与您的银行的主要通信是使用对称加密,在 TLS 握手期间使用非对称加密安全地建立会话密钥(安全密钥)。

这一切都在 TLS(传输层安全)握手中,这在这个链接中得到了很好的解释。

于 2013-02-06T21:55:28.747 回答
8

TLS 握手过程在双方之间建立一个对称密钥,可能在过程中使用非对称加密(细节取决于客户端/服务器之间协商的确切算法)。这样,通信在双向加密,而不仅仅是单向。

但是,最终保护您免受 MITM 侵害的是您的浏览器会执行某种形式的主机名验证。首先检查服务器在握手中提供的证书的有效性。如果成功,您的浏览器会检查证书是否绑定到它正在与之通信的确切主机。如果忽略此检查,即使其余通信严格遵循协议(包括所有加密元素),MITM 攻击仍然会成功。攻击者可以简单地伪装成任何主机并尽职尽责地执行协议的其余部分,你不会知道其中的区别。

于 2012-06-09T13:52:58.837 回答