Linux

使用兩級證書設置與 WPA2 Enterprise (PEAP/MSCHAPv2) 的連接

  • April 6, 2019

長期以來,我一直能夠使用 Debian 7 中配置的 NetworkManager + wpa_supplicant 連接到工作中的安全無線(這是 WPA2 Enterprise,具有 PE​​AP + MSCHAPv2 身份驗證)。

最近我想通過將伺服器的證書合併到我的網路管理器連接設置中來提高連接的安全性。我從網路管理員那裡收到了兩個 PEM 密鑰:

  • radius1.pem – RADIUS 證書
  • globalsign_intermediary.pem – 中間證書

RADIUS 證書的真實性取決於中介證書;並且中間證書取決於 GlobalSign 的最終根 CA。

這是我的目標:每當我連接到 wifi 網路時,我想讓我的筆記型電腦檢查 wifi 接入點的真實性。如何將這些證書放入連接設置(/etc/NetworkManager/system-connections/THE-AP-NAME文件)中,以便實現此目標?具體來說:應該在哪裡列出哪個文件(例如,什麼配置文件),以及需要哪些額外步驟來驗證伺服器證書?我在這裡問這個問題,因為我在其他地方發現的所有內容都是 1 步證書檢查,其中證書可能取決於完善的根 CA,而不是像我這樣的中間 CA。

目前這是我的連接設置文件的內容(XXXX 和 YYYY 表示隱藏資訊):

[ipv6]
method=ignore

[connection]
id=XXXXXXXXX
uuid=XXXXXXXXX
type=802-11-wireless
timestamp=1436377448

[802-11-wireless-security]
key-mgmt=wpa-eap

[802-11-wireless]
ssid=XXXXXXXXX
mode=infrastructure
seen-bssids=XXXXXXXXX
security=802-11-wireless-security

[802-1x]
eap=peap;
identity=XXXXXXXXX
password=YYYYYYYYY
ca-cert=/etc/NetworkManager/certs/work/globalsign_intermediary.pem
phase2-auth=mschapv2

[ipv4]
method=auto

如您所見,我使用的是中間證書文件。但這是不對的。僅使用 RADIUS 證書文件也不正確。在任何一種情況下,我都會收到以下錯誤syslog

Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-STARTED EAP authentication started
Jul  8 12:02:37 wirawan1 kernel: [3880972.051159] wlan0: Limiting TX power to 20 (20 - 0) dBm as advertised by xx:xx:xx:xx:xx
Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=25
Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: OpenSSL: tls_connection_ca_cert - Failed to load root certificates error:00000000:lib(0):func(0):reason(0)
Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-METHOD EAP vendor 0 method 25 (PEAP) selected
Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: TLS: Certificate verification failed, error 20 (unable to get local issuer certificate) depth 1 for '/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - G2'
Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-TLS-CERT-ERROR reason=1 depth=1 subject='/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - G2' err='unable to get local issuer certificate'
Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: SSL: SSL3 alert: write (local SSL3 detected an error):fatal:unknown CA
Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: OpenSSL: openssl_handshake - SSL_connect error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Jul  8 12:02:38 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-FAILURE EAP authentication failed
Jul  8 12:02:40 wirawan1 wpa_supplicant[3638]: wlan0: Authentication with xx:xx:xx:xx:xx timed out.

顯然無法建立信任鏈。

硬體是(lspci):

03:00.0 Network controller: Intel Corporation PRO/Wireless 5100 AGN [Shiloh] Network Connection

它使用 iwlwifi+iwldvm 驅動程序。核心版本3.12.9-1~bpo70+1 (2014-02-07),來自 debian backport 包linux-image-3.12-0.bpo.1-amd64

我對 Linux 並不陌生,但真的不知道如何處理 Linux 中的 x509 和/或 SSL/TLS 安全性,所以請按照分步說明進行回答。Google四處尋找這個問題的答案讓我很沮喪。WPA 請求者文件非常簡潔地討論了與 WPA2 Enterprise 結合使用的使用證書。而 NetworkManager 的文件更差。

我最終與組織的 IT 人員交談並輕鬆解決了這個問題。我的錯誤包括幾個失誤:

  • 包括錯誤的證書
  • 不包括正確的根證書
  • 沒有以正確的順序訂購證書

“CA 證書”文件需要是包含證書列表的單個文本文件(PEM 格式),按信任順序連結(最不信任在前,最受信任最後)。RADIUS 證書不需要包含(也不應該包含)。RADIUS 證書的有效期也最短。我們必須包含上游證書,直到根證書才能使這種方法起作用。就我而言,信任的順序是這樣的(從最不信任到最信任):

RADIUS cert -> intermediary cert -> root cert

警告:您的情況可能非常不同。IT 人員告訴我,我的根證書是“GlobalSign Root R1”,其序列號如下:

04:00:00:00:00:01:15:4b:5a:c3:94

如果沒有他的幫助,我將無法找到這個。我從 GlobalSign 網站下載了根證書(見下文),然後將二進制證書轉換為 PEM 格式:

$ openssl x509 -inform der -in Root-R1.crt -out Root-R1.pem

然後將證書連結為根

# cat globalsign_intermediary.pem Root-R1.pem > /etc/NetworkManager/certs/work/all-certs.pem

並在 NetworkManager 的連接設置中包含完整路徑all-certs.pem(通過 GUI 或編輯我在問題中列出的文本文件)。現在,重新啟動 NetworkManager——在我的 debian 機器中,這意味著發出:

# service networkmanager restart

重新啟動後,我能夠驗證 AP 的真實性,如 syslog 中所示:

Jul  8 16:03:32 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=25
Jul  8 16:03:32 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-METHOD EAP vendor 0 method 25 (PEAP) selected
Jul  8 16:03:32 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-PEER-CERT depth=2 subject='/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA'
Jul  8 16:03:32 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-PEER-CERT depth=1 subject='/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - G2'
Jul  8 16:03:32 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-PEER-CERT depth=0 subject='/C=US/XXXXXX (details removed)'
Jul  8 16:03:33 wirawan1 wpa_supplicant[3638]: EAP-MSCHAPV2: Authentication succeeded
Jul  8 16:03:33 wirawan1 wpa_supplicant[3638]: EAP-TLV: TLV Result - Success - EAP-TLV/Phase2 Completed
Jul  8 16:03:33 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-SUCCESS EAP authentication completed successfully

更多血腥細節

對於感興趣的人,中間證書具有以下主題:

subject= /C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - G2

這個“組織”CA 應該使用 R1 密鑰,如下所示:

https://support.globalsign.com/customer/portal/articles/1426602-globalsign-root-certificates

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