朱利民
[摘要]RADIUS是目前應(yīng)用最廣泛的AAA協(xié)議。作為一種可擴(kuò)展的C/S結(jié)構(gòu)協(xié)議,它認(rèn)證機(jī)制靈活,支持各類廠商擴(kuò)充的專有屬性,協(xié)議簡(jiǎn)單明確,因此得到廣泛應(yīng)用。通過(guò)分析RADIUS協(xié)議,來(lái)實(shí)現(xiàn)RADIUS的認(rèn)證過(guò)程。
[關(guān)鍵詞]協(xié)議RADIUS認(rèn)證服務(wù)器
中圖分類號(hào):TP3文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1671-7597(2009)1210113-01
認(rèn)證服務(wù)器是LAN用戶管理的主要控制部分。通過(guò)單個(gè)服務(wù)器可同時(shí)支持多個(gè)接入控制器,為不同地區(qū)的接入用戶提供認(rèn)證及后續(xù)的計(jì)費(fèi)等服務(wù)。
認(rèn)證服務(wù)器與接入控制器之間通過(guò)主要RADIUS協(xié)議進(jìn)行通訊,該協(xié)議是IP體系中的認(rèn)證、授權(quán)、計(jì)費(fèi)(AAA)協(xié)議。當(dāng)用戶斷開(kāi)連接時(shí),認(rèn)證服務(wù)器收集來(lái)自接入控制器的計(jì)費(fèi)數(shù)據(jù),并將其轉(zhuǎn)換為相應(yīng)的計(jì)費(fèi)格式,并發(fā)送到計(jì)費(fèi)系統(tǒng)中去。
一、RADIUS協(xié)議
RADIUS即遠(yuǎn)程認(rèn)證接入用戶服務(wù)(Remote Authentication Dial In User Service),作為一種Client/Server(客戶機(jī)/服務(wù)器)模式的安全協(xié)議,已經(jīng)成為一種常用接入Internet的認(rèn)證/計(jì)費(fèi)模式。RADIUS具有安全性好、擴(kuò)展靈活、易于管理等特點(diǎn),還具有很強(qiáng)的記賬功能。
RADIUS協(xié)議的特點(diǎn)主要有以下四個(gè):
客戶/服務(wù)器模型:采用客戶/服務(wù)器(Client/Server)模型,RADIUS的客戶端通常是NAS(網(wǎng)絡(luò)接入服務(wù)器)??蛻舳藢⒂脩舻男畔鬟f到指定的服務(wù)器,并處理收到的回應(yīng);服務(wù)器收到用戶的連接請(qǐng)求之后,對(duì)用戶進(jìn)行認(rèn)證,并返回相應(yīng)的配置信息。
網(wǎng)絡(luò)安全性:客戶端和服務(wù)器之間的消息傳遞需要通過(guò)一個(gè)非網(wǎng)絡(luò)傳輸?shù)墓蚕砻荑€進(jìn)行相互認(rèn)證。而且為了防止被竊聽(tīng),用戶的口令等有用信息通常經(jīng)過(guò)加密傳輸。
靈活的認(rèn)證機(jī)制:可以支持多種的認(rèn)證機(jī)制,如PAP、CHAP、Unix登陸。通過(guò)擴(kuò)展,RADIUS還可以支持EAP,從而支持更多種類的認(rèn)證機(jī)制。
協(xié)議可擴(kuò)展性:數(shù)據(jù)包的傳遞采用“屬性-長(zhǎng)度-值”的格式對(duì)消息進(jìn)行屬性封裝。當(dāng)需要加入新的屬性時(shí),無(wú)需更改原有的協(xié)議,擴(kuò)展性好。
二、RADIUS服務(wù)器的工作過(guò)程
RADIUS采用Client/Server模式,其Client端一般是網(wǎng)絡(luò)接入服務(wù)器(Network Access Server,NAS)。NAS用來(lái)將用戶信息傳遞給RADIUS服務(wù)器;RADIUS服務(wù)器則對(duì)用戶進(jìn)行認(rèn)證,并返回用戶的認(rèn)證結(jié)果和配置信息。其工作流程如圖1所示。
1.網(wǎng)絡(luò)用戶登錄網(wǎng)絡(luò)時(shí),NAS會(huì)有一個(gè)客戶定義的Login提示符要求用戶直接輸入用戶信息(用戶名和口令),或者通過(guò)PPP協(xié)議要求遠(yuǎn)程的登錄用戶輸入用戶信息。
2.采用RADIUS驗(yàn)證的NAS在得到用戶信息后,將根據(jù)RADIUS標(biāo)準(zhǔn)規(guī)定的格式,向RADIUS服務(wù)器發(fā)出Access-Request訪問(wèn)請(qǐng)求包。包中一般包括以下RADIUS屬性值:用戶名、用戶口令、訪問(wèn)服務(wù)器的ID、訪問(wèn)端口的ID。其中的用戶口令采用MD5加密。
3.NAS在發(fā)出Access-Request包之后,會(huì)引發(fā)計(jì)時(shí)器和計(jì)數(shù)器。當(dāng)超過(guò)重發(fā)時(shí)間間隔時(shí),計(jì)時(shí)器會(huì)激發(fā)NAS重發(fā)Access-Request包。當(dāng)超過(guò)重發(fā)次數(shù)時(shí),計(jì)數(shù)器會(huì)激發(fā)NAS向網(wǎng)絡(luò)中的其他備份RADIUS服務(wù)器發(fā)出Access-Request包。
4.當(dāng)RADIUS服務(wù)器收到Access-Request包后,首先驗(yàn)證NAS的Secret(共享密碼)與RADIUS服務(wù)器中預(yù)先設(shè)定的Secret是否一致,以確認(rèn)是所屬的RADIUS客戶(NAS)送來(lái)的Access-Request包。在查驗(yàn)了包的正確性之后,RADIUS服務(wù)器會(huì)依據(jù)包中的用戶名在用戶數(shù)據(jù)庫(kù)中查詢是否有此用戶記錄。若有此用戶的數(shù)據(jù)庫(kù)記錄,RADIUS服務(wù)器會(huì)根據(jù)數(shù)據(jù)庫(kù)中用戶記錄的相應(yīng)驗(yàn)證屬性對(duì)用戶的登錄請(qǐng)求作進(jìn)一步的驗(yàn)證。其中包括:用戶口令、用戶登錄訪問(wèn)服務(wù)器的IP、用戶登錄的物理端口號(hào)等。
5.若RADIUS服務(wù)器設(shè)置為Proxy服務(wù),RADIUS服務(wù)器可以將用戶請(qǐng)求Access-Request包轉(zhuǎn)向其他的驗(yàn)證服務(wù)提供者。比如:主機(jī)、NT、其他的RADIUS服務(wù)器等等。
6.若以上提到的各類驗(yàn)證條件不滿足,RADIUS服務(wù)器會(huì)向NAS發(fā)出Access-Reject訪問(wèn)拒絕包。NAS在收到拒絕包后,會(huì)立即停止用戶連接端口的服務(wù)要求,用戶被強(qiáng)制Log-Out。
7.若以上提到的各類驗(yàn)證條件均滿足,但RADIUS服務(wù)器中設(shè)置了用戶的Challenge/Response握手驗(yàn)證要求時(shí):RADIUS服務(wù)器會(huì)發(fā)出一個(gè)Access-Challenge包,這時(shí)用戶會(huì)看到提示信息告知用戶已經(jīng)驗(yàn)證成功,要求用戶進(jìn)一步確認(rèn)登錄請(qǐng)求Access-Request。用戶再次確認(rèn)后,RADIUS服務(wù)器將比較兩次的請(qǐng)求信息,決定如何響應(yīng)用戶(發(fā)送Access-Accept、Access-Reject或再一次的Access-Challenge)。
8.當(dāng)所有的驗(yàn)證條件和握手會(huì)話均通過(guò)后,RADIUS服務(wù)器會(huì)將數(shù)據(jù)庫(kù)中的用戶配置信息放在Access-Accept包中送回給訪問(wèn)服務(wù)器,后者會(huì)根據(jù)包中的配置信息限定用戶的具體網(wǎng)絡(luò)訪問(wèn)能力。
9.在所有的驗(yàn)證、授權(quán)完成后,訪問(wèn)服務(wù)器會(huì)定期向RADIUS記賬服務(wù)器發(fā)送Accounting Packet。RADIUS記賬服務(wù)同時(shí)支持ODBC數(shù)據(jù)輸出。
三、RADIUS包格式
RADIUS協(xié)議采用UDP作為傳輸層協(xié)議,早期的RADIUS認(rèn)證端口為1645,目前官方指定端口為1812。數(shù)據(jù)包格式如圖1所示,各字段從左向右、從上向下傳輸。
圖1RADIUS包格式
RADIUS數(shù)據(jù)包共分五個(gè)部分:
1.Code(類型)
該域1個(gè)字節(jié),識(shí)別RADIUS包的類型。
2.Identifier(識(shí)別符)
該域1個(gè)字節(jié),用來(lái)輔助匹配請(qǐng)求和回復(fù)。如果RADIUS服務(wù)器收到的包與一段時(shí)間以前收到的包具有相同的客戶端IP地址、端口以及Identifier,則認(rèn)為收到了重復(fù)包,將被丟棄。
3.Length(長(zhǎng)度)
該域2個(gè)字節(jié)。它指明整個(gè)包的長(zhǎng)度,內(nèi)容包括Code,Identifier,Length,Authenticator和Attributes。超過(guò)長(zhǎng)度域的字節(jié)被視為填充,在
接收時(shí)應(yīng)被忽略;如果包比長(zhǎng)度域所指示的短時(shí),則應(yīng)被丟棄。最小長(zhǎng)度為20字節(jié),最大長(zhǎng)度為4096字節(jié)。
4.Authenticator(認(rèn)證碼)
該域16個(gè)字節(jié)。這個(gè)值用于驗(yàn)證RADIUS服務(wù)器的應(yīng)答(reply),并且還用于口令隱藏算法中。
5.Attributes(屬性)
屬性域用于傳送詳細(xì)的認(rèn)證、授權(quán)信息以及詳述請(qǐng)求和回復(fù)的配置信息。
四、認(rèn)證服務(wù)器的認(rèn)證實(shí)現(xiàn)
(一)WEB認(rèn)證在RADIUS認(rèn)證服務(wù)器中的實(shí)現(xiàn)
Web認(rèn)證通過(guò)啟動(dòng)一個(gè)Web頁(yè)面讓用戶輸入用戶名/密碼,并把用戶名/密碼以RADIUS協(xié)議的格式發(fā)送給認(rèn)證服務(wù)器,實(shí)現(xiàn)用戶認(rèn)證。
認(rèn)證者所得到的用戶信息(用戶名,密碼),根據(jù)radius協(xié)議,打成radius報(bào)文發(fā)送至服務(wù)器端的1811端口。服務(wù)器啟動(dòng)一個(gè)基于UDP的socket連接,并一直監(jiān)視1810端口。此外,服務(wù)器將維護(hù)一張記錄有用戶認(rèn)證信息的文件(包括用戶名,密碼)。一旦服務(wù)器接收到認(rèn)證者從1810端口發(fā)送的RADIUS包,根據(jù)相應(yīng)的協(xié)議分析radius報(bào)文,得到相應(yīng)的用戶信息進(jìn)行認(rèn)證,并把相應(yīng)的認(rèn)證結(jié)果打成radius報(bào)文,返回給認(rèn)證者。
(二)EAP_MD5,LEAP,TLS,TTLS,PEAP認(rèn)證在RADIUS認(rèn)證服務(wù)器中的實(shí)現(xiàn)
RADIUS作為后端服務(wù)器,提供了認(rèn)證的功能。為了具有更強(qiáng)的通用性和完整性,參考美國(guó)馬里蘭大學(xué)的關(guān)于實(shí)現(xiàn)802.1x的方案進(jìn)行配置,實(shí)現(xiàn)RADIUS服務(wù)器的EAP_MD5,EAP_LEAP,EAP-TLS,EAP_TTLS,EAP_PEAP認(rèn)證功能。以下以配置EAP_TLS為例:
1.安裝radius服務(wù)器程序之前,需要首先安裝一個(gè)最新版本或者2002年3月1日之后的穩(wěn)定版本的openssl,以用于radius中的EAP/TLS認(rèn)證模塊。這個(gè)版本的openssl一般安裝在/usr/local/openssl路徑下,僅僅用于radius認(rèn)證。
2.產(chǎn)生認(rèn)證過(guò)程中所需要的證書(shū)。由用戶信息產(chǎn)生私鑰,然后由私鑰產(chǎn)生CA(Certificate Authority),由CA產(chǎn)生兩套證書(shū),給client和server各一份。同時(shí)也需要生成random文件,來(lái)產(chǎn)生隨機(jī)數(shù)。所有文件存貯成壓縮文件形式cert.tgz,然后解壓縮到固定目錄下,如/etc/1x路徑下。
3.獲得最新的源程序的壓縮包如:freeradius-snapshot-20020916.
tar.gz(其他支持EAP-TLS認(rèn)證模塊的版本亦可),解壓縮到固定目錄下,如/usr/local/radius。然后進(jìn)行安裝和配置。
至此,已經(jīng)成功地配置了一臺(tái)RADIUS服務(wù)器,可以支持用戶kelly-user的EAP-TLS認(rèn)證,可以支持本機(jī)和IP地址為202.119.22.88的機(jī)器作為客戶端,共享密碼為whatever。如果想要支持更多的用戶或客戶端,按以上的形式進(jìn)行相應(yīng)的修改即可。有關(guān)文件的修改可以直接手動(dòng)進(jìn)行,也可以根據(jù)diff格式文件,使用patch命令。
軟件安裝完成,客戶執(zhí)行申請(qǐng)者端程序,認(rèn)證成功之后就可以享用網(wǎng)絡(luò)服務(wù)。