24、WiFi安全基础:WEP/WPA/WPA2/WPA3区别、企业级WiFi(802.1X)、证书配置与EAP方法
说到WiFi安全,我估计不少同学第一反应就是「设个密码」。但说实话,WiFi安全远不止设个密码这么简单。我在做Android系统开发时,遇到过不少因为WiFi安全配置不当导致的连接失败、数据泄露问题。今天我们就来彻底搞懂WiFi安全的核心知识点。
一、WiFi安全协议演进:从WEP到WPA3
WiFi安全协议的发展史,其实就是一部「道高一尺,魔高一丈」的攻防史。我刚开始做Android开发那会儿,WEP还没完全淘汰,但已经漏洞百出了。
1. WEP(Wired Equivalent Privacy)
WEP是1999年推出的第一代WiFi安全协议。它的加密算法是RC4,密钥长度有64位和128位两种。听起来还行?实际上WEP的漏洞非常严重。
我曾经在维护一个老项目时,发现设备还在用WEP加密。用一台普通笔记本,配合Aircrack-ng工具,不到5分钟就破解了WiFi密码。所以,如果你的设备还在用WEP,赶紧换掉。
WEP的核心问题在于:初始化向量(IV)太短,只有24位。这意味着大约每5000个数据包就会重复一次IV。攻击者只要收集到足够的重复IV数据包,就能推算出密钥。说白了,WEP就是个「纸糊的锁」。
2. WPA(Wi-Fi Protected Access)
WPA是WEP的临时替代方案,2003年推出。它仍然使用RC4加密,但引入了TKIP(临时密钥完整性协议)。TKIP会动态生成密钥,每个数据包都用不同的密钥加密。
WPA比WEP安全多了,但也不是铁板一块。TKIP本身存在一些设计缺陷,比如Michael算法可以被暴力破解。我记得2012年左右,业内就发现了WPA的「Hole196漏洞」,攻击者可以伪造组密钥来注入恶意数据包。
3. WPA2
WPA2是2004年推出的,一直用到今天。它最大的变化是抛弃了RC4,改用AES-CCMP加密。AES是国家级加密标准,安全性远高于RC4。
WPA2有两种模式:
- WPA2-Personal(PSK):预共享密钥模式,适合家庭和小型办公
- WPA2-Enterprise:企业级模式,需要802.1X认证服务器
WPA2的弱点是KRACK攻击(2017年发现)。攻击者可以伪造握手消息,重装密钥,从而解密数据。不过这个漏洞需要攻击者在WiFi信号范围内,实际利用难度较高。
4. WPA3
WPA3是2018年推出的最新标准。它解决了WPA2的KRACK攻击问题,引入了SAE(Simultaneous Authentication of Equals)握手协议。
WPA3的几个关键改进:
- 前向保密:即使攻击者拿到了密码,也无法解密之前捕获的数据包
- 防暴力破解:SAE协议限制了离线字典攻击
- 192位安全套件:面向政府和企业的高安全模式
如果你现在开发新设备,尽量支持WPA3。虽然目前很多路由器还不支持,但Android 10以上已经原生支持WPA3。我最近在做一个IoT项目,就强制要求所有设备必须支持WPA3。
二、企业级WiFi与802.1X认证
企业级WiFi和家庭WiFi最大的区别是什么?家庭WiFi是「一把钥匙开一把锁」,所有设备用同一个密码。企业级WiFi则是「一人一证」,每个用户都有自己的账号和密码。
802.1X是IEEE定义的端口访问控制协议。它不直接加密数据,而是负责「你是谁」的认证过程。认证通过后,再交给WPA2/WPA3进行数据加密。
802.1X的架构包含三个角色:
- Supplicant(客户端):就是我们的手机、笔记本等设备
- Authenticator(认证器):通常是WiFi接入点或交换机
- Authentication Server(认证服务器):一般是RADIUS服务器
认证流程大致是这样的:
- 客户端连接到WiFi热点
- 认证器要求客户端提供身份信息
- 客户端发送EAP-Start消息,开始认证
- 认证器将客户端的EAP消息转发给RADIUS服务器
- RADIUS服务器验证身份,返回成功或失败
- 认证通过后,认证器打开端口,允许数据通信
三、EAP方法详解
EAP(Extensible Authentication Protocol)是802.1X的核心。它本身只是一个框架,具体怎么认证由不同的EAP方法决定。我整理了几种常见的EAP方法:
| EAP方法 | 认证方式 | 安全性 | 适用场景 |
|---|---|---|---|
| EAP-TLS | 证书双向认证 | 最高 | 企业、政府 |
| EAP-TTLS | 服务器证书+用户名密码 | 高 | 中小企业 |
| PEAP | 服务器证书+用户名密码 | 高 | 广泛使用 |
| EAP-FAST | PAC令牌+用户名密码 | 中 | Cisco设备 |
| EAP-MD5 | 用户名密码(明文) | 低 | 不推荐使用 |
我个人最推荐的是EAP-TLS。为什么?因为它使用证书进行双向认证,既验证服务器身份,也验证客户端身份。攻击者无法伪造任何一方。我在银行项目里就用的EAP-TLS,安全性没得说。
PEAP和EAP-TTLS是折中方案。它们只需要服务器端有证书,客户端用用户名密码认证。部署起来比EAP-TLS简单,但安全性稍低。
EAP-TLS需要客户端证书,管理成本高但安全性最好。
PEAP/TTLS只需要服务器证书,部署方便但依赖密码强度。
四、证书配置实战
在Android上配置企业WiFi,核心就是证书管理。我遇到过不少开发者,代码写得挺好,但证书配置不对,导致连接失败。
Android支持两种证书格式:
- X.509证书:标准的公钥证书,用于EAP-TLS、PEAP等
- PKCS#12(.p12):包含私钥和证书的容器,用于客户端认证
配置证书的代码示例:
// 安装CA证书到信任存储
KeyStore keyStore = KeyStore.getInstance("AndroidCAStore");
keyStore.load(null, null);
// 加载CA证书文件
InputStream caInput = new FileInputStream("ca_cert.der");
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate caCert = cf.generateCertificate(caInput);
// 添加到信任存储
keyStore.setCertificateEntry("MyCA", caCert);
// 配置WPA2-Enterprise网络
WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig();
enterpriseConfig.setIdentity("username@domain.com");
enterpriseConfig.setPassword("password");
// 设置EAP方法
enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.PEAP);
enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.MSCHAPV2);
// 设置CA证书
enterpriseConfig.setCaCertificate((X509Certificate) caCert);
// 创建WiFi配置
WifiConfiguration wifiConfig = new WifiConfiguration();
wifiConfig.SSID = "\"EnterpriseWiFi\"";
wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.IEEE8021X);
wifiConfig.enterpriseConfig = enterpriseConfig;
我曾经踩过一个坑:Android 8.0以上要求CA证书必须包含CA:TRUE的基本约束扩展。如果证书不满足这个条件,系统会直接拒绝连接。所以生成证书时一定要检查扩展属性。
五、知识体系总览
为了让你更直观地理解WiFi安全的知识结构,我画了一张图:
六、总结与避坑
好了,我们来总结一下今天的内容。WiFi安全的核心就是三件事:选对协议、配好认证、管好证书。
选协议时,优先WPA3,其次WPA2。WEP和WPA就别用了,真的不安全。我见过一些老旧设备还在用WEP,那基本等于没设密码。
配认证时,家庭用PSK就够了,企业用802.1X。EAP方法首选EAP-TLS,其次是PEAP。EAP-MD5千万别用,它传输密码是明文的。
管证书时,注意证书格式和扩展属性。Android 8.0以上对证书要求更严格,CA证书必须有CA:TRUE扩展。我建议用OpenSSL生成证书,控制力更强。
调试WiFi连接时,可以用adb logcat抓取wpa_supplicant的日志。命令是:
adb logcat -s wpa_supplicant。这样能看到详细的认证过程,排查问题非常方便。
公众号:蓝海资料掘金营,微信deep3321