Android11在2020年12月发布的安全更新中进行了一个修复:PSA: Android 11 will no longer let you insecurely connect to enterprise WiFi networks

这项变更直接导致的是连接安全性为wpa2-enterprise的WiFi时,去掉了不验证(Do Not Validate) CA证书的选项:image-20210317140152847

802.1X

根据维基百科,802.1X是一种关于用户接入网络的认证标准,它工作在二层,通过EAP协议(Extensible Authentication Protocol)进行认证,为wpa-enterprise/wpa2-enterprise提供了接入控制。BUPT的校园WiFi BUPT-mobile使用的就是这样的接入方式:

image-20210317141740866

EAP是一种可扩展的认证机制,通常使用的认证方法有EAP-TLS、EAP-TTLS、PEAP。前者是在服务端和客户端都会校验对方的证书。后两者则只需要服务器提供证书。

BUPT-mobile可以选择TTLS或者PEAP方法,再结合学生的上网账号密码连接。这种认证方式使用PKI机制来确保验证过程的安全性(服务器发来一个证书,客户端用证书中包含的公钥与服务器建立通信),非常类似于浏览网页时建立TLS连接时的那样。

但是如何确保服务器发来的证书的真实性?这里有两个选择,一是向CA购买证书,另一种则是自建PKI系统,自己当CA,自己给自己发证书。

(像百邮这样"top secret"的,当然是选择后者啦23333)

因此,在ios设备上首次连接BUPT-mobile后,会弹出一个这样的:

image-20210317145134096

由于是采用自建的PKI系统,所以签发这个证书的CA证书是没有被预装在我们设备里面的,因此这里提示的是这个证书不可信

Android上没有这样的提示,因此一直以来,我们在连接的时候都必须要选择 不验证 服务器发来的证书:

image-20210317142829088

CA证书

在Android11之后,虽然没有了这个不验证的选项,我们还是有办法连接校园WiFi的。

思路也很简单,既然不信任学校的CA签发的证书,那我们把CA的证书安装到手机里,信任了CA证书,那么它签发的证书也就能够被信任了。

用wireshark抓取证书

前面提到EAP是二层协议,我们在建立WiFi连接的时候进行抓取:

image-20210317150539106

可以看到上面编号为7的包里面有AP发来的证书:

image-20210317150815374

解开发现包含了两个证书,我们右键将其保存下来(后缀名为.cer):image-20210317150918046

这两个证书一个身份是BUPT Local Server Certificate一个是BUPT Local Certificate Authority。前者由后者所颁发,而后者是一个自签名的证书。从名字来看,相信后者应该就是BUPT自制的CA证书了。

安装证书

将CA证书(后者)传到手机上,在文件管理器中点击打开,会弹出一个证书安装程序:

image-20210317151645163

选择凭据用途为WLAN,然后给它起个名点击确认安装。

在WiFi连接时:EAP方法选择TTLS或者PEAP,CA证书选择刚刚我们安装的那个证书,域名留空(如果必须要填域名的话,域名那里填BUPT Local Server Certificate,即颁发的证书里的CN字段的值),身份和密码分别填写上网账号密码便可连接上了:

image-20210317151810275

image-20210317152000936

最后将证书文件放在这里:

文件的md5sum:

3784d3f46879644a0d1343208f381005  cer1.cer
4b60d9eaa8eaf05f784391d9e83a1f34  cer2.cer

最后,由于在设备上随意安装未知来源的CA证书是一件很危险的事情,使用上面的证书文件的同时,也意味着您已经了解并明白潜在的风险,本人不承担由此导致的任何责任。

refer