Android端hostapd EAP-PEAP+Let's Encrypt证书连接失败求助
Android连接EAP-PEAP WiFi提示证书过期的排查与疑问
问题概述
配置hostapd使用EAP-PEAP+Let's Encrypt证书,Android手机连接时提示证书过期,无法建立连接;但将Android端CA证书验证设为“不验证”时可正常连接。Windows设备则能正常连接并可选择接受证书。
hostapd日志
wlan0: STA <mac> IEEE 802.11: authenticated wlan0: STA <mac> IEEE 802.11: associated (aid 1) wlan0: CTRL-EVENT-EAP-STARTED <mac> wlan0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=1 wlan0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=25 SSL: SSL3 alert: read (remote end reported an error):fatal:certificate expired OpenSSL: openssl_handshake - SSL_connect error:0A000415:SSL routines::sslv3 alert certificate expired wlan0: CTRL-EVENT-EAP-FAILURE <mac> wlan0: STA <mac> IEEE 802.1X: authentication failed - EAP type: 0 (unknown) wlan0: STA <mac> IEEE 802.1X: Supplicant used different EAP type: 25 (PEAP) wlan0: STA <mac> IEEE 802.11: deauthenticated due to local deauth request
Android客户端配置
- EAP Method: PEAP
- Identity: (已填写)
- Password: (已填写)
- CA-Certificate: 使用系统证书
- Domain: (未填写)
- Phase2 Authentication: MSCHAPV2
- Anonymous Identity: (未填写)
证书信息
执行命令openssl x509 -in /etc/hostapd/certs/server.pem -text输出关键内容:
[...] Validity Not Before: Jan 29 09:40:58 2023 GMT Not After : Apr 29 09:40:57 2023 GMT Subject: CN = <domain> [...]
hostapd.conf核心配置
# EAP Settings eap_server=1 ieee8021x=1 eapol_version=2 wpa_key_mgmt=WPA-EAP wpa_pairwise=TKIP rsn_pairwise=CCMP eap_user_file=/etc/hostapd/hostapd.eap_user ca_cert=/etc/hostapd/certs/ca.pem server_cert=/etc/hostapd/certs/server.pem private_key=/etc/hostapd/certs/server.key
hostapd.eap_user配置
# Wildcard for all other identities * PEAP,TTLS,TLS # Phase 2 (tunnelled within EAP-PEAP or EAP-TTLS) users "testaccount1" MSCHAPV2 "SuperSecretPassword1" [2]
疑问点
- Android端如何调整配置以适配当前证书情况?
- 日志中以下两行是否说明eap_user配置有误?但关闭证书验证时连接正常,这矛盾吗?
wlan0: STA <mac> IEEE 802.1X: authentication failed - EAP type: 0 (unknown) wlan0: STA <mac> IEEE 802.1X: Supplicant used different EAP type: 25 (PEAP)
问题分析与解决方案
1. 证书过期是核心问题
从证书信息可以明确看到,服务器证书的有效期截止到2023年4月29日,已经过期。Android的系统证书验证逻辑比Windows更严格:Windows会弹出提示让用户手动选择是否信任过期证书,而Android默认直接拒绝,只有关闭验证才能绕过。
解决办法:
- 立即更新Let's Encrypt证书:执行
certbot renew(如果用certbot管理证书),更新后替换hostapd配置中的server.pem和server.key,重启hostapd服务。 - 确保更新后的证书链完整:Let's Encrypt的证书需要包含中间证书,建议将服务器证书和中间证书合并成
server.pem,避免Android系统无法找到完整信任链。
2. 日志中EAP类型报错的解释
那两行日志并非eap_user配置错误,而是证书验证失败导致的连锁反应:
- 当Android端检测到证书过期后,直接终止EAP协商过程,没有完成完整的EAP类型交互,hostapd因此收到了异常的EAP类型(0),进而提示“Supplicant used different EAP type:25”——这只是因为协商提前中断,并非配置不匹配。
- 关闭证书验证时,Android端会完成完整的EAP-PEAP协商流程,所以hostapd能正常识别EAP类型25,连接成功。
3. Android端的额外配置建议
如果暂时无法更新证书(不推荐),除了关闭验证,还可以:
- 将Let's Encrypt的根证书手动导入Android系统:下载ISRG Root X1证书,在Android设置中添加到“受信任的凭据”,但过期证书依然会被拒绝,仅适用于证书未过期但系统未包含根证书的场景。
- 填写Domain字段:将
CN=<domain>中的域名填入Android客户端的Domain字段,帮助系统更准确地匹配证书,避免不必要的验证失败。
内容的提问来源于stack exchange,提问作者norman
相关产品推荐
相关产品推荐

