主题
BUPT-mobile
BUPT-mobile 是校内两个最常用的无线接入点之一。
概况
- BUPT-mobile 仅支持 5GHz 频段,牺牲小部分旧设备的兼容性,换来更稳定的网络连接。
- BUPT-mobile 在 WPA2 的基础上使用 EAP 身份认证框架,因而支持 WPA*-PSK 方式所不支持的账号密码登录。其中账号为学/工号,密码为校园网网关密码。
技术细节:名词解释
AP: "Access Point", 无线接入点,也就是 Wifi 信号发射装置。
TLS: "Transport Layer Security",传输层安全协议。
WPA2: "Wi-Fi Protected Access II", 第二代 Wi-Fi 数据加密和身份认证协议。
EAP: "Extensible Authentication Protocol", 可拓展身份认证协议。WPA2-EAP 代表 BUPT-mobile 使用 EAP 方法完成身份认证。
PEAP: "Protected EAP", 在认证服务器和客户端之间建立 TLS 加密信道,加密传输 EAP 身份信息。
MSCHAPv2: "Microsoft Challenge Handshake Authentication Protocol version 2", 最常用的 EAP 实现,由微软开发。
技术细节:WPA2-EAP 连接的大致过程
连接 BUPT-mobile 的全过程大致如下:
- 客户端与 AP 建立无线连接。
- AP 向客户端发出 EAP 请求,客户端返回一个 Response, 其中含有“匿名身份” (Anonymous Identity), 这个身份仅在非加密信道上使用。
- AP 将这个身份转发给校园网认证服务器。
- 认证服务器向客户端请求建立 TLS 连接。
- 客户端向服务端发起 TLS 握手。客户端可以选择在这一步验证服务器的 TLS 证书是否有效。
- 认证服务器向客户端请求完整的账号和密码,用于身份验证。
- 客户端用 TLS 加密信道发送账号密码。
- 服务器验证账号密码是否正确。
- 服务器向 AP 和客户端下发加密密钥,AP 与客户端之间的加密连接就此建立。(这其实是一个非常复杂的密码学过程,最后的结果是 AP 和客户端生成了相同的对称密钥,用于加密二层网络帧。这也是为什么 BUPT-mobile 无法进行无线抓包,因为二层加密阻止了周围设备直接获取明文网络帧。)
为什么采用 5GHz 单频?
冷知识:Wi-Fi 的 5Ghz 不是手机的 5G。
BUPT-mobile 采用 5GHz 单频段是为了解决 BUPT-portal 跳频的问题。客户端连接 BUPT-portal 时,会采用优先连接 5GHz 的策略,只有检测到 5GHz 信号不佳才会切换到 2.4GHz, 正是这个切换频段的过程导致网络不稳定。而大部分区域内,BUPT-mobile 的 SSID 仅在 5GHz 频段中广播,避免了 portal 下频段切换导致网络不稳定的问题。
同时,从技术标准上看,5GHz WLAN 还能提供更快的连接速度,但为保证大部分人都能分配到合理带宽,校园网采取了限速策略。
高级使用方式
TIP
与简易教程不同,这里默认你需要验证服务器证书,配置过程相对更复杂。如果你从简易教程来到这里,请做好心理准备。
BUPT-mobile 可以配置多种安全策略,不同操作系统的配置方式也各不相同:
- Windows: 只需填写身份与密码即可连接。
- MacOS: 只需填写身份与密码即可连接。
- Linux: 只需填写身份与密码即可连接。但不同的是,此种情况下 wpa_supplicant 不验证服务器有效性。你也可以安装 CA 证书用于验证服务器。
- Android 视厂商安全策略而定,可以仅填写身份与密码,并不验证服务器证书/首次使用时信任证书,或是安装 CA 证书用于验证服务器。
- iOS: 只需填写身份与密码即可连接。
无论何种配置方式,填写的选项都类似。这里列出多种可能的选项,供参考。
选项名称 | 参考值 |
---|---|
加密方式 | WPA2-Enterprise 或 WPA2-EAP |
身份认证(即 EAP 方法 + 阶段2身份验证) | PEAP-MSCHAPv2 |
EAP 方法 | PEAP |
阶段2身份验证 | MSCHAPv2 |
匿名身份 | (无需填写) |
身份 | 你的学工号 |
密码 | 你的校园网密码(密码是什么?) |
域名 | BUPT Local Server Certificate |
CA 证书 | 按照下文提示操作 |
技术细节:为什么要验证证书?
在 PEAP 认证过程中,账号密码通过 TLS 加密传输至身份认证服务器。但如果有不怀好意者在学校周围部署一个伪造的"BUPT-mobile", 而你又不验证其根证书,那么你的校园网账号密码很可能会被发送到伪造的身份服务器上,不法分子便窃取了你的校园网账户。
这种攻击的本质是 TLS 中间人,验证服务器证书可以有效避免此类攻击,减少校园网安全隐患。
Windows
这里只提供简要教程。
- 在状态栏找到无线局域网标志,打开网络列表选择 "BUPT-mobile";
- 分别输入学号和你的校园网密码;
- 提示证书信息时点击确认。
- 此刻应已完成接入。如果失败,请检查账号密码。
Windows 将在首次连接时信任服务器证书。
Android
Android 手机可以使用以下两种安全连接方式。
首次使用时信任
请确保“证书”或“CA证书”选项可以选择“首次使用时信任”。
设置长什么样?
示例图为 Android 14 类原生系统 UI 的设置界面。
选择后,按照提示输入账号密码即可。
开始连接时,系统会提示你确认证书有效性,点击“是”即可。
完整安装根证书
- 通过浏览器打开链接,下载根证书。这里不推荐使用腾讯QQ/微信自带的下载功能,因为你无法通过系统文件浏览器浏览证书文件并安装。
- 转到“证书”界面,安装证书。请注意区分 CA 证书,VPN 证书和 WLAN 证书三个选项:选择“WLAN 证书”,则安装的证书只会被用于 WLAN 身份验证过程,这也是推荐的行为。安装中请为这个证书填写一个名字。在笔者的手机系统上,名字如何填写不影响后续使用该证书。比如,你可以填写一个"BUPT Local Certificate Authority".
这个设置在哪里?
以笔者的 MiUI 设备为例,搜索“证书”,下图中第二个选项即为安装证书界面。
请注意,如果出现了类似下图的界面,说明你正在试图安装CA证书,这是错误的:
- 在 WLAN 界面找到 BUPT-mobile, 点击连接,然后点击“高级选项”。
- 填写身份信息。
- CA 证书选择刚才安装的 BUPT Local Certificate Authority.
- 如果需要填写域名,则填写 "BUPT Local Server Certificate".
- 账号/用户名填写学号,密码则使用你的校园网密码。换言之,你在portal登陆中填什么,在这里也填一样的。
- 随后,点击保存即可。
至此,你应该已经可以安全连接到 BUPT-mobile, 尽情享用吧。
技术细节:域名一栏到底该填写什么?
如果你阅读了上面的 PEAP 原理,那么你应该记得,PEAP 认证过程中,终端设备将会与身份验证服务器建立一个 TLS 连接,在安全信道中传输身份信息(也就是你的校园网账号密码)。TLS 握手的必要环节是验证服务器身份,服务器会将其 X.509 证书发送到客户端,然后客户端使用 CA(根证书)验证其有效性。
在 BUPT-mobile 的 PEAP 过程中,服务器证书的 commonName 即为 "BUPT Local Server Certificate", 我们使用自行安装的 BUPT Local Certificate Authority 验证其有效性。所以,这里的域名,事实上就是服务器证书的 commonName 字段,此处使用的 commonName 并非常见的 "www.bupt.edu.cn" 这种形式。不过这也无伤大雅,只要填写的域名与服务器证书的 commonName 匹配即可。
iOS
- 在 WIFI 列表中搜索到 BUPT-mobile;
- 输入你的用户名和密码;
- 点击确认证书信息是否正确。
- 连接成功.
iOS 将在首次连接时信任服务器证书。
MacOS
- 打开系统设置,找到Wi-Fi界面。
- 在列表中找到 BUPT-mobile,点击连接。
- 输入身份和密码,也就是学号和校园网密码。
- 点击连接。
- 系统会提示你验证证书。
- 完成连接。
MacOS 将在首次连接时信任服务器证书。
带截图的详细步骤
感谢 fa_555 提供的截图示例
Linux
如果你正在使用 Linux, 那么笔者将默认你拥有一定的技术基础,并且能够自行查阅文档解决问题。
以下是笔者尝试过的几种可行方式:
- 使用桌面环境(如 GNOME 或 KDE Plasma)提供的 NetworkManager 图形化配置工具。
- 使用 NetworkManager 的终端用户界面工具
nmtui
, 或者命令行工具nmcli
。(已知 NetworkManager 最早在 1.40 版本对nmtui
加入 802.1X 支持,如果发行版的打包版本过旧,请使用nmcli
, 或者更换其它手段。) - 为 wpa_supplicant 手写相关配置完成无线认证,再使用另外的 DHCP 客户端或者 systemd-networkd 完成 DHCP。这种方式在笔者的 Arch Linux 台式机上经验证能够使用。对于使用
ifupdown
作为网络管理套件的发行版(比如 Debian),这一方法理论上也完全可行,但笔者时间精力有限,无法另外研究认证方式,有兴趣的同学可以自行研究。 - 使用
netplan.io
. 这是 Ubuntu 的默认网络管理套件,同样提供连接 WPA2-EAP 无线网络的功能,但是笔者在朋友的机器上尝试配置时失败了,无奈只得回退到方案2。
WARNING
本教程中的示例代码仅供参考,请在基本理解构成和作用后再挪用。使用时请将 CAPATH, IFNAME, IDENTITY 和 PASSWORD 分别替换为根证书路径,网卡名称,学工号和密码。
使用桌面环境自带的 NetworkManager 图形化前端的配置方式
Linux 桌面环境的两大巨头 Gnome 和 KDE Plasma 均提供 NetworkManager (也就是大部分带桌面环境安装下的默认网络管理器)的图形化前端。
搜索网络并尝试连接 BUPT-mobile, 系统会提示填写网络详情。
转到 Wi-Fi Security 页面,按照指示填写相关信息。
此处完整验证服务器证书并非必须,如果需要,请先下载根证书,并移动到一个你喜欢的位置(比如 /etc/ssl/private/
或 ~/.local/
)。
使用 NetworkManager 配套的终端用户界面 nmtui
工具
类似 GUI 配置,这里不再赘述。
使用 NetworkManager 配套的命令行 nmcli
工具
再次提醒
本教程中的示例代码仅供参考,请在基本理解构成和作用后再挪用。使用时请将 CAPATH, IFNAME, IDENTITY 和 PASSWORD 分别替换为根证书路径,网卡名称,学工号和密码。
bash
nmcli con add type wifi con-name "BUPT-mobile" ifname "IFNAME" ssid "BUPT-mobile" # 添加一个新连接 BUPT-mobile
nmcli con modify "BUPT-mobile" 802-1x.eap peap 802-1x.phase2-auth mschapv2 802-1x.identity "IDENTITY" 802-1x.password "PASSWORD"
nmcli con modify "BUPT-mobile" wifi-sec.key-mgmt wpa-eap
nmcli con modify "BUPT-mobile" 802-1x.ca-cert "CAPATH" # 可选,请下载根证书到对应位置。
连接已经配置完成。使用 nmcli con activate BUPT-mobile
启动该连接。
使用 wpa_supplicant 和 systemd-networkd 的示例配置
再次提醒
本教程中的示例代码和配置文件内容仅供参考,请在基本理解构成和作用后再挪用。使用时请将 CAPATH, IFNAME, IDENTITY 和 PASSWORD 分别替换为根证书路径,网卡名称,学工号和密码。
配置过程和示例配置文件如下所示。请先下载根证书到一个你喜欢的位置(比如 /etc/ssh/private/
或 ~/.local/
)。
在 /etc/wpa_supplicant 下创建一个文件 wpa_supplicant-IFNAME.conf:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
# 此处为 Debian man-pages 的示例,请查阅你使用的发行版中 wpa_supplicant.conf 的 man-pages, 以确定 ctrl_interface 的具体配置
network={
ssid="BUPT-mobile"
scan_ssid=1
key_mgmt=WPA-EAP
eap=PEAP
identity="IDENTITY"
password="PASSWORD"
ca_cert="CAPATH" # 根证书的绝对路径,请自行修改
phase1="peaplabel=0"
phase2="auth=MSCHAPV2"
}
随后执行 sudo systemctl enable wpa_supplicant@IFNAME.service
. 如果不出意外,你可以在 sudo journalctl -xeu wpa_supplicant@IFNAME
中看到认证成功的信息。
再然后,使用 systemd-networkd
完成网络DHCP. 创建/etc/systemd/network/01-BUPT.network
:
properties
[Match]
Name=IFNAME
[Network]
DHCP=yes
IPv6AcceptRA=yes
然后重载 systemd-networkd 配置 (sudo networkctl reload
)。至此,连接应该已经配置完成。