2024年5月31日发(作者:)
浅谈三种最常规的HTTPS流量解密方法及原理
Web 安全是一项系统工程,任何细微疏忽都可能导致整个安全壁垒土崩瓦解。拿 HTTPS 来说,它
的「内容加密、数据完整性、身份认证」三大安全保证,也会受到非法根证书、服务端配置错误、
SSL 库漏洞、私钥被盗等等风险的影响。很多同学认为只要访问的网站地址前有一把小绿锁就绝对
安全,其实不然。本文通过介绍三种最常规的 HTTPS 流量解密方法及原理,浅谈一下 HTTPS 的安
全风险。
Man-in-the-middle
Man-in-the-middle(中间人,简称为 MITM),能够与网络通讯两端分别创建连接,交换其收到
的数据,使得通讯两端都认为自己直接与对方对话,事实上整个会话都被中间人所控制。简而言
之,在真正的服务端看来,中间人是客户端;而真正的客户端会认为中间人是服务端。
实现中间人攻击有各种各样的手段,这里不展开讨论。一些常见的 HTTP/HTTPS 抓包调试工具,都
是通过创建本地 Proxy 服务,再修改浏览器 Proxy 设置来达到拦截流量的目的,他们的工作原理与
中间人攻击一致。我用过的这一类工具有:Fiddler、Charles 和 whistle。我在「HTTP 代理原理及
实现(一)」一文中介绍的 HTTP 普通代理,扮演的就是 HTTP 中间人角色。
本文主要讨论 HTTPS 中间人,简单示意如下:
上述 HTTPS(1) 连接,是中间人冒充客户端,与服务端建立的连接,由于 HTTPS 服务端一般不认证
客户端身份,这一步通常没有问题。而对于 HTTPS(2) 连接来说,中间人想要冒充服务端,必须拥
有对应域名的证书私钥,而攻击者要拿到私钥,只能通过这些手段:
1. 去网站服务器上拿;
2. 从 CA 处签发证书;
3. 自己签发证书。
要防范前两点,需要网站做好各个方面的安全防护,从主机安全到网站安全(避免私钥被盗),从
域名解析安全到域名邮箱安全(避免攻击者重签证书)。而攻击者自己签发的证书,无法通过系统
内置根证书的验证,默认无法用于中间人攻击。
对于 Fiddler 这一类调试工具来说,能够解密 HTTPS 流量的关键在于他们会往系统受信任的根证书
列表导入自己的证书,这样他们的自签证书就能被浏览器信任。进入 Fiddler 设置中的「HTTPS」
Tab,勾选相关功能后,就可以顺利解密和修改 HTTPS 流量。这时在浏览器中可以看到这样的证书
链:
fiddler root
RSA Private Key
发布评论