我必须连接到 WPA2 Enterprise 网络,该网络仅在我不验证证书时才有效。我不想这样做,因为这样任何人都可以看到 MSCHAPv2 消息。
解决此问题的第一步是查看 AP 提供的证书,然后将 wpa_supplicant 配置为仅信任该证书。但我不知道如何获得证书。 wpa_cli“status”命令不显示它,也不在任何日志中。
我也很好奇使用了哪些 SSL/TLS 密码套件。是否可以手动连接,也许使用 openssl s_client?
答案1
您可以使用 Wireshark 转储握手,然后使用 openssl 将二进制数据转换为 PEM,如 @grawity 在类似的问题在超级用户处:
遗憾的是,即使在调试模式下,wpa_supplicant 也没有转储证书的选项。 (如果我找到更好的方法,我会更新此内容。)不过,您仍然可以监视实际的 EAPOL 身份验证过程。首先,安装 Wireshark。
断开连接时,手动启动接口并开始捕获:
$ sudo ip link set wlan0 up $ wireshark -ki wlan0 &
启动 wpa_supplicant,很快您就会看到 TLS 握手:
服务器将在 ServerHello 之后立即发送其证书。选择第一个这样的数据包,然后深入研究:
802.1X └─Extensible Authentication Protocol └─Secure Sockets Layer └─Handshake Protocol: Certificatte └─Certificates
右键单击“证书 (东西)”并选择“导出选定的数据包字节”。Wireshark 会将其保存为二进制 DER 格式的文件。对所有其他证书重复此操作。最上面的证书(RADIUS 服务器的)包含您可以在 中配置的信息
altsubject_match
;最后一个 ( root CA) 应作为 提供给 wpa_supplicantca_cert
。现在您有一些二进制 DER 格式的文件
*.crt
。*.der
将它们转换为 PEM“文本”格式:openssl x509 -inform DER < mycert.der > mycert.pem
(如果您的 wpa_supplicant 使用 OpenSSL 作为 TLS 处理程序,您必须为其提供“根 CA”证书;给它服务器的证书将不起作用。
请注意,Wireshark 中看到的最后一个证书也可能不是根 CA,而只是由...发出您目录中的根 CA 之一
/etc/ssl/certs
...如果是这种情况,请务必进行设置altsubject_match
- 否则使用公共 CA 会不安全,因为不幸的是 802.1X 不知道要验证什么“主机名”,例如 HTTPS会。)
答案2
很容易做到这一点wpa请求者本身。无需 Wireshark。
- 断开
- 跑步
sudo wpa_cli
- 连接
- 找到最后一条看起来像
<3>CTRL-EVENT-EAP-PEER-CERT depth=0 subject='/C=CA/ST=Ontario/L=Ottawa/O=University of Ottawa/CN=roam2.uottawa.ca' cert=[...]
没有任何的巨线hash=
。 - 将十六进制格式的证书复制
cert=
到名为的新文件中eduroam.hex
如果您想对其进行转换以便于查看或与其他应用程序一起使用:
- 将其转换
.der
为xxd -r -p eduroam.hex eduroam.der
- 将其转换
.pem
为openssl x509 -inform der -in eduroam.der -outform pem -out eduroam.pem
- 查看它
openssl x509 -noout -text -in eduroam.pem