| 
 | 
 
 
发表于 2009-8-22 21:39:20
|
显示全部楼层
 
 
 
1.       在两台路由器上进行pap认证: 
如果我们进行单项认证的话配置应该如下 
R1为认证的服务器端,需要建立本地口令数据库,并且开始pap认证。 
R1(config)#username R2 password gairuhe------------------------建立本地口令数据库 
R1(config)#int s1/0 
R1(config-if)#ppp authentication pap--------------------------------要求进行PAP认证 
   在这样的配置下,我们可以看到链路已经down了: 
   R1(config-if)# 
*Aug 23 16:45:12.639: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial1/0, changed state to down 
  
R2为认证的客户端,需要发送用户名和密码来匹配服务器端的口令数据库 
此时我们在R2上加上如下的配置: 
  
   R2(config)#int s1/0 
R2(config-if)#ppp pap sent-username R2 password gairuhe------发送用户名和密码 
R2(config-if)# 
*Aug 23 16:47:48.635: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial1/0, changed state to up 
  
此时链路已经起来,我们仅在R1上做了认证,而在R2上没有进行认证。这就是pap的单向认证。 
  
Pap的双向认证: 
  
Pap的双向认证其实就是将两端同时都配置为认证服务器端和认证客户端。在上面实验的基础上,我们只要将R2配置成服务器端,将R1配置成客户端即可。 
  
R2(config)#username R1 password  gairuhe     
R2(config)#int s1/0 
R2(config-if)#ppp authentication pap 
R2(config-if)# 
*Aug 23 16:52:29.843: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial1/0, changed state to down 
  
R1(config-if)#int s1/0 
R1(config-if)#ppp pap sen 
R1(config-if)#ppp pap sent-username R1 password gairuhe 
R1(config-if)# 
*Aug 23 16:53:08.343: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial1/0, changed state to up 
  
2.在上面实验的基础上,将R1改为chap认证,而R2不变。 
  打开debug ppp authentication信息。在R1上进行如下的改变 
  
R1(config-if)#no ppp authentication pap 
R1(config-if)#no ppp pap sent-username R1 password gairuhe 
R1(config-if)#ppp authentication chap 
  
我们发现,链路状态并没有改变,而且也没有任何的debug信息产生。这就是说明了在链路已经建立起来后,是无需进行再次的认证的。 
  
我们把R1的是s1/0口shut down 后在no shut down,看看情况 
R1(config-if)#shut 
R1(config-if)#no shut 
R1# 
*Aug 23 17:00:19.663: Se1/0 PPP: Authorization required 
  
此时发现链路已经断开,并且要求需要PPP的认证 
  
3.在两台路由器上进行chap认证 
首先将R2的pap认证关闭 
R2(config-if)#no ppp authen pap 
R2(config-if)#no ppp pap sent-username R2 password gairuhe 
   我们通过debug信息看到 
   R1#   
*Aug 23 17:07:24.031: Se1/0 PPP: Authorization required 
*Aug 23 17:07:24.063: Se1/0 CHAP: O CHALLENGE id 42 len 23 from "R1" 
*Aug 23 17:07:24.095: Se1/0 CHAP: I RESPONSE id 42 len 23 from "R2" 
*Aug 23 17:07:24.099: Se1/0 PPP: Sent CHAP LOGIN Request 
*Aug 23 17:07:24.103: Se1/0 PPP: Received LOGIN Response FAIL 
*Aug 23 17:07:24.107: Se1/0 CHAP: O FAILURE id 42 len 25 msg is "Authentication failed" 
  
我们看到chap认证是通过发送一个challenge信息来进行认证。在R2上启用chap认证 
  
R2(config)#int s1/0 
R2(config-if)#ppp authentication chap 
R2(config)# 
*Aug 23 17:11:41.839: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial1/0, changed state to up 
这个时候链路就已经通了。 
  
4.两种认证同时启用 
  使用的命令为: 
  R2(config-if)#ppp authentication chap pap  或者 
R2(config-if)#ppp authentication pap chap 
如果同时启用了两种验证协议,则在配置中指定的第一种验证方式在链路协商过程中将被请求。如果另一端设备建议使用第二种验证方法,或者第一种验证方法没有通过,那么两台设备之间就开始尝试第二种验证方法。 
这两个认证同时启用是只需要一种认证通过即可建立起链路通信。 
  
  
总结: 
pap是通过发送用户名和密码进行匹配,我们就必须使用sent-username  ** password **这条命令,并且这个用户名和密码可以通过抓包软件抓到,是明文传输的 
chap的认证过程(单向认证,R2为服务器端,R1为客户端) 
R2首先发一个挑战包给R1,包的内容包括:01(标识符,表示挑战分组)+ID(序列号)+随机数+自己的用户名(R2) 
R1接收到这个包后,将挑战包的用户名(R2),随机数,ID和本地数据库的密码gairuhe进行计算,得出MD5的值,然后发送给R2 
这个回应的分组包括:02(回应标识符)+ID(和R2的一样)+hash(MD5的计算值)+自己的用户名(R1) 
R2收到后,通过ID找到它发送的挑战包,然后把ID,随机数,以及密码(通过本地数据库查找R1对应的密码)进行计算,得出MD5的值 
然后验证 
  
因此chap的安全性高于pap |   
 
 
 
 |