You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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]

疑问点

  1. Android端如何调整配置以适配当前证书情况?
  2. 日志中以下两行是否说明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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 02:10:15