简介

最近在使用抓包工具,发现抓包工具通过安装私有证书来进行解密https请求,记录一下。

HTTPS加密

HTTPS加密通信的完整过程:

🔑 详解HTTPS加密流程

HTTPS的加密通信主要包含以下几个核心步骤,其中步骤2到步骤5是TLS握手的精髓:

  1. 建立连接​:你在浏览器中输入一个HTTPS网址(如 https://example.com)并访问,客户端(浏览器)会尝试连接到服务器的443端口​。

  2. 证书交换与验证​:服务器将其数字证书发送给客户端。这个证书好比服务器的“网络身份证”,其中包含了至关重要的服务器公钥、证书颁发机构(CA)、有效期、绑定的域名等信息。

  3. 客户端验证证书​:浏览器收到证书后,会进行一系列严格的校验

  • 验证颁发机构​:检查证书是否由受信任的CA签发。浏览器和操作系统中会预置一个可信CA根证书列表。

  • 验证域名​:检查证书中绑定的域名是否与你正在访问的域名完全一致。

  • 验证有效期​:检查证书是否在有效期内。

  • 验证签名​:使用CA的公钥解密证书的数字签名,并与计算出的证书信息摘要进行比对,以确保证书自签发后未被篡改。如果任何一项验证失败,浏览器通常会弹出严重警告,提示连接不安全。

4. ​密钥交换​:验证通过后,客户端会生成一个随机的会话密钥​(Pre-Master Secret)。然后,它使用步骤2中从证书里获取的服务器 公钥对这个会话密钥进行加密,并发送给服务器。由于只有拥有对应私钥的服务器才能解密此信息,从而确保了密钥交换的安 全。

​5. 建立安全通道​:服务器用自己的私钥解密得到会话密钥。此后,客户端和服务器双方就都拥有了相同的会话密钥。接下来的所有 数据传输都将使用这个密钥进行对称加密和解密。对称加密算法(如AES)在处理大量数据时效率远高于非对称加密,这保证了 通信的高效性

📜 数字证书的核心作用

从上述流程可以看出,数字证书的核心作用可以概括为两点:

身份认证​:证书由可信的第三方(CA)颁发,相当于为服务器提供了一个可验证的“数字身份证”,确保你连接的是真实的、合法的目标网站,而不是一个钓鱼网站或中间人伪装的站点。

安全交换密钥​:证书是安全传递加密密钥的“安全信封”。它将服务器的公钥安全地交付给客户端,客户端再用这个公钥加密后续通信要用的会话密钥,从而完成安全密钥交换。

简单来说,​证书解决了“我把秘密告诉谁”的身份问题,之后的加密通信则是由对称加密算法高效完成

抓包工具解密

🔍 理解中间人解密流程

如上图左侧常规路径所示,要让这个“中间人”角色成立,需要满足两个关键条件,这也是抓包工具(如Charles、Fiddler)的标准工作模式:

  1. 流量导向​:你需要将客户端(你的电脑或手机)的网络代理设置为抓包工具监听的地址和端口。这样,所有本应直接发往服务器的网络流量会先经过抓包工具

  2. 信任证书​:你必须在客户端上安装并完全信任抓包工具自己生成的根证书(CA证书)

    。这个步骤至关重要。安装后,你的设备就信任了由这个抓包工具“颁发”的所有证书。

满足上述条件后,具体的解密过程如下

  • 当你的客户端向目标服务器(例如 https://example.com)发起HTTPS请求时,请求首先被导入了抓包工具。

  • 抓包工具会伪装成目标服务器,并使用一个它自己即时生成的、但域名是 example.com的证书与你的客户端完成TLS握手。由于这个证书是由你已信任的抓包工具根证书签发的,你的客户端会认为它正在与真实的 example.com通信,握手成功。

  • 与此同时,抓包工具会以客户端的身份,与真实的 example.com服务器建立另一条正常的HTTPS连接。

  • 这样一来,抓包工具就处于一个关键位置:它一端连接着你,另一端连接着服务器。从你这里收到经它“伪造”证书加密的数据后,它能用自己的私钥解密,看到明文;然后,再将你的请求用它与真实服务器协商的密钥加密后转发出去。服务器返回的响应也经历类似的反向过程。

因此,你通过抓包工具看到的,是已经被它解密后的明文数据。这解释了为什么开发者工具的Network面板能看到清晰的请求和响应,因为浏览器在完成解密后,将数据显示了出来

🛡️ 应对高级防护措施

并非所有流量都能轻易抓取。为了保护数据安全,很多应用(尤其是金融类App)会采用更高级的防护措施来对抗这种中间人攻击,对应上图右侧的路径

  • SSL证书绑定​:应用不再简单地信任操作系统内置的根证书,而是将正确的服务器证书信息(或公钥)直接“绑定”或预置在App内部。当建立连接时,App会校验服务器返回的证书是否与内置的完全一致。如果不同(例如抓包工具提供的伪造证书),就会立即中断连接,导致抓包失败

  • 双向TLS认证​:这是一种更严格的安全机制。它不仅要求客户端验证服务器,还要求服务器验证客户端。客户端必须提供一个由服务端信任的CA签发的证书。抓包工具没有这个特定的客户端证书,因此无法通过服务端的验证

  • 代理检测与绕过​:一些应用会检测系统是否设置了代理,如果发现,可能会拒绝通过代理发送流量。可以通过设置(如使用 Proxy.NO_PROXY)或Hook系统API来尝试绕过

面对这些防护,抓包会变得困难,但并非完全无法进行,通常需要更专业的工具或修改测试环境

,例如:

  • 在测试版本中临时关闭SSL Pinning

  • 使用更底层的网络抓包工具(如Wireshark),虽然可能无法直接解密明文,但可以分析TLS握手过程来诊断问题

  • 使用诸如“抓包大师”等通过USB直连设备的专业工具,它们有时能在不依赖系统代理的情况下获取流量

💎 总结

总而言之,HTTPS通信确实是加密的,但这并不意味着抓包工具无能为力。它们能够抓取和分析HTTPS流量,核心原理是扮演一个受你信任的“中间人”,在你和目标服务器之间建立起两条独立的HTTPS连接,从而“解密”通信