HTTP vs HTTPS 抓包对比:为什么 TLS 1.3 连证书都看不到
网络安全实战 90 天 · Week 1 破冰 · 难度 ★★★ 进阶 | 关键词:HTTPS TLS 1.3 证书 Wireshark 加密传输
上一篇在 HTTP 里轻松捞到明文密码,那 HTTPS 呢?这篇文章用同一个工具、同一个操作,只把目标从 http 换成 https,对比两次抓包结果的差异。最有意思的发现是:在 TLS 1.3 下,你连服务器的证书都看不到------而这恰恰说明加密做对了。
一、实验设计:只改一个变量
做对比实验的关键是控制变量。这次两次抓包除目标网址外完全相同:同一个 Wireshark、同一个网卡选择逻辑、同样的过滤思路、同样的操作动作(访问页面)。
| 变量 | HTTP 组 | HTTPS 组 |
|---|---|---|
| 目标 | http://127.0.0.1/login.php | https://www.baidu.com |
| 协议 | HTTP 明文 | TLS 1.3 加密 |
| 过滤器 | http | tls |
| 预期能看到的 | 完整请求头 + 表单数据 | 只有握手记录,内容不可读 |
二、抓 HTTPS 流量
抓公网 HTTPS 需要虚拟机能够上外网,而 Host-Only 模式是上不了网的。所以第一步要改网络模式:
切换网络模式并抓包
text
1. 关闭 Kali 虚拟机(改网络模式必须关机)
2. 虚拟机设置 → 网络适配器 → 改为 NAT 模式
3. 开机,确认能上网:ping www.baidu.com
4. sudo wireshark 启动抓包
5. 浏览器访问 https://www.baidu.com
6. 抓完后关机,把网络模式改回 Host-Only
注意 改网络模式必须关机,这是 VMware 的硬性要求。另外抓完记得切回 Host-Only------一直挂在 NAT 上,后面打靶机的实验会连不通,而且攻击流量有外泄风险。

三、用 tls 过滤器看握手过程
抓包开始后访问百度,停止抓包,输入过滤器:
TLS 过滤器
text
tls
过滤出来的记录长这样:
抓到的 TLS 记录
text
34 TLSv1.3 Client Hello (SNI=www.baidu.com)
36 TLSv1.3 Server Hello
37 TLSv1.3 Change Cipher Spec
38 TLSv1.3 Application Data
40 TLSv1.3 Application Data
42 TLSv1.3 Application Data
对比 HTTP 那次抓到的 POST /login.php,差别一目了然:HTTP 能看到路径、请求头、表单数据;HTTPS 只能看到"有几次握手"和"之后传了几段加密数据",内容全是 Application Data,不可读。

四、为什么连证书都看不到
这是本次实验最反直觉的发现。按教科书的说法,HTTPS 握手时服务器会把证书发给客户端,那 Wireshark 应该能抓到 Certificate 记录才对。但实际抓下来只有 Client Hello 和 Server Hello,没有 Certificate。
原因是 TLS 1.3 的一项重大改进:证书在握手阶段就被加密传输了。
在 TLS 1.2 及更早版本中,服务器发送 Certificate 消息是明文的,任何人抓包都能看到证书内容(包括域名、颁发机构、有效期)。TLS 1.3 把这一步放进了加密通道,旁观者只能看到 SNI(服务器名称指示),也就是 Client Hello 里那个明文的域名。
| 对比项 | TLS 1.2 及更早 | TLS 1.3 |
|---|---|---|
| 证书传输 | 明文可见 | 加密,抓包看不到 |
| 可见信息 | 域名、证书、颁发机构 | 只有 SNI 域名 |
| 握手往返 | 2-RTT | 1-RTT(支持 0-RTT 恢复) |
| 安全性 | 较高 | 更高 |
所以"看不到证书"不是抓包失败,而是加密生效的证据。想看证书内容,得去浏览器里看------因为浏览器是通信的一方,它本来就能解密。
五、在浏览器里查看证书
地址栏左侧点锁图标,按下面路径进去:
查看证书路径
text
锁图标 → 连接安全 → 更多信息 → 查看证书
能看到的关键字段:
| 字段 | 含义 | 示例值 |
|---|---|---|
| 颁发给(Subject) | 证书属于哪个域名 | www.baidu.com |
| 颁发者(Issuer) | 哪个 CA 签发的 | DigiCert Inc |
| 有效期 | 起止时间 | 通常 1--2 年 |
| 公钥 | 用于密钥交换 | RSA / ECDSA 公钥 |

六、HTTPS 到底解决了什么
用一个比喻概括:HTTP 像寄明信片,路上每个经手的人都能读到内容;HTTPS 像密封信封,外人只能看到收件地址,拆不开。具体来说 HTTPS 解决了三个问题:
| 威胁 | HTTP 下的后果 | HTTPS 如何应对 |
|---|---|---|
| 窃听 | 密码、Cookie 全明文 | 内容加密,抓包不可读 |
| 篡改 | 运营商可插入广告、改内容 | 完整性校验,改动即被发现 |
| 冒充 | DNS 劫持到假网站 | 证书验证服务器身份 |
七、踩坑记录
坑 1:Host-Only 模式下上不了网
Host-Only 的设计就是不连外网,这是它的安全特性,不是故障。要抓公网流量必须临时切到 NAT。注意桥接模式虽然也能上网,但会把虚拟机直接暴露在局域网里,做安全实验时不要用。
坑 2:切了 NAT 还是抓不到 tls
改完网络模式后,流量走的是 ens33 而不是 lo。如果 Wireshark 还停留在 lo 上抓,自然什么都没有。切换网络模式后要重新选网卡------这一点和 Day005 的坑是同一个根源:先想清楚流量走哪条路。
坑 3:只有 Client Hello,怀疑抓包不完整
看到没有 Certificate 记录,第一反应是"是不是我漏抓了"。实际上这是 TLS 1.3 的正常行为。验证方法:看记录里的版本号,如果显示 TLSv1.3,就说明是这个原因;如果是 TLSv1.2 却没有证书,那才是真有问题。
坑 4:找不到查看证书的入口
现代浏览器的证书入口藏得比较深,不在设置菜单里,而是在地址栏的锁图标上。Firefox 的路径是:锁图标 → 连接安全 → 更多信息 → 查看证书。
八、附录:CA 机构与 TLS 版本
证书由 CA(证书颁发机构)签发,浏览器内置了一批受信任的 CA 根证书。常见的有:
| CA 机构 | 特点 |
|---|---|
| DigiCert | 老牌商业 CA,大型网站常用 |
| Let's Encrypt | 免费自动化签发,个人站首选 |
| Comodo / Sectigo | 商业 CA,覆盖面广 |
| GlobalSign | 欧洲老牌 CA |
TLS 各版本现状:
| 版本 | 状态 | 说明 |
|---|---|---|
| TLS 1.0 / 1.1 | 已淘汰 | 存在已知弱点,主流浏览器已停止支持 |
| TLS 1.2 | 主流 | 目前使用最广泛 |
| TLS 1.3 | 最新 | 握手更快,默认加密更多内容 |
九、小结
-
抓 HTTPS 必须让虚拟机能上网,临时切 NAT,抓完切回 Host-Only。
-
TLS 1.3 下看不到证书是正常现象,证书已被加密传输,这是安全性提升而非故障。
-
抓包能看到的信息量,直接反映了协议的安全强度。
-
HTTP 的三个致命问题------窃听、篡改、冒充------正是 HTTPS 要解决的核心。
Week 1 到这里接近尾声。最后一篇换个方向:从 Web 转到服务,用 Hydra 爆开一台靶机的 SSH。