大多数wiki文章描述了客户端浏览器如何使用公钥(证书)加密敏感数据(例如用户名/密码)并将此加密数据发送到服务器。服务器将使用私钥对其进行解密。我得到这个部分。但没有明确的信息说服务器如何加密数据并发送回浏览器。
以我的网上银行为例:
(0)我已经从我的网上银行接受了可信证书(公钥)。
(1)通过SSL网址,我的浏览器访问https://myonlinebanking.com
(2)我输入用户名/密码登录。这些数据是加密的,因此中间人只能看到无意义的数据。
(3)银行网络服务器接收到我的加密数据,并使用其私钥对其进行解密并成功验证我的帐户。
现在我的问题是:
银行如何发回我的数据?银行用什么密钥加密响应数据?如果银行用“公钥”加密,那么中间人可以看到它就像我能看到的那样。所以中间人不知道我的用户名/密码,但他仍然可以看到我的帐户余额?
感谢您的帮助。
答案 0 :(得分:8)
TLS handshake进程在双方之间设置对称密钥,可能在此过程中使用非对称加密(详细信息取决于所确定的算法)在客户端/服务器之间协商)。这样,通信就会以两种方式加密,而不仅仅是单向。
最终保护您免受MITM攻击的事实是,您的浏览器会执行某种形式的主机名验证。首先检查服务器在握手中呈现的证书的有效性。如果成功,则浏览器会检查证书是否绑定到与之通信的确切主机。如果省略此检查,即使通信的其余部分严格遵循协议(包括所有加密元素),MITM攻击仍将成功。攻击者可以简单地假装成任何主机并尽职尽责地执行协议的其余部分,你不会知道其中的区别。
答案 1 :(得分:8)
你有一些错误的假设:
TLS(传输层安全)协议使用非对称加密(公钥)和对称加密(安全密钥)的组合。与银行的主要通信是使用对称加密,在TLS握手期间使用非对称加密安全地建立会话密钥(安全密钥)。
这一切都在TLS(传输层安全性)握手中,在此链接here中对此进行了很好的解释。