摘 要:本文在深入研究802.1x協(xié)議的基礎(chǔ)上,開發(fā)了基于802.1x協(xié)議的校園網(wǎng)認(rèn)證管理系統(tǒng),并將該系統(tǒng)應(yīng)用到了大學(xué)校園網(wǎng)絡(luò)的日常管理中,提高了管理的效率。
關(guān)鍵詞:信息論;無線網(wǎng)絡(luò);計(jì)算機(jī)軟件;認(rèn)證管理系統(tǒng)
中圖分類號:TP393.08
802.1x協(xié)議的來源是802.11協(xié)議。802.11協(xié)議是目前標(biāo)準(zhǔn)的無線局域網(wǎng)協(xié)議,802.1x協(xié)議是為了解決無線網(wǎng)用戶的對互聯(lián)網(wǎng)的接入和認(rèn)證問題。
在802.1x協(xié)議出現(xiàn)之前,現(xiàn)有的有線LAN應(yīng)用都沒有直接控制到端口的方法。雖然目前也不需要控制到端口,但是隨著無線LAN的應(yīng)用以及LAN接入在互聯(lián)網(wǎng)上大規(guī)模開展,因此有必要對端口加以控制,以實(shí)現(xiàn)用戶級的接入和訪問控制。802.1x就是IEEE為了解決用戶基于端口的接入和訪問控制(Port-Based Access Control)而定義的一個(gè)標(biāo)準(zhǔn)。
1 802.1x認(rèn)證方法過程及主要方法
1.1 首先打開基于802.1X協(xié)議的網(wǎng)絡(luò)認(rèn)證管理系統(tǒng)客戶端,輸入用戶名和密碼。此時(shí),管理系統(tǒng)客戶端將發(fā)出請求認(rèn)證的連接報(bào)文發(fā)送給認(rèn)證系統(tǒng)。
1.2 認(rèn)證系統(tǒng)收到客戶端發(fā)來的請求連接的報(bào)文后,將發(fā)出一個(gè)請求提供連接者用戶名信息的報(bào)文給認(rèn)證系統(tǒng),要求認(rèn)證系統(tǒng)客戶端發(fā)送用戶輸入的用戶名信息。
1.3 客戶端接收到認(rèn)證系統(tǒng)發(fā)出的請求用戶名信息后,將用戶的信息封裝成數(shù)據(jù)幀發(fā)送給認(rèn)證系統(tǒng)。
封裝用戶名的方法為:
byte[]dstMac=new byte[6]; //網(wǎng)卡的MAC地址,6字節(jié)
arraycopy(requestUsername.header,6,dstMac,0,6); //將包含用戶名的packet前6個(gè)數(shù)據(jù)復(fù)制給dstMac的6個(gè)元素。
ep.dst_mac=dstMac;
this.datalink=ep;
if(conf.getType().charAt(0)=='i'){
fore=new byte[]{0x01,0x00,0x00,0x1a,0x02,0x00,0x00,0x1a,0x01};
}else{
fore=new byte[]{0x01,0x00,0x00,0x15,0x02,0x00,0x00,
0x15,0x01}; //設(shè)備的控制協(xié)議源代碼
}
md5.update(md5Code); //用MD5加密用戶名
1.4 認(rèn)證系統(tǒng)收到發(fā)送來的用戶名信息后,加密用戶名,并將加密后的數(shù)據(jù)幀發(fā)送給認(rèn)證系統(tǒng)客戶端。
1.5 認(rèn)證系統(tǒng)客戶端收到加密后的用戶名信息后,用該加密方式對密碼進(jìn)行加密,并將加密后的信息發(fā)送給認(rèn)證系統(tǒng)。本認(rèn)證系統(tǒng)加密用MD5加密方式進(jìn)行加密,方法如下:
byte[] md5ChanllengeAndId=new byte[17]; //創(chuàng)建challenge數(shù)組用來存放MD5加密后的密碼
arraycopy(requestPassword.data,9,md5ChanllengeAndId,0,16);
//將密碼復(fù)制到指定數(shù)組中
md5ChanllengeAndId[16]=requestPassword.data[5];
MessageDigest md5=MessageDigest.getInstance(\"MD5\");
//創(chuàng)建MD5實(shí)例,用來加密
md5.update(md5ChanllengeAndId);
//加密數(shù)組中的數(shù)據(jù),即實(shí)現(xiàn)對密碼的MD5加密
加密成功后,將用戶的用戶名和密碼發(fā)送給認(rèn)證管理服務(wù)器,進(jìn)行驗(yàn)證:
public void searchServer(){
//System.out.println(\"Searching for server...\");
this.sender.sendPacket(new SearchingPacket(this.etherPacket));
} //查找網(wǎng)絡(luò)設(shè)備
public void responseUsername(Packet requestUsername)throws Exception{
UsernamePacket up=new UsernamePacket(requestUsername,
this.etherPacket,this.conf);
System.out.println(\"Sending username...\");
this.sender.sendPacket(up); //封裝用戶名后發(fā)送封裝好用戶名的數(shù)據(jù)包
}
public void responsePassword(Packet requestPassword) throws Exception {
PasswordPacket pp=new PasswordPacket(requestPassword,
this.etherPacket,this.conf);
System.out.println(\"Sending password...\");
this.sender.sendPacket(pp); //封裝密碼并發(fā)送封裝好密碼的數(shù)據(jù)包
}
1.6 認(rèn)證服務(wù)器接收到加密后的用戶名和密碼后,進(jìn)行解密操作,并進(jìn)行驗(yàn)證,如果匹配成功,則認(rèn)為該用戶為注冊用戶,并將驗(yàn)證成功的信息反饋給系統(tǒng),打開相應(yīng)的端口,準(zhǔn)許用戶進(jìn)行網(wǎng)絡(luò)連接。如果認(rèn)證失敗,則反饋給系統(tǒng)認(rèn)證失敗的信息,并提示用戶重新輸入用戶名和密碼。
2 基于802.1x協(xié)議的網(wǎng)絡(luò)認(rèn)證管理系統(tǒng)的實(shí)現(xiàn)
2.1 基于802.1x協(xié)議,開發(fā)了網(wǎng)絡(luò)認(rèn)證管理系統(tǒng),如下圖所示。當(dāng)用戶想連接網(wǎng)絡(luò)時(shí)打開802.1x網(wǎng)絡(luò)認(rèn)證管理系統(tǒng),輸入用戶名和密碼,發(fā)起連接請求。如圖所示:
圖1 客戶端頁面 圖2 系統(tǒng)自檢,請求連接
2.2 當(dāng)交換機(jī)在收到請求認(rèn)證連接的數(shù)據(jù)幀后,將發(fā)出一個(gè)EAP-Request請求幀,該請求幀要求認(rèn)證管理系統(tǒng)客戶端發(fā)送登陸用戶的用戶名和密碼,并與后臺(tái)數(shù)據(jù)庫進(jìn)行驗(yàn)證,當(dāng)驗(yàn)證通過后,則準(zhǔn)許網(wǎng)絡(luò)連接,至此網(wǎng)絡(luò)連接成功,如圖所示。
圖3 驗(yàn)證用戶名 圖4 驗(yàn)證密碼
圖5 驗(yàn)證成功,準(zhǔn)許登錄
參考文獻(xiàn):
[1]袁建國,方寧生,姜浩.802.1x:基于端口的訪問控制協(xié)議[J].微機(jī)發(fā)展,2005(12).
作者簡介:姜俐俐(1968-),女,河北承德人,本科,電子工程師,研究方向:計(jì)算機(jī)應(yīng)用;柴旭光(1983-),男,河北邢臺(tái)人,碩士研究生,講師,研究方向:計(jì)算機(jī)應(yīng)用技術(shù);王海賓(1982-),男,河北邢臺(tái)人,碩士研究生,講師,研究方向:計(jì)算機(jī)應(yīng)用技術(shù)。
作者單位:河北省復(fù)員軍人醫(yī)院,河北邢臺(tái) 054000;邢臺(tái)職業(yè)技術(shù)學(xué)院,河北邢臺(tái) 054035