公司新换的Wi-Fi路由器启用了WPA3,结果销售部小张的旧安卓手机连不上,反复提示“认证失败”。IT同事查日志发现是密钥交换阶段超时——这其实不是设备坏了,而是网络认证协议里的密钥交换环节“没对上号”。
密钥交换不是“传密码”,是“一起算出暗号”
很多人误以为认证就是输个密码就完事。其实像WPA2/WPA3、802.1X(EAP-TLS)、甚至HTTPS背后的TLS握手,核心都包含一个密钥交换过程:客户端和服务器不直接传密钥,而是通过数学运算(比如Diffie-Hellman)各自生成一个共享密钥。这个过程一旦参数不匹配、证书过期、或时间不同步,连接就会卡在“正在认证…”不动。
常见卡点就这三类
1. 时间差太大
密钥交换依赖时间戳防重放攻击。如果客户端系统时间比服务器快/慢5分钟以上,很多EAP-TLS或RADIUS服务器会直接拒绝。试下用 ntpdate -q pool.ntp.org 看时间偏差,再用 sudo ntpdate -s pool.ntp.org 同步一下,常能立刻恢复。
2. 密码套件不兼容
老设备(比如Windows 7默认配置)不支持SHA-256签名或PFS(完美前向保密),而新服务器强制启用这些。抓包看TLS握手时,ClientHello里列出的cipher suites如果全被ServerHello拒绝,连接就会断在密钥交换前。临时解决可改服务器配置,例如OpenSSL服务端在 openssl.cnf 中补充:
MinProtocol = TLSv1.2
CipherString = DEFAULT@SECLEVEL=1(仅测试环境用,生产请评估风险)。3. 证书链断裂
EAP-TLS或PEAP-MSCHAPv2依赖证书信任链。内网自建CA签发的证书,如果客户端没装根证书,或中间证书没随服务器证书一起下发,密钥交换会因验证失败中止。用手机连同一网络,访问 https://test.example.com,如果浏览器报“证书不可信”,基本就是这个问题。检查服务器是否漏配 SSLCertificateChainFile 或Nginx的 ssl_trusted_certificate 指令。
快速自查口诀
连不上?先看日志里有没有这些关键词:
• “DH key too small” → 密钥长度不够,升级OpenSSL或调大DH参数;
• “no shared cipher” → 密码套件无交集;
• “certificate verify failed” → 证书信任链或域名不匹配;
• “EAP timeout” → 很可能是RADIUS服务器响应延迟,或NAS设备CPU过载。
别急着重启设备,盯住密钥交换那几毫秒,往往比刷十次固件更管用。