# 802.1X/EAP 认证框架详解 ## 802.1X 端口访问控制协议 802.1X 定义了基于端口的网络接入控制机制。在 WiFi 环境中,"端口"指的是无线关联的逻辑通道。 ### 受控端口 vs 非受控端口 ``` STA AP │ │ │── EAPOL ─────────────────→│ (非受控端口: 仅允许 EAPOL) │ │ │←─ EAPOL ──────────────────│ (非受控端口: 仅允许 EAPOL) │ │ │ [认证成功] │ │ │ │◄══════════════════════════► (受控端口打开: 允许所有数据) ``` - **非受控端口**:始终开放,但只允许 EAPOL 帧通过 - **受控端口**:认证通过后才开放,允许正常数据传输 ## EAP(Extensible Authentication Protocol) EAP 是一个认证框架,而非具体的认证方法。它定义了消息格式和交换流程,支持多种认证方法(EAP Method)。 ### EAP 消息格式 ``` ┌──────────┬──────────┬──────────┬──────────────┐ │ Code (1) │ ID (1) │ Length(2)│ Data (var) │ └──────────┴──────────┴──────────┴──────────────┘ Code: 1 = Request 2 = Response 3 = Success 4 = Failure ID: 匹配请求/响应的标识符 Length: 整个 EAP 包的长度(含头部) ``` ### EAP 在 WiFi 中的封装层次 ``` EAP Method (如 TLS/MSCHAPv2) │ ▼ EAP Packet │ ▼ EAPOL Frame (802.1X over LAN) │ ▼ 802.11 Data Frame (QoS Data, UP=0) │ ▼ PHY PPDU → Air ``` ## EAP-TLS 详细流程 ### Phase A - TLS 握手 ``` Round 1: Server → Client: EAP-Request/TLS [Start, Length] Client → Server: EAP-Response/TLS [Empty, ClientHello] Round 2: Server → Client: EAP-Request/TLS [ServerHello, Certificate, ServerKeyExchange, CertificateRequest, ServerHelloDone] Client → Server: EAP-Response/TLS [Certificate, ClientKeyExchange, CertificateVerify, Finished] Round 3: Server → Client: EAP-Request/TLS [ChangeCipherSpec, Finished] Client → Server: EAP-Response/TLS [ChangeCipherSpec, Finished] Round 4: Server → Client: EAP-Success ``` ### Phase B - MSK 派生 ``` MSK = PRF(master_secret, "Master Secret", Client Random || Server Random) 其中 master_secret 来自 TLS 握手。 PMK = MSK[0:128] (前128字节用于四次握手) ``` ## EAP-PEAP 详细流程 ### Phase 1 - 建立 TLS 隧道 ``` Server → Client: EAP-Request/PEAP [Start] Client → Server: EAP-Response/PEAP [ClientHello] Server → Client: EAP-Request/PEAP [ServerHello, Certificate, ServerKeyExchange, Finished] Client → Server: EAP-Response/PEAP [ClientKeyExchange, Finished] → TLS 隧道建立(仅服务器认证) ``` ### Phase 2 - 隧道内认证 ``` 在加密隧道内: Server → Client: EAP-Request/MSCHAPv2-Challenge [Challenge] Client → Server: EAP-Response/MSCHAPv2-Response [Username, NT-Response] Server → Client: EAP-Request/MSCHAPv2-Success [Challenge-ACK] (或 MSCHAPv2-Failure) → PEAP 封装结束 Server → Client: EAP-Success ``` ## EAP-TTLS 与 PEAP 的区别 | 特性 | PEAP | TTLS | |------|------|------| | 隧道建立 | TLS(服务器证书) | TLS(服务器证书) | | 隧道内方法 | 主要是 MSCHAPv2 | PAP/CHAP/MS-CHAPv2/Kerberos/EAP | | 灵活性 | 较低 | 更高(支持更多内部方法) | | Microsoft 支持 | 原生支持 | 需要第三方 supplicant | ## EAP 方法选择指南 ``` 决策树: 需要最高安全性? ├── YES → 有 PKI 基础设施? │ ├── YES → EAP-TLS(最佳选择) │ └── NO → 部署 PKI,然后使用 EAP-TLS └── NO → 使用现有 AD/LDAP? ├── YES → PEAP-MSCHAPv2(最简单)或 TTLS └── NO → 考虑一次性令牌 + PEAP-GTC ```