摘要
本文概要敘述令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封包 |
備註
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_Securityhttps://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
沒有留言:
張貼留言