← Back to list

FreeRADIUS 設定 PEAP/EAP-GTC 與 EAP-TTLS/PAP 雙驗證機制

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

Sam Chen · 2025-04-05 16:00 · 0 claps · 5.8 min read
#freeradius
Open on Medium ↗

FreeRADIUS 設定 PEAP/EAP-GTC 與 EAP-TTLS/PAP 雙驗證機制

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

設定 TLS Tunnel 所使用的憑證

PEAPEAP-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