受保护的可扩展的身份验证协议 (PEAP) 是可扩展的身份验证协议 (EAP) 家族的一个新成员。PEAP 使用传输级别安全性
(TLS) 在正在验证的 PEAP 客户端(例如无线计算机)和 PEAP 身份验证器(例如 Internet 验证服务 (IAS)
或远程验证拨号用户服务 (RADIUS) 服务器)之间创建加密通道。PEAP 不指定验证方法,但是会为其他 EAP
验证协议提供额外的安全性,例如 EAP-MSCHAPv2 协议,该协议可以通过 PEAP 提供的 TLS
加密通道得以实现。
PEAP和其他普通WiFi最大的显著区别就是他需要账号和密码来连接WiFi,普通WiFi仅仅需要知道WiFi密码即可。无感知主要区别于WEB认证方式的WiFi,WEB认证的WiFi需要脸上WiFi后,打开浏览器输入账号密码进行登录。PEAP可以直接在系统中配置账号密码直接连接登录,更加方便快捷。
目前CMCC-AUTO在使用PEAP
WiFi。最近在做如何用代码连接CMCC-AUTO这样的WiFi。普通WiFi连接配置WifiConfiguration即可链接使用,但是这样并无法配置连接PEAP。不过手机是支持这样的连接呢。谷歌在Android4.3之后也开放了链接此类型WiFi的方法。使用WifiEnterpriseConfig来进行配置。
下面是在Android4.3之后连接PEAP WiFi的方法。
WifiConfiguration config = new
WifiConfiguration();config.allowedAuthAlgorithms.clear();config.allowedGroupCiphers.clear();config.allowedKeyManagement.clear();config.allowedPairwiseCiphers.clear();config.allowedProtocols.clear();config.SSID
= "\"" SSID
"\"";config.allowedKeyManagement.set(KeyMgmt.WPA_EAP);config.allowedKeyManagement.set(KeyMgmt.IEEE8021X);WifiEnterpriseConfig
enterpriseConfig = new
WifiEnterpriseConfig();enterpriseConfig.setIdentity(username);enterpriseConfig.setPassword(password);enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.PEAP);config.enterpriseConfig
= enterpriseConfig;
既然低版本的Android手机已经支持连接PEAP
WiFi,想必这样的方法在系统中本身已经存在了。只是谷歌在Android4.3以后才开放给开发者。那我们就可以利用反射的方法去调用WifiEnterpriseConfig。这样可以更好的支持低版本手机的使用。
下面是在低版本Android中使用反射的方法去生成连接PEAP WiFi所用的WiFiConfiguration。
package com.example.eap_wifi;import java.lang.reflect.Field;import
java.lang.reflect.Method;import
android.net.wifi.WifiConfiguration;import android.util.Log;public
class WPAConfiguration { private static final String
INT_PRIVATE_KEY = "private_key"; private static final String