本篇說明如何在 FreeRADIUS 設定支援 PEAP/EAP-GTC 與 EAP-TTLS/PAP 雙驗證機制。
設定 TLS Tunnel 所使用的憑證
PEAP
與 EAP-TTLS
的 TLS Tunnel 機制是以憑證 (Certificate-base)
為基礎的方式進行驗證,而且只需要驗證 server side 即可,比起 EAP-TLS
需要 server / client side 雙向驗證要來的容易部署許多。
由於 EAP-TLS 的安全強度對於目前來說是最嚴謹的,而且 WPA3-Enterprise with 192 bit mode 只支援這一種 EAP-Type。
憑證簽署
憑證的使用上有很多細節需要注意,包含憑證資訊的正確性、是否有斷鏈情況以及新舊作業系統所支援的憑證階層相容性等。
而在 FreeRADIUS 上使用憑證還有以下的限制要注意:
- 不能使用萬用憑證 (Wildcard Certificate)。
- 支援 SNI 憑證,但是在 Windows 平台實測 EAP-TTLS 時,驗證的網域必須要放在 CN 欄位,不能只存在 DNS 欄位,否則驗證過程還是會要你確認憑證是否是可信任的、是否要繼續連線。
所以建議向外部 CA 憑證機構購買 伺服器憑證
進行簽署,並定期更新,也可以省去要在終端設備安裝 Root CA 的種種問題。
- 如果有辦法處理各種終端平台的 Onborading 機制,也可以使用 Private CA Server 進行自我簽署。
- 可以參考 eduroam wiki 所說明 EAP Server 使用憑證的注意事項 。
憑證合併順序
簽署完畢後,大多數的憑證機構會寄發 X.509 Base64-encoded
格式的檔案,可以將收到的 伺服器公鑰
, 中繼憑證
以及私鑰
都放在同一個檔案裡面,擺放的順序可以參考下面的格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| -----BEGIN RSA PRIVATE KEY----- ... (憑證私鑰) ... -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- ... (伺服器憑證公鑰) ... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ... (中繼憑證) ... -----END CERTIFICATE-----
|
儲存後記得調整檔案權限。
1 2 3
| $ chown root.radiusd /etc/raddb/certs/certificate-combine.pem
$ chmod 640 /etc/raddb/certs/certificate-combine.pem
|
套用憑證至 EAP 設定檔
所有與 EAP 相關的參數都放置在 /etc/raddb/mods-available/eap
中,設定憑證位置的參數位在 tls-config tls-common {...}
這個 section 內。
/etc/raddb/mods-available/eap1 2 3 4 5 6 7 8 9
| eap { ... tls-config tls-common { private_key_password = whatever private_key_file = ${certdir}/certificate-combine.pem certificate_file = ${certdir}/certificate-combine.pem
|
開啟 PEAP/EAP-GTC 及 EAP-TTLS/PAP 驗證方法
/etc/raddb/mods-available/eap1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| eap { default_eap_type = peap ... gtc { auth_type = Perl } ... ttls { tls = tls-common default_eap_type = pap copy_request_to_tunnel = yes use_tunneled_reply = no virtual_server = "inner-tunnel" }
...
peap { tls = tls-common default_eap_type = gtc copy_request_to_tunnel = yes use_tunneled_reply = no virtual_server = "inner-tunnel" } ... }
|
設定 Virtual Sites
FreeRADIUS 預設會啟動 default 及 inner-tunnel 這兩個 site,而且預設也支援 EAP method,剛好可以區隔 outer / inner,所以就直接使用。
default
/etc/raddb/site-available/default1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| server default { ... authorize { filter_username preprocess detail suffix eap { ok = return } files expiration logintime pap } authenticate { Auth-Type PAP { pap }
eap } ... }
|
inner-tunnel
/etc/raddb/site-available/inner-tunnel1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| server inner-tunnel { ... authorize { filter_username suffix update control { &Proxy-To-Realm := LOCAL } eap { ok = return } files pop3s expiration logintime pap } authenticate { Auth-Type Perl { perl } Auth-Type PAP { pap } Auth-Type MS-CHAP { mschap } mschap eap } ... }
|