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

Android 11使用WifiNetworkSuggestion连接WPA2 Enterprise EAP PEAP网络报错

WPA2 Enterprise EAP PEAP WiFi连接异常解决方案

报错根因

Android 11起原生系统强制要求企业级WPA2/WPA3网络配置必须做服务器身份校验,未配置CA证书、服务器域名的不安全配置会直接抛出IllegalArgumentException: Enterprise configuration is insecure异常。

现有代码问题排查

你当前代码存在配置冲突错误:
setWpa2Passphrase是个人版WPA2网络的配置方法,和企业级配置setWpa2EnterpriseConfig互斥。如果传入的wifiConnection对象携带sharedKey参数,两个配置同时生效会直接触发异常,需要删除如下逻辑:

if (wifiConnection.sharedKey != null) {
    networkSuggestionBuilder.setWpa2Passphrase(wifiConnection.sharedKey)
}

这也是你在不同场景下调用setUntrusted有时仍报错的核心原因。

可选解决方案

方案1:配置CA证书与服务器校验(最推荐,合规稳定)

CA证书不需要必须内置到应用资源,可通过用户手动选择导入、服务端下发等任意方式获取,只要最终转换为X509Certificate实例即可使用。
配置示例代码:

private fun initWpa2EnterpriseWifiSuggestion(wifiConnection: WifiConnectionEntity) =
    if (wifiConnection.user != null && wifiConnection.password != null) {
        val networkSuggestionBuilder = WifiNetworkSuggestion.Builder()
        networkSuggestionBuilder.setSsid(wifiConnection.ssid)

        val enterpriseConfig = WifiEnterpriseConfig()
        enterpriseConfig.identity = wifiConnection.user
        enterpriseConfig.password = wifiConnection.password
        enterpriseConfig.eapMethod = WifiEnterpriseConfig.Eap.PEAP
        enterpriseConfig.phase2Method = WifiEnterpriseConfig.Phase2.MSCHAPV2
        // 新增CA证书配置
        val certificateFactory = CertificateFactory.getInstance("X.509")
        // 这里以从raw资源加载为例,可替换为其他来源的证书输入流
        val caInput: InputStream = resources.openRawResource(R.raw.your_ca_file)
        val caCert = certificateFactory.generateCertificate(caInput) as X509Certificate
        caInput.close()
        enterpriseConfig.caCertificate = caCert
        // 新增服务器域名配置,替换为实际认证服务器的域名
        enterpriseConfig.altSubjectMatch = "DNS:auth.yourdomain.com"
        
        networkSuggestionBuilder.setWpa2EnterpriseConfig(enterpriseConfig)
        Pair(networkSuggestionBuilder.build(), null)
    } else {
        Pair(
            null,
            if (wifiConnection.user == null) ERROR_USER_NOT_PROVIDED else ERROR_PASSWORD_NOT_PROVIDED
        )
    }

方案2:无证书模式(仅适合测试/特殊场景)

原生WifiNetworkSuggestion API本身不支持公开的无证书配置,你之前调用setUntrusted(true)后连接失败,可补充匿名身份配置尝试修复:

// 配置WifiEnterpriseConfig时新增
enterpriseConfig.anonymousIdentity = "anonymous"
// 构造suggestion时开启untrusted模式
networkSuggestionBuilder.setUntrusted(true)

注:你在系统设置页看到的“无证书”选项是厂商ROM对原生逻辑做的定制修改,原生API无对应公开接口,该方案兼容性不稳定,部分设备依然会触发配置不安全报错。

方案3:替代实现方案

如果WifiNetworkSuggestion始终无法适配你的场景,可改用WifiNetworkSpecifier配合系统网络请求API实现连接,缺点是配置不会持久化保存到系统WiFi列表,每次连接都需要用户手动确认授权。

内容的提问来源于stack exchange,提问作者Jorge Díaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:36:02