别再被中间人攻击吓到了!用Wireshark抓包,手把手带你拆解HTTPS握手与数字证书验证全过程

张开发
2026/4/21 18:44:09 15 分钟阅读

分享文章

别再被中间人攻击吓到了!用Wireshark抓包,手把手带你拆解HTTPS握手与数字证书验证全过程
实战拆解HTTPS安全握手用Wireshark透视数字证书验证全流程当你点开银行网站时地址栏那把绿色小锁背后究竟发生了什么大多数人只听说过HTTPS很安全却从未亲眼见过加密握手的具体过程。今天我们将用Wireshark这款网络分析神器像外科手术般解剖一次完整的HTTPS连接让你直观看到数字证书如何传递、密钥怎样协商以及系统如何防范中间人攻击。这不是理论课而是一次真实的网络取证实验——你需要准备好最新版Wireshark3.6和一杯咖啡我们即将开始这场安全探秘之旅。1. 实验环境搭建与抓包准备在开始捕获HTTPS流量前需要精心设计实验环境。推荐使用纯净的虚拟机环境避免其他网络流量干扰。以下是具体配置清单# 安装最新版WiresharkLinux示例 sudo apt update sudo apt install -y wireshark sudo usermod -aG wireshark $USER # 将当前用户加入wireshark组关键配置项网卡选择优先使用有线连接WiFi可能产生额外控制报文捕获过滤器设置为tcp port 443仅捕获HTTPS流量启用SSL/TLS解析在Wireshark的Edit → Preferences → Protocols → TLS中添加密钥日志文件路径提示现代浏览器Chrome/Firefox支持导出TLS会话密钥这是解密HTTPS流量的关键。在环境变量中设置SSLKEYLOGFILE路径浏览器会自动将会话密钥写入该文件。实验目标网站选择有讲究建议满足以下特征使用权威CA颁发的证书如Lets Encrypt支持TLS 1.2/1.3协议包含完整的证书链启用了OCSP装订等高级特性符合这些条件的典型代表包括https://www.cloudflare.comhttps://github.comhttps://www.ssllabs.com2. HTTPS握手全流程逐帧解析启动Wireshark捕获后在浏览器访问目标网站立即停止抓包。你会看到类似下面的通信序列No. 时间 源地址 目标地址 协议 长度 信息 1 0.000000 192.168.1.100 104.16.85.20 TCP 74 443 → 55322 [SYN] Seq0 2 0.028553 104.16.85.20 192.168.1.100 TCP 74 55322 → 443 [SYN, ACK] Seq0 Ack1 3 0.028601 192.168.1.100 104.16.85.20 TCP 66 443 → 55322 [ACK] Seq1 Ack1 4 0.028738 192.168.1.100 104.16.85.20 TLSv1 583 Client Hello 5 0.056932 104.16.85.20 192.168.1.100 TLSv1 1444 Server Hello, Certificate, Server Key Exchange, Server Hello Done 6 0.057015 192.168.1.100 104.16.85.20 TLSv1 126 Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message 7 0.084987 104.16.85.20 192.168.1.100 TLSv1 109 Change Cipher Spec, Encrypted Handshake Message2.1 Client Hello客户端的能力清单双击第4帧查看Client Hello详情关键字段包括字段名示例值安全意义VersionTLS 1.2支持的协议版本Random70f3f8d7...防止重放攻击的随机数Session ID(empty)用于会话复用Cipher SuitesTLS_ECDHE_RSA_WITH_AES_128_GCM支持的加密套件列表Compression Methodsnull禁用压缩避免CRIME攻击ExtensionsSNI, EC Point Formats扩展功能支持特别关注Extension: server_name这就是SNIServer Name Indication它解决了虚拟主机场景下的证书匹配问题。在Wireshark中这个字段会明确显示你访问的域名。2.2 Server Hello服务端的响应决策第5帧包含服务器返回的四个关键消息Server Hello从客户端提供的加密套件列表中选定一个如TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256生成服务器随机数Server Random确定使用的TLS版本和压缩方法Certificate 这是整个握手最核心的部分——服务器发送的数字证书链。在Wireshark中展开可以看到Certificate (3 certificates) Certificate 1 (服务器证书) Serial Number: 03:de:50:... Issuer: CNR3, OLets Encrypt Validity Not Before: 2023-05-01 00:00:00 Not After: 2023-07-30 23:59:59 Subject: CNwww.example.com Public Key: RSA 2048 bits X509v3 Extensions: Key Usage: Digital Signature, Key Encipherment Extended Key Usage: TLS Web Server Authentication Subject Alternative Name: DNS:www.example.com, DNS:example.com Certificate 2 (中间证书) Issuer: CNISRG Root X1, OInternet Security Research Group Subject: CNR3, OLets Encrypt Certificate 3 (根证书) [通常不包含由客户端本地验证]Server Key Exchange 在ECDHE密钥交换中服务器会发送椭圆曲线参数named_curve: secp256r1服务端临时公钥pubkey: 04a1b2c3...Server Hello Done 表示服务器握手消息发送完毕3. 证书验证的幕后机制当浏览器收到证书后会执行一套严格的验证流程证书链验证用中间证书的公钥验证服务器证书签名用根证书的公钥验证中间证书签名检查根证书是否存在于系统信任库有效期检查# 伪代码演示证书有效期验证 from datetime import datetime not_before cert.validity.not_before not_after cert.validity.not_after current_time datetime.utcnow() if current_time not_before or current_time not_after: raise CertificateExpiredError(证书不在有效期内)域名匹配检查证书Subject CN字段比对Subject Alternative Name扩展支持通配符证书如*.example.com吊销状态检查CRLCertificate Revocation ListOCSPOnline Certificate Status ProtocolOCSP装订服务器直接提供OCSP响应在Wireshark中可以看到OCSP装订扩展Extension: status_request (OCSP stapling) Responder ID: CNLets Encrypt R3 OCSP Responder Produced At: 2023-06-15 08:00:00 Cert Status: good This Update: 2023-06-15 08:00:00 Next Update: 2023-06-22 08:00:004. 密钥协商与加密通信通过前几步客户端已确认服务器身份接下来开始密钥交换4.1 ECDHE密钥交换客户端生成临时ECDH密钥对发送Client Key Exchange包含客户端临时公钥双方通过ECDHE算法计算得到相同的pre-master secret结合Client Random和Server Random生成master secret# 密钥生成伪代码基于RFC 5246 def generate_master_secret(pre_master_secret, client_random, server_random): seed bmaster secret client_random server_random return PRF(pre_master_secret, seed, 48) # 48字节主密钥 def generate_key_block(master_secret, client_random, server_random): seed bkey expansion server_random client_random return PRF(master_secret, seed, 40) # 40字节密钥块4.2 加密通道建立客户端发送Change Cipher Spec通知客户端用协商的密钥加密Finished消息服务器同样发送Change Cipher Spec服务器加密Finished消息完成握手此后所有通信都使用对称加密。在Wireshark中可以看到Application Data Protocol: http-over-tls Encrypted Application Data: 17 03 03 00 30 71a3b8c9...5. 中间人攻击防御实战分析假设攻击者尝试拦截HTTPS通信我们通过实验观察系统如何防御5.1 伪造证书攻击攻击者使用自签名证书拦截通信时浏览器会显示明显的警告页面Wireshark中可见证书链不完整证书主题与访问域名不匹配5.2 降级攻击防御通过TLS扩展实现的保护机制Extension: supported_versions TLS 1.3 (0x0304) TLS 1.2 (0x0303) Extension: signature_algorithms ecdsa_secp256r1_sha256 rsa_pss_rsae_sha256 Extension: key_share Group: x255195.3 密钥交换安全性对比不同密钥交换方式的安全性交换方式前向保密计算开销抗量子性RSA否低差DH是中差ECDHE是低差Kyber是中强现代最佳实践是使用TLS 1.3ECDHE既保证性能又确保前向保密。在抓包分析时可以特别关注密钥交换阶段的算法选择。

更多文章