前置条件
- 需要在系统中安装并信任自签的 CA 根证书。
HTTPS 简介
- HTTPS = HTTP + TLS 在 HTTP 基础上通过 TLS 协议实现加密通信,确保数据在传输过程中不会被窃听或篡改。
攻击原理
- TLS 基于 TCP 协议。因此,可以借助 SOCKS5 代理 实现中间人攻击。
- 攻击者在 TLS 握手阶段拦截流量,并向客户端伪造证书。
- 当客户端信任该伪造证书后,中间人即可解密流量,再与真实服务器通信,完成”透明转发”。
工具准备
- 浏览器:火狐浏览器(支持 SOCKS5 代理配置)
- 证书:自签名 CA 根证书,用于签发伪造的服务器证书
攻击流程
- 客户端通过 SOCKS5 发起 HTTPS(默认端口 443)请求。
- 中间人拦截 TLS 握手,获取服务器证书。
- 使用本地 CA 签发伪造的目标网站证书。
- 浏览器信任该证书后,会建立与中间人的加密通信。
- 中间人解密数据后,再与真实服务器通信,实现转发与透明解密。
准备工作
- 生成自签名 CA 根证书。
- 使用该 CA 根证书签发目标网站的伪造证书。
- 配置浏览器或操作系统,信任该 CA 根证书。
流程图
sequenceDiagram
participant Client as 客户端浏览器
participant MITM as 攻击者 (中间人)
participant Server as 真实服务器
Note over Client,MITM: 客户端通过 SOCKS5 代理发起 HTTPS 请求
Client->>MITM: ClientHello
MITM->>Server: ClientHello (转发)
Server->>MITM: ServerHello + 证书
MITM->>Client: 伪造证书 + ServerHello (由自签 CA 签发)
Client->>MITM: Finished (建立加密信道)
MITM->>Server: Finished (与服务器建立加密信道)
Note over MITM: 中间人可解密/查看数据并转发
Client->>MITM: Application Data (加密)
MITM->>Server: Application Data (加密)
Mermaid 图表
🔗 在线编辑 Mermaid 图表:https://mermaid.live/
抓包命令示例
TLS 1.2
curl.exe --tls-max 1.2 https://www.duanxu.online -v
抓包结果存放路径:./pcapng/tls1.2.pcapng
TLS 1.2 全握手时序图
共享密钥计算流程
RSA 模式: 1. 客户端生成 PreMasterSecret
(48 字节)。
2. 使用服务器公钥加密该值并发送给服务器。
3. 服务器使用私钥解密,得到相同的 PreMasterSecret
。
DH/ECDHE 模式: 1. 客户端与服务器交换各自的 DH/ECDHE 公钥参数,具有前向安全性。
2. 双方通过 对方公钥 + 自己私钥 计算出相同的 PreMasterSecret
。
MasterSecret 生成公式:
MasterSecret = PRF(PreMasterSecret, ClientRandom, ServerRandom)
常见握手消息
- Certificate:服务器证书
- ServerKeyExchange:包含 DH/ECDHE 公钥参数
- ClientKeyExchange:携带公钥加密的 PreMasterSecret
sequenceDiagram
participant Client as Client (192.168.31.149)
participant Server as Server (43.255.29.253)
Note over Client,Server: TCP 三次握手
Client->>Server: SYN
Server->>Client: SYN+ACK
Client->>Server: ACK
Note over Client,Server: TLS 1.2 全握手开始
Client->>Server: ClientHello
Server->>Client: ServerHello + Certificate + ServerKeyExchange + ServerHelloDone
Client->>Server: ClientKeyExchange + ChangeCipherSpec + Finished
Server->>Client: NewSessionTicket + ChangeCipherSpec + Finished
Note over Client,Server: 握手完成,进入加密通信
Client->>Server: Application Data (加密)
Server->>Client: Application Data (加密)
TLS 1.3 全握手时序图
共享密钥计算流程
- 客户端生成临时密钥对
(ClientPrivateKey, ClientPublicKey)
。 - 服务器生成临时密钥对
(ServerPrivateKey, ServerPublicKey)
。 - 双方通过 DH 算法计算出相同的
SharedSecret
,并利用 HKDF 派生最终会话密钥。
sequenceDiagram
participant Client as Client (192.168.31.149)
participant Server as Server (43.255.29.253)
Note over Client,Server: TCP 三次握手
Client->>Server: SYN
Server->>Client: SYN+ACK
Client->>Server: ACK
Note over Client,Server: TLS 1.3 全握手开始
Client->>Server: ClientHello (KeyShare + SupportedVersions + Random)
Server->>Client: ServerHello (KeyShare + SupportedVersions + Random)
Server->>Client: Certificate + CertificateVerify + Finished
Client->>Server: Finished
Note over Client,Server: 握手完成,进入加密通信
Client->>Server: Application Data (加密)
Server->>Client: Application Data (加密)
X.509 证书
1️⃣ 定义
- 全称:ITU-T X.509
- 标准机构:国际电信联盟(ITU-T)
- 作用:定义数字证书的结构与签名方式,是 PKI(公钥基础设施)的核心标准。
2️⃣ 主要字段
字段 | 说明 |
---|---|
版本 | X.509 v1/v2/v3(v3 最常用) |
序列号 (Serial Number) | 唯一标识证书 |
签发者 (Issuer) | 颁发机构(CA)信息 |
主体 (Subject) | 证书持有者信息 |
有效期 (Validity) | NotBefore / NotAfter |
公钥信息 (Subject Public Key Info) | 公钥及其算法 |
签名算法 (Signature Algorithm) | CA 签名所用算法 |
扩展字段 (Extensions) | v3 特有,如 keyUsage 、basicConstraints 等 |
签名值 (Signature) | 颁发者私钥对证书内容的签名 |
3️⃣ 编码方式
- DER:二进制编码
- PEM:Base64 编码,常见于
-----BEGIN CERTIFICATE-----
4️⃣ 应用场景
- TLS/SSL 服务器与客户端认证
- 软件或文件的数字签名验证
- 安全通信与身份认证