我知道服务器发送的证书不能被伪造(仍然存在 MD5 冲突但代价高昂)但是伪造客户端呢.. 在中间人攻击中: 我们不能告诉服务器我们是合法客户端并从该服务器获取数据并对其进行操作然后使用合法客户端公钥再次加密吗?客户端如何确定数据确实来自服务器?
理论上..我们可以将任何数据注入(inject)到服务器发送给客户端的响应中吗?..
最佳答案
您如何对客户端进行身份验证? SSL 客户端证书?或者一些应用程序级系统(cookie 等)?
简而言之,SSL 的作用如下:
- 在双方之间协商 Diffie-Hellman 共享 session key
- 让服务器签署 session key 并将结果发送给客户端。一旦客户端验证了这一点,客户端就知道没有 MITM,服务器就是他们所说的那样。
- 如果启用了客户端证书,让客户端签署 session key 并将签名发送到服务器。服务器现在知道没有 MITM,客户端就是他们所说的那样。
- 使用共享 session key 双向加密所有数据
通常,当您使用 SSL 时,您不会使用客户端证书。严格来说,服务器不知道连接是否是 MITM 的。但是,如果服务器证书错误,大多数客户端将断开连接。服务器假定如果客户端向前推进连接,则没有 MITM。即使执行 MITM 的 Mallory 选择不从客户端传播断开连接,他现在也没有新信息;他所做的只是自己连接到服务器。如果不拦截客户端的 session cookie 或其他身份验证信息(仅在验证连接安全后由客户端发送),MITM 是无用的。
所以简而言之,只要一端或另一端在启动任何敏感信息的高级通信之前验证另一端的证书,SSL 在两个方向上都是安全的。
关于ssl - ssl 在这两种方式上都是安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5121492/