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