Hostapd支持很多EAP方法,但是我自己测试了一轮下来,可以说只有PEAP的兼容性最好。
其他的那几个EAP方法,比如TTLS,兼容性实在太差,当然这也可能是Hostapd内置的EAP服务不完善导致的。
前段时间我配置过一个FreeRadius里面的EAP-TLS,那个还可以。实际上Hostapd可以和FreeRadius对接,只不过我觉得没啥必要折腾了,PEAP/MSCHAPV2足够安全了。
如果你要按照本文来配置EAP-PEAP/MSCHAPV2的话需要先做一做前置:
PEAP需要一个SSL证书,由于各种原因这里我用Let’s encrypt的话不太方便,就用自签证书解决了。
安装下面的软件包即可获得一个自签证书:
apt -y install ssl-cert
如果要重签证书:
make-ssl-cert generate-default-snakeoil --force-overwrite
证书和私钥的路径:
/etc/ssl/certs/ssl-cert-snakeoil.pem /etc/ssl/private/ssl-cert-snakeoil.key
接下来编辑Hostapd配置文件:
nano /etc/hostapd/hostapd.conf
修改如下配置:
wpa_key_mgmt=WPA-EAP
也可以改成如下内容,这样支持两种验证方法:
wpa_key_mgmt=WPA-PSK WPA-EAP
加入如下配置:
ieee8021x=1 eapol_version=2 eap_server=1 eap_user_file=/etc/hostapd/hostapd.eap_user server_cert=/etc/ssl/certs/ssl-cert-snakeoil.pem private_key=/etc/ssl/private/ssl-cert-snakeoil.key
然后新建一个存用户信息的配置文件:
nano /etc/hostapd/hostapd.eap_user
按照如下格式来配置,一行一个账号/密码:
* PEAP "imlala" MSCHAPV2 "password" [2] "lalala" MSCHAPV2 "password" [2]
其他的EAP方法配置可以参考:
https://w1.fi/cgit/hostap/plain/hostapd/hostapd.eap_user
最后重启Hostapd即可完成配置:
systemctl restart hostapd
iOS系统输入账号密码就能成功验证了,Android系统需要自己选择一下方法: