一、基础配置阶段(图形界面或 nmcli)
第一步:确认最基本的 802.1X 参数
在连接 HRBUST-Student-Auto 时,核心配置项如下:
- 安全类型:选择 WPA2 企业(或“WPA & WPA2 企业”)
- EAP 类型(认证方式):选择 PEAP(Protected EAP)
- PEAP 版本:设为 自动
- 内部二阶段认证:选择 MSCHAPv2
- 用户名:学号;密码:校园网密码
第二步:用 nmcli 命令重建连接(比图形界面更可控)
如果图形界面配不好,建议用命令行直接创建连接:
# 删除旧的错误配置
sudo nmcli con delete "HRBUST-Student-Auto"
# 重新创建(PEAP + MSCHAPv2,加上域名匹配)
sudo nmcli con add type wifi con-name "HRBUST-Student-Auto" ssid "HRBUST-Student-Auto" \
wifi-sec.key-mgmt wpa-eap \
802-1x.eap peap \
802-1x.phase2-auth mschapv2 \
802-1x.identity "你的学号" \
802-1x.password "你的密码" \
802-1x.domain-suffix-match "smp.ruijie.com.cn"
# 连接
sudo nmcli con up "HRBUST-Student-Auto"
这里要说明:学校文档里提到 Android 端需要填写域名 smp.ruijie.com.cn,对应 Linux 上就是 802-1x.domain-suffix-match,且连接不校验证书(留空即可)。
第三步:如果连不上,先做诊断而不是盲目改参数
写一个一键诊断脚本,采集关键信息:
#!/bin/bash
echo "=== 无线网卡状态 ==="
nmcli radio wifi
nmcli device status
echo "=== 搜索到的HRBUST信号/当前连接 ==="
nmcli -f IN-USE,SSID,SIGNAL,SECURITY dev wifi list | grep -iE "IN-USE|hrbust|auto"
echo "=== NetworkManager 与 wpa_supplicant 最近日志 ==="
journalctl -u NetworkManager -u wpa_supplicant -n 40 --no-pager
echo "=== 内核无线驱动日志 ==="
dmesg | grep -iE "wifi|wlan|wireless|802\.11" | tail -30
echo "=== wpa_supplicant 配置文件(密码已隐去) ==="
if [ -f /etc/wpa_supplicant/wpa_supplicant.conf ]; then
grep -E "ssid|key_mgmt|eap|phase2|identity|network" /etc/wpa_supplicant/wpa_supplicant.conf | sed 's/password=.*/password=***隐去***/'
else
echo "(未找到 /etc/wpa_supplicant/wpa_supplicant.conf)"
fi
echo "=== NetworkManager 连接配置里的 802.1X 参数 ==="
for f in /etc/NetworkManager/system-connections/*; do
[ -f "$f" ] || continue
echo "--- $f ---"
grep -iE "ssid|key-mgmt|eap|phase2|identity|password|ca-cert" "$f" 2>/dev/null | sed -E 's/password(-raw)?=.*/\1=***隐去***/'
done
echo "=== 当前IP/路由 ==="
ip addr show | grep -E "wlan|wifi|wl"
ip route
echo "=== 诊断结束 ==="
诊断输出的对照表:
| 日志关键字 | 说明问题出在哪 |
EAP ... Authentication failed | 认证层:用户名/密码/PEAP/MSCHAPv2 参数错 |
4-Way Handshake completed | 认证已通过,问题在 IP/DHCP |
no network with matching security | 安全/加密类型没配对 |
association failed / deauth | 射频/关联层问题 |
| 没有 inet 地址 | 认证过了但没拿到 IP,需手动 sudo dhclient wlan0 |
二、深层排障阶段(核心干货)
常见误区一:反复要密码 ≠ 密码错误
如果 nmcli con up 后提示“Passwords or encryption keys are required”,或者 journalctl 里有 no secrets 或 Secrets were required, but not provided,不代表密码错了。这通常是凭据没有被正确传递(比如没带 --ask,或 keyring 没挂上)。用 --ask 方式连接即可交互输入:
sudo nmcli con up "HRBUST-Student-Auto" --ask
常见误区二:关联后立刻断开 ≠ 驱动或射频问题
如果日志显示 associated -> disconnected(关联后 2-3 秒必断),并且 reason=3 (DEAUTH_LEAVING),看起来像射频/驱动问题,但其实很可能是更深层的认证协商失败。不要急着改 PMF、关省电、换信道。
真正的核心关键:OpenSSL 3 与校园网老 TLS 的兼容性
在 Ubuntu 26.04 等新系统上,最隐蔽也最常见的坑是 OpenSSL 3 默认禁用了老版本 TLS 所需算法。日志里可能出现:
TLS: Unsupported Phase2 EAP method 'MSCHAPv2'
SSL: SSL3 alert: write... fatal: protocol version
OpenSSL: openssl_handshake - SSL_connect error:0A000102:SSL routines::unsupported protocol
这个报错的含义是:校园网锐捷认证服务器只支持很老的 TLS 协议(TLSv1.0/1.1),而系统 OpenSSL 3 默认安全级别拒绝这些旧握手。
排查步骤(按顺序):
第 1 步:确认 OpenSSL 是否缺少 legacy 提供商
openssl list -providers
如果只显示 default 而没有 legacy,说明 legacy 提供商未启用。检查 /etc/ssl/openssl.cnf:
grep -n -A5 -i "provider" /etc/ssl/openssl.cnf
正常启用时应看到:
[provider_sect]
default = default_sect
legacy = legacy_sect
如果 [legacy_sect] 不存在或未激活,补上:
[provider_sect]
default = default_sect
legacy = legacy_sect
[default_sect]
activate = 1
[legacy_sect]
activate = 1
改完验证:
openssl list -providers
这时应该能看到 legacy 已激活。
第 2 步:确认 wpa_supplicant 进程真的读到了这份配置
即使全局 openssl.cnf 改好了,wpa_supplicant 进程未必会加载它。
# 确认 wpa_supplicant 由哪个服务托管
ps aux | grep wpa_supplicant
systemctl status wpa_supplicant
如果是 NetworkManager 通过 systemd 服务托管的(-u -s 参数),需要给该服务注入环境变量:
sudo mkdir -p /etc/systemd/system/wpa_supplicant.service.d
sudo tee /etc/systemd/system/wpa_supplicant.service.d/openssl.conf > /dev/null <<'EOF'
[Service]
Environment="OPENSSL_CONF=/etc/ssl/openssl.cnf"
EOF
sudo systemctl daemon-reload
sudo systemctl restart wpa_supplicant
验证环境变量已生效:
cat /proc/$(pgrep -f wpa_supplicant | head -1)/environ | tr '\0' '\n' | grep OPENSSL
预期输出:OPENSSL_CONF=/etc/ssl/openssl.cnf
第 3 步:如果 legacy 生效后仍报 TLS 协议版本错误,降低安全级别
如果日志变成:
SSL: SSL3 alert: write... fatal: protocol version
OpenSSL: openssl_handshake - SSL_connect error:0A000102:SSL routines::unsupported protocol
说明 TLS 1.0/1.1 被 OpenSSL 3 默认安全级别禁用了。解法是给连接设置 openssl-ciphers:
nmcli connection modify "HRBUST-Student-Auto" 802-1x.openssl-ciphers "ALL:@SECLEVEL=0"
nmcli connection down "HRBUST-Student-Auto"
nmcli connection up "HRBUST-Student-Auto"
ALL:@SECLEVEL=0 会将 OpenSSL 安全级别降到 0,从而放行老版本 TLS。
三、成功标志与最终验证
成功连接的日志特征(关键):
CTRL-EVENT-EAP-PROPOSED-METHOD method=25
CTRL-EVENT-EAP-METHOD EAP vendor 0 method 25 (PEAP) selected # PEAP隧道建立
CTRL-EVENT-EAP-PEER-CERT ... CN=smp.ruijie.com.cn # 获得服务器证书
EAP-MSCHAPV2: Authentication succeeded # 账号密码验证通过
CTRL-EVENT-EAP-SUCCESS EAP authentication completed successfully # EAP认证成功
WPA: Key negotiation completed [PTK=CCMP GTK=CCMP] # 密钥协商完成
CTRL-EVENT-CONNECTED - Connection to 0a:74:9c:47:88:77 completed # WiFi连接完成
最终验证:
# 确认连接状态和IP
nmcli connection show "HRBUST-Student-Auto" | grep -iE "800-1x.openssl-ciphers|IP4.ADDRESS|GENERAL.STATE"
# 确认网络连通性
ping -c 3 www.baidu.com
四、给新生的最终总结
| 项目 | 内容 |
| 基础配置 | WPA2企业 + PEAP + MSCHAPv2 + 学号/密码 |
| 域名匹配 | smp.ruijie.com.cn(可选,但建议加上) |
| 证书校验 | 不校验证书(ca-cert 留空) |
| 最大坑 | OpenSSL 3 默认禁用的 legacy 提供商/老 TLS |
| 最终解法 | 启用 legacy provider + 设置 802-1x.openssl-ciphers "ALL:@SECLEVEL=0" |
| 持久性 | 修改后永久生效,重启不丢 |
简而言之,如果你把常规参数都设对了还是连不上,重点排查 OpenSSL 的 legacy provider 和 TLS 安全级别,这两步是本次排障过程中反复验证后唯一真正解决问题的关键。