Openssl

如何為 EAP-TLS Wi-Fi 生成證書?

  • April 30, 2020

我想將 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並使用 only private_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_identityphase2.

假設它是 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"
}  

引用自:https://unix.stackexchange.com/questions/582333