王潤園,葛 聲,荊 浩
(航空工業西安航空計算技術研究所,陜西 西安 710068)
隨著網絡的普及和智能設備的發展,人們應用網絡的場景越來越多,產生了許多復雜的大型局域網。為滿足局域網的大范圍統一遠程認證需求,遠程訪問撥入用戶服務(Remote Authentication Dial In User Service,RADIUS)應運而生。
基于RADIUS 的無線網絡接入認證系統采用數字證書進行接入認證,網絡管理者無須維護大批量用戶的賬號密碼,用戶僅妥當保存事先分發的密鑰文件即可。
RADIUS 是一種分布式、基于客戶端/服務器架構的信息交互協議,是應用最廣泛的認證、授權、計費(Authentication、Authorization、Accounting,AAA)協議。在電氣與電子工程師協會(Institute of Electrical and Electronics Engineers,IEEE)提出的無線網絡接入認證802.1X 標準中,采用的是RADIUS 協議進行認證[1]。
數字證書是一種權威性的電子文檔,提供一種在網絡上驗證身份的方式,標志著通信各方的身份信息。數字證書由電子商務認證中心所頒發,較為權威且公正[2]。
OpenSSL 是一個開源的軟件庫包,應用程序可以使用這個軟件庫包進行網絡認證和安全通信,并確認另一方的身份。OpenSSL的一個重要功能就是證書管理,實現基于X.509 標準的編解碼,支持對證書的管理,包括證書密鑰產生、請求產生、證書簽發、吊銷及驗證[3]。
當使用RADIUS 和數字證書方式進行無線網絡接入認證時,網絡管理人員需搭建的網絡拓撲如圖1所示,較為復雜且具有層次化。其中,第1 層為RADIUS認證服務器,負責進行RADIUS 服務器認證;第2 層為RADIUS 代理服務器,負責接入無線接入點,并轉發RADIUS 認證請求至RADIUS 認證服務器;第3 層為無線接入點層,包含若干個無線接入點,通過網口或者交換機與RADIUS 代理服務器相連;第4 層為客戶端層,通過發送無線網絡接入請求來接入無線網絡[4]。

圖1 基于RADIUS 的網絡接入認證系統的網絡拓撲
當客戶端發送無線網絡接入請求并使用證書作為接入認證憑據時,RADIUS 的認證過程如下。首先,客戶端發起接入無線網絡的請求,通過無線接入點進行捕獲,并將請求轉發至RADIUS 代理服務器;其次,RADIUS 代理服務器將客戶端接入請求轉發至RADIUS 認證服務器;再次,RADIUS 認證服務器會對請求中攜帶的證書進行認證,并將認證結果轉發至RADIUS 代理服務器;最后,RADIUS 代理服務器依據認證結果決定是否允許客戶端接入網絡[5]。
以FreeRADIUS 為例,配置RADIUS 認證服務需要在Linux 操作系統上安裝FreeRADIUS 開源軟件包,安裝完成后按照需求更改安裝目錄下的radius.conf 文件、client.conf 文件、proxy.conf 文件以及eap文件。
首先,在clients.conf 文件中配置該RADIUS 服務器可接入的所有無線接入點的熱點名稱、IP 及接入密碼。其次,在eap.conf 文件中配置對eap 的認證方式和相應的服務器證書信息。一般eap 的認證方式設置為tls,并配置OpenSSL 生成的服務器證書文件路徑,包括服務器私鑰文件密碼、服務器私鑰文件的位置、服務器證書的位置及CA 根證書的位置。再次,在radiusd.conf 文件中配置RADIUS 服務器中的各個關鍵文件的路徑縮寫信息和是否記錄日志等信息,用戶可以使用路徑縮寫配置其他文件。最后,在proxy.conf 文件中配置RADIUS 認證服務器網際互連協議(Internet Protocol,IP)和端口,或者下一層代理服務器的IP 和端口。
文件需要根據RADIUS 服務器的作用進行配置。如果該RADIUS 服務器的作用是認證RADIUS 請求,且沒有直接接入無線接入點,則需要配置eap.conf文件和proxy.conf 文件,保證其中不包含任何其他RADIUS 服務器的IP 和端口;如果該RADIUS 服務器的作用是認證RADIUS 請求,且直接接入無線接入點,則需要配置eap.conf 文件、proxy.conf 文件及client.conf文件;若該RADIUS 服務器是RADIUS 代理服務器,則需要配置clients.conf 文件和proxy.conf 文件。
使用數字證書進行網絡認證,需要OpenSSL 生成一個CA 中心證書,并使用該CA 中心證書生成多個用戶證書。其中一個證書作為RADIUS 認證服務器證書進行使用,其余證書可以作為客戶端證書分發給需要接入的客戶端。
首先,使用openssl 生成服務器證書,需要生成服務器證書私鑰指令(openssl genrsa -out server.key 2048)、創建服務器證書請求文件輸入一系列證書信息指 令(openssl req -new -out server.csr -key server.key)、生成服務器證書指令(openssl req -new -x509 -key server.key -out server.cer -days 3650)。其次,使用OpenSSL 生成至少一個客戶端證書,生成客戶端指令與生成服務器證書的指令一致。最后,使用校驗指令(openssl verify -CAfile root.crt server.crt)對客戶端/服務器證書與CA根證書校驗,返回“OK”即表示驗證成功。
在使用OpenSSL 完成這3 個步驟后,得到一個CA 證書及其私鑰、一個服務器證書及其配置文件和私鑰、若干個客戶端證書及其配置文件和私鑰,此時應依照說明將CA 證書及其私鑰、服務器證書及其私鑰放置于服務器的對應存儲位置。
在完成服務器端的網絡配置后,需要將客戶端證書及其私鑰放置到客戶端的相應存儲路徑。文章給出一種在Linux 操作系統上進行無線網絡接入驗證的方法,使用wpa_supplicant 工具在Linux 客戶端上發送無線網絡接入請求,并使用數字證書進行無線網絡接入認證。
在Linux 客戶端上以文本文件形式編寫配置文件wpa_supplicant.conf 的代碼為

具體配置項解釋如表1 所示。

表1 wpa_supplicant 配置項說明
使用wpa_supplicant -i wlan0 -c wpa_supplicant.conf &指令進行接入連接。
在指令執行后,可以使用ping 命令測試客戶端是否ping 通RADIUS 代理服務器。如果客戶端可以ping 通RADIUS 代理服務器,則證明客戶端網絡接入成功。
文章給出基于數字證書技術和RADIUS 協議實現復雜無線網絡接入認證的方法、在Linux 客戶端上的接入認證方法,較為安全、便捷,適用于多種網絡場景。文章通過搭建一個基于數字證書技術和RADIUS 協議的無線網絡認證平臺,方便管理無線網絡及其用戶。