Open ls0f opened 8 years ago
HTTPS也可以中间人劫持,只不过会被浏览器提示证书不被信任罢了。我们也可以自己充当CA,将CA根证书添加到系统受信任根证书列表中,然后给其他网站颁发证书和私钥,代理中间人使用自己颁发的证书来进行转发加密。
Fiddle和GoAgent都是这种做法。TCP 隧道不涉及到这个问题,因为隧道是对数据进行盲转发,不需要解包数据。
CDN也是一个代理中间人的角色。
但CDN如何代理HTTPS服务呢?不可能让每个人都导入CDN自己颁发的证书到受任何证书列表中去。
最简单的办法是网站提供商将域名证书的私钥交给CDN保存,但这涉及到一个安全和信任问题。
具体做法是:ssl握手阶段还是由浏览器和CDN来完成,浏览器最后会把会话加密秘钥用证书的公钥加密传给CDN,CDN把加密的会话秘钥交给网站提供商去解密然后得到会话秘钥,后面的一系列服务就由CDN来处理。
代理就是一个中间人的角色。而HTTPS又是中间人的克星。因为在ssl握手阶段,协商好的数据加密秘钥是通过服务器的公钥加密,只有服务器的私钥能够解密,从而代理中间人就不能解包两端的数据了。