我想将 Linux 计算机连接到 WPA2 Enterprise Wi-Fi(由我管理)。我使用 OpenSSL 创建的证书适用于 Android 和 iOS 设备,但我无法弄清楚 wpa_supplicant 需要什么类型的证书。
基本上,我有一个 ca.pem,并且对于给定设备,会生成以下文件:
- 演示文件
- 演示.csr
- 演示密钥
- 演示.p12
看起来像wpa_supplicant 可以使用包含公共和私有证书的文件,也可以使用两个文件。最初,我使用两个文件:
- 演示密钥
- demo.pem,通过运行创建
openssl pkcs12 -in demo.p12 -out demo.pem -clcerts
。
wpa_supplicant.conf
配置如下:
network={
ssid="HelloWorld"
key_mgmt=WPA-EAP
pairwise=CCMP
group=CCMP
eap=TLS
identity="[email protected]"
ca_cert="/etc/ssl/private/ca.pem"
client_cert="/etc/ssl/private/demo.pem"
private_key="/etc/ssl/private/demo.key"
private_key_passwd=...
}
身份验证失败并出现以下错误:
OpenSSL:tls_read_pkcs12 - 无法使用 PKCS#12 文件错误:0D0680A8:asn1 编码例程:ASN1_CHECK_TLEN:错误标签
如果我删除client_cert
并仅使用private_key
,指向 .pem 文件,错误仍然相同。
如果我将其指向 .p12,错误是:
OpenSSL: tls_connection_private_key - 无法加载私钥错误:00000000:lib(0):func(0):reason(0)
Debian 的文档告诉我们PEM 应从 .pfx 创建。当我这样做时:
openssl pkcs12 -export -out demo.pfx -inkey demo.key -in demo.crt -certfile ca.crt
openssl pkcs12 -in demo.pfx -out demo.pem -clcerts
原来的错误又回来了:
OpenSSL:tls_read_pkcs12 - 无法使用 PKCS#12 文件错误:0D0680A8:asn1 编码例程:ASN1_CHECK_TLEN:错误标签
我究竟应该如何为 wpa_supplicant 生成证书?
答案1
在你的wpa_supplicant.conf
文件中,它应该是eap=TTLS
如:
network={
ssid="HelloWorld"
key_mgmt=WPA-EAP
pairwise=CCMP
group=CCMP
eap=TTLS
identity="[email protected]"
ca_cert="/etc/ssl/private/ca.pem"
client_cert="/etc/ssl/private/demo.pem"
private_key="/etc/ssl/private/demo.key"
private_key_passwd=...
}
此外,根据配置,您可能需要anonymous_identity
和phase2
。
假设是EAP-TTLS-MSChapv2:
network={
ssid="HelloWorld"
key_mgmt=WPA-EAP
pairwise=CCMP
group=CCMP
eap=TTLS
identity="[email protected]"
ca_cert="/etc/ssl/private/ca.pem"
client_cert="/etc/ssl/private/demo.pem"
private_key="/etc/ssl/private/demo.key"
private_key_passwd=...
phase2="auth=MSCHAPV2"
}