一、中间人攻击过程
正常HTTPS通道建立过程
- 客户端向服务器发送HTTPS请求;
- 服务器返回公钥;
- 客户端生成私钥,并使用公钥加密,发送给服务器;
- 服务器使用与公钥配对的私钥解密,获取客户端生成的私钥;
- 客户端、服务器使用协商好的私钥进行加密数据传输。
中间人攻击
- 客户端向服务器发送HTTPS请求;
- 服务器返回公钥;
2.1. 中间人劫持服务器数据,生成假公钥,返回给客户端;(同时自己备份公钥,后边有用) - 客户端生成私钥,并使用假公钥加密,发送给服务器;
3.1. 中间人劫持客户端数据,使用与假公钥配对的假私钥解密获取客户端生成的私钥(已暴露);同时使用劫持的公钥加密私钥,发送给服务器; - 服务器使用与公钥配对的私钥解密,获取客户端生成的私钥;
- 客户端、服务器使用协商好的私钥进行加密数据传输。
补充
- 公钥、私钥、假公钥、假私钥:对应非对称加密算法
- 私钥、私钥:对应对称加密算法
二、防御方法
- 服务端在发送浏览器的公钥中加入 CA 证书,浏览器可以验证 CA 证书的有效性(大概就是验证公钥与CA证书是否匹配,保证公钥是来自于服务器而不是中间人)