Openssl
如何為 EAP-TLS Wi-Fi 生成證書?
我想將 Linux 機器連接到 WPA2 Enterprise Wi-Fi(由我管理)。我使用 OpenSSL 創建的證書適用於 Android 和 iOS 設備,但我無法弄清楚 wpa_supplicant 需要哪些類型的證書。
基本上,我有一個 ca.pem,對於給定的設備,正在生成以下文件:
- 展示.crt
- 展示.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="demo@example.com" 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
並使用 onlyprivate_key
,指向 .pem 文件,錯誤仍然相同。如果我將它指向 .p12,則錯誤是:
OpenSSL:tls_connection_private_key - 無法載入私鑰錯誤:00000000:lib(0):func(0):reason(0)
Debian 的文件告訴我們應該從 .pfx 創建 PEM。當我這樣做時:
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 生成證書?
在您的
wpa_supplicant.conf
文件中,它應該是eap=TTLS
如:
network={ ssid="HelloWorld" key_mgmt=WPA-EAP pairwise=CCMP group=CCMP eap=TTLS identity="demo@example.com" 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="demo@example.com" 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" }