2020/02/02

FreeRADIUS安裝測試(續)

摘要

本文概要敘述令FreeRADIUS作為有線網路的authentication server的步驟,其中,選用的認證方法為TLS


本文

TLS(Transport Layer Security)協定主要提供兩支或更多支計算機程式通訊時的私密性(privacy)與資料完整性(data integrity)。
EAP(Extensible Authentication Protocol)是一個經常在網路和網際網路連線上使用的認證框架。EAP認證框架提供了讓多種EAP方法(methods)所產生的材料與參數的傳輸與處理;換言之,EAP只是一個認證框架、而非特定的認證機制(mechanism),它提供了認證方法(methods)所共用的函式與協商。EAP認證方法有很多種,例如EAP-MD5、EAP-TLS等。
IEEE 802.1X定義了在IEEE 802上運行EAP的封裝形式,也就是所謂的LAN上的EAP(EAP over LAN)或EAPOL。
IEEE 802.1X認證涉及了supplicant、authenticator、和authentication server等三個角色。
本文隨後將會在運行於VMware Workstation 15 Player上的Ubuntu 18.04虛擬機器安裝FreeRADIUS、以作為authentication server,並在同一台的Ubuntu 18.04虛擬機器安裝hostapd、以作為authenticator,然後,在另一台Ubuntu MATE 16.04虛擬機器操作內建的wpa_supplicant、以作為supplicant。
FreeRADIUS的安裝可以參考這裡,hostapd的安裝可以參考這裡。FreeRADIUS、hostapd、和wpa_supplicant等程式的版本資訊如下。
FreeRADIUS的版本資訊
hostapd的版本資訊
wpa_supplicant的版本資訊


TLS前置作業分述如下,主要的說明請參考這裡
1. 複製FreeRADIUS的範本與腳本。
cp -R /usr/share/doc/freeradius/examples/certs/ ./
cd ./certs

2. 修改ca.cnf範本、並執行腳本,以建構專屬的CA(certificate authority)的憑證和金鑰。
nano ca.cnf
make ca.pem
make ca.der

3. 修改server.cnf範本、並執行腳本,以專屬CA建構server憑證和金鑰。
nano server.cnf
make server.pem

4. 修改client.cnf範本、並執行腳本,以專屬CA建構client憑證和金鑰。
nano client.cnf
make client.pem

5. 直接產生FreeRADIUS執行時所需的Diffie-Hellman檔案。
make dh

範本修改畫面截圖如下。
修改ca.cnf
修改server.cnf
修改client.cnf

本文隨後的測試環境架設如下。
環境架設

其中,FreeRADIUS的執行方式如下:
sudo systemctl start freeradius.service
還有,hostapd的執行方式如下:
sudo hostapd -dd ./wired.conf
最後,wpa_supplicant的執行方式如下:
sudo wpa_supplicant -ddd -Dwired -ienp0s16 -c./wired.conf

基於TLS方法的相關測試畫面截圖如下。
FreeRADIUS的組態設定,包含放行特定網段的用戶端程式存取、建立一個使用者、指定認證方法為TLS、以及指定server金鑰/server憑證
hostapd的組態設定,包含了運行介面、自身位址、以及authentication server的位址與密碼
wpa_supplicant的組態設定,包含了指定IEEE8021X管理形式、指定認證方法為TLS、CA憑證、client憑證、client金鑰、和client金鑰密碼
於宿主機上以Wireshark觀察往返於虛擬機之NAT卡的EAPOL封包
留意,在這個成功的EAP-TLS範例中,是由supplicant發起EAPOL Start;接著,由authenticator發送Identity要求、而supplicant給予Identity回應;再接著,由authenticator發出型態為EAP-TLS(亦即指明使用TLS方法)且Start旗標為1的要求、而supplicant發出了TLS的Client Hello的回應;隨後authenticator發出TLS的Server Hello(含Certificate與Certificate Request)的要求,但因為Server Hello的尺寸超出一個Ethernet能夠承載的最大尺寸,所以將會切割為好幾段、並填充進要求封包裡,這時候的supplicant收到片段的要求就給予簡單的回應作為延續;當authenticator的Server Hello發送完畢後,將由supplicant因應Certificate Request、而回應Certificate暨Certificate Verify,同樣的因為Certificate暨Certificate Verify超出一個Ethernet能夠承載的最大尺寸,所以將會切割為好幾段、並填充進回應封包裡,這時候的authenticator收到片段的要求就給予簡單的要求作為延續;當supplicant的Certificate暨Certificate Verify發送完畢後,authenticator就可以檢查其內容來判別認證失敗或成功、並在成功時發送Success。


備註

a. 這裡FreeRADIUS的eap組態設定中的ca_file欄位是強制地僅僅使用專屬CA的憑證,而不是將專屬CA的憑證附加至系統既有的憑證鏈(chain)裡面;另外,eap組態設定中dh_file欄位需指定Diffie-Hellman檔案的路徑。
b. 這裡hostapd所使用的組態設定,其參考來源為專案原始碼(即hostapd-2.6.tar.gz)中hostapd目錄裡面的wired.conf檔案,再因應FreeRADIUS設定來進行改動。
c. 這裡wpa_supplicant的TLS組態設定必須在private_key_passwd欄位指明存取金鑰的密碼;若是想要略過金鑰的密碼,則可以改用「openssl req -nodes -new -out client.csr -keyout client.key -config ./client.cnf」來建立金鑰。


參考文獻

https://en.wikipedia.org/wiki/Transport_Layer_Security
https://en.wikipedia.org/wiki/Extensible_Authentication_Protocol
https://en.wikipedia.org/wiki/IEEE_802.1X
https://go-linux.blogspot.com/2019/05/ubuntu-1804-server-freeradius-server.html
http://nitlab.inf.uth.gr/mazi-guides/hostapd.html
https://mrncciew.com/2014/08/26/cwsp-eap-tls/
http://blog.chunnorris.cc/2013/12/freeradius-8021x-eap-tls.html
https://www.ossramblings.com/RADIUS-3.X-Server-on-Ubuntu-14.04-for-WIFI-Auth
https://w1.fi/releases/hostapd-2.6.tar.gz
https://blog.csdn.net/yygydjkthh/article/details/23231265


沒有留言:

張貼留言