FreeRADIUS 設定 PEAP/EAP-GTC 與 EAP-TTLS/PAP 雙驗證機制
本篇說明如何在 FreeRADIUS 設定支援 PEAP/EAP-GTC 與 EAP-TTLS/PAP 雙驗證機制。
FreeRADIUS 設定 PEAP/EAP-GTC 與 EAP-TTLS/PAP 雙驗證機制

本篇說明如何在 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 格式的檔案,可以將收到的 伺服器公鑰, 中繼憑證以及 私鑰 都放在同一個檔案裡面,擺放的順序可以參考下面的格式
-----BEGIN RSA PRIVATE KEY-----
...
(憑證私鑰)
...
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
...
(伺服器憑證公鑰)
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
(中繼憑證)
...
-----END CERTIFICATE-----
儲存後記得調整檔案權限。
$ 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 內。
eap {
...
tls-config tls-common {
private_key_password = whatever
# 將憑證路徑設定在以下兩個參數內
# ${certdir} 變數指的是 /etc/raddb/certs
private_key_file = ${certdir}/certificate-combine.pem
certificate_file = ${certdir}/certificate-combine.pem
開啟 PEAP/EAP-GTC 及 EAP-TTLS/PAP 驗證方法
編輯 /etc/raddb/mods-available/eap
eap {
# 將預設值改成 peap
# default_eap_type = md5
default_eap_type = peap
...
gtc {
# 依據需求調整要使用的後端身份驗證機制
# 本範例使用 Perl 撰寫 POP3s 驗證,故將預設 Auth-Type 值改成 Perl,以進行 POP3s 驗證
# auth_type = PAP
auth_type = Perl
}
...
# 啟用 EAP-TTLS/PAP
ttls {
tls = tls-common
# 改成 pap
default_eap_type = pap
# 改成 yes,將 outer tunnel 的 Access-Request attribute 複製到 inner tunnel,以便進行政策判斷
copy_request_to_tunnel = yes
use_tunneled_reply = no
virtual_server = "inner-tunnel"
}
...
# 啟用 PEAP/EAP-GTC
peap {
tls = tls-common
# 改成 gtc
default_eap_type = gtc
# 改成 yes,將 outer tunnel 的 Access-Request attribute 複製到 inner tunnel,以便進行政策判斷
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/default
server default {
...
authorize {
filter_username
preprocess
detail
suffix
eap {
ok = return
}
files
expiration
logintime
pap
}
authenticate {
Auth-Type PAP {
pap
}
# 確認有啟用 eap
eap
}
...
}
inner-tunnel
編輯 /etc/raddb/site-available/inner-tunnel
server inner-tunnel {
...
authorize {
filter_username
suffix
update control {
&Proxy-To-Realm := LOCAL
}
eap {
ok = return
}
files
# 如果有額外設定 policy 可以在這邊設定
pop3s
expiration
logintime
pap
}
authenticate {
# 如果有需要用到 Perl 來開發相關身份驗證,可以在這邊設定
Auth-Type Perl {
perl
}
Auth-Type PAP {
pap
}
Auth-Type MS-CHAP {
mschap
}
mschap
eap
}
...
}
Originally published at https://blog.samhost.idv.tw on April 5, 2025.
메타데이터
- post_id
- c005ea36fcc7
- slug
- freeradius-eap-peap-ttls-c005ea36fcc7
- url
- https://medium.com/@silent198214/freeradius-eap-peap-ttls-c005ea36fcc7
- canonical_url
- https://medium.com/@silent198214/freeradius-eap-peap-ttls-c005ea36fcc7
- author_url
- https://medium.com/@silent198214
- status
- ok
- fetched_at
- 2026-07-28 08:20:09