由于http是明文传输协议,数据在传输过程中很容易泄露或者被劫持,所以https越来越普及,但是如果使用不当,依然会有安全隐患。
为什么https依然会被劫持
https劫持其实很常见,抓包工具Fiddler就是这么做的
第一步,fiddler向服务器发送请求进行握手, 获取到服务器证书, 用证书公钥进行解密, 验证服务器数据签名。
第二步,fiddler伪造自己的证书, 冒充服务器证书传递给客户端浏览器,客户端浏览器做跟fiddler一样的事。
第三步,客户端浏览器生成https通信用的对称密钥,用fiddler伪造的证书公钥加密后传递给服务器, 被fiddler截获。
第四步,fiddler将截获的密文用自己伪造证书的私钥解开,获得https通信用的对称密钥。
第五步,fiddler将对称密钥用服务器证书公钥加密传递给服务器, 服务器用私钥解开后建立信任,握手完成, 用对称密钥加密消息, 开始通信。
第六步,fiddler接收到服务器发送的密文, 用对称密钥解开,获得服务器发送的明文。再次加密, 发送给客户端浏览器。
第七步,客户端向服务器发送消息, 用对称密钥加密, 被fidller截获后,解密获得明文。
由于fiddler一直拥有通信用对称密钥, 所以在整个https通信过程中信息对其透明。也就是说fiddler&charles向服务器冒充是客户端,向客户端又谎称自己是服务器
不要信任所有证书
很多时候服务端的证书是自签证书,其根证书在客户端不被信任,这种情况下会导致无法建立https连接,很多人为了一时方便,直接不校验服务端证书,导致的后果就是如果有人使用中间人劫持,客户端毫无察觉,数据依然会泄露或者被劫持。