目标:
1 PAP和CHAP的工作过程到底是怎么样的?
2 PAP为什么两边的密码可以设置不一样,而CHAP为什么必须设置相同?
3 完成它们的配置,取证协议数据帧过程
PAP(PasswordAuthentication Protocol):密码认证协议,通过两次握手提供一种简单明文认证方式。该认证建立在PPP初始链路(PPP的LCP过程)确定的基础上。下面是一个单向PAP认证的实例,路由器R2是认证服务器,路由器R1是被验证的客户端。关于PAP认证的工作原理如下图8.29所示:
第一步:R1向R2发起PPP的初始连接,实际上就是前面描述PPP的LCP初始连接。
第二步:当完成PPP的LCP初始连接后,R2要求R1提供PPP的PAP认证。事实上PAP的认证也是属于LCP阶段完成。
第三步:R1将自己的用户名“R1”,密码“cisco”以明文的形式发送给R2,其发送的数据帧如下图8.30所示,该消息为PAP的认证请求消息(Authenticate-Request)。
注意:此时R1发送的用户名与密码没有经过任何加密处理,换而言之,很容易被第三方的用户侦听和窃用。所以PAP的安全性不是很高,请慎用。从图2的数据帧中可以明显看出发送的用户名与密码字符串的内容。
第四步:当R2收到R1发来的用户名和密码后,R2会将R1发来的认证信息在自己的本地安全数据库中进行匹配,如果能匹配上R1发来的用户名和密码就建立连接,并回送给
R1认证确认消息(Authenticate-Ack),其数据帧如下图8.31所示,如果认证失败拒绝连接。
演示:PPP的PAP认证配置
演示目标:实现思科路由器PPP链路上的PAP认证配置。
演示环境:如下图8.32所示。
演示工具:两台思科的路由器,要求路由器支持串口模块。
演示背景:该演示环境中,将两台思科的路由器使用串口进行点对点的连接,然后在点对点的链路上启动PPP协议的封装。首先完成PAP的单向认证配置,要求路由器R2去认证路由器R1的PAP接入,然后再完成双向PAP认证配置,要求路由器R1与R2进行相互认证,并使用不同的密码字符串。
演示步骤:
第一步:配置单向的PAP认证,要求R2认证R1的PPP连接。分别在路由器R1与R2上完成如下配置:
路由器R2上关于单向PAP认证的配置:
R2(config)#username r1 password cisco
R2(config)#inte s1/0
R2(config-if)#ipaddress 192.168.3.2 255.255.255.252
R2(config-if)#encapsulationppp
R2(config-if)#pppauthentication pap
R2(config-if)#noshutdown
指令解释:指令username r1 password cisco指示在路由器R2上建立基于路由器本地的安全数据库,建立的用户名为R1,密码为cisco。当R1通过PAP认证请求消息发送用户名与密码给R2时,R2就会把R1发来的用户名及密码与该安全数据库中的用户和密码做匹配。在路由器S1/0接口模式下的指令pppauthentication pap指示要求该接口启动PAP的认证功能。
路由器R1上关于单向PAP认证的配置:
R1(config)#inte s1/0
R1(config-if)#ipaddress 192.168.3.1 255.255.255.252
R1(config-if)#encapsulationppp
R1(config-if)#ppppap sent-username r1 password cisco
R1(config-if)#noshutdown
指令解释:指令ppp pap sent-username r1 password cisco指示路由器R1将自己的用户名R1,密码cisco发给路由器R2进行PAP认证。由于目前的配置是单向PAP认证,只要求路由器R2认证R1的PAP接入,所以没有必要在路由器R1上建立本地安全数据库和启动PAP认证,因为此时的R1只是PAP认证的客户端。
第二步:当完成上述配置后,一个单向的PAP认证就配置完成,现在需要来检测这个单向PAP认证的配置结果。首先请在路由器R2的S1/0接口模式下使用Shutdown指令关闭该接口,然后在路由器R2的特权模式下启动debug ppp authentication指令来debug ppp认证的具体过程,最后再重新激活路由器R2的S1/0接口,debug会提示如下图8.33所示的结果,从结果可得知,PAP的认证对等端是路由器R1,认证的结果是PASS(通过)。
注意:在第二步的操作中为什么需要首先关闭路由器R2的S1/0接口,然后启动debug后再激活该接口?原因很简单,因为PAP的认证是在PPP链路的LCP阶段完成,如果链路已经完成LCP的协商,那么debug将看不到任何关于PAP认证的消息。
第三步:配置双向PAP认证,并为路由器R1与R2设置不同的密码字符串,分别在路由器R1和R2上建立本地安全数据库,两台路由器的具体配置如下所示,当完成配置后,可以在路由器R2上测试与路由器R1的连通性,如下图8.34所示,表示双向认证成功后的通信效果。
路由器R2上关于双向PAP认证的配置:
R2(config)#username r1 password cisco
R2(config)#inte s1/0
R2(config-if)#ipaddress 192.168.3.2 255.255.255.252
R2(config-if)#encapsulationppp
R2(config-if)#pppauthentication pap
R2(config-if)#ppppap sent-username r2 password ccna
R2(config-if)#noshutdown
路由器R1上关于双向PAP认证的配置:
R1(config)#usernamer2 password ccna
R1(config)#inte s1/0
R1(config-if)#ipaddress 192.168.3.1 255.255.255.252
R1(config-if)#encapsulationppp
R1(config-if)#pppauthentication pap
R1(config-if)#ppp papsent-username r1 password cisco
R1(config-if)#noshutdown
注意:关于PAP的双向认证与单向认证的区别是彼此认证的两台路由器都需要配置关于对方的本地安全数据库,都需要向对端发送相应的认证消息。值得注意的是,双向认证的密码字符串可以不相同,请注意区分后面小节所描述的CHAP认证。
理解并取证:PPP的CHAP认证的工作原理
CHAP(Challenge Handshake AuthenticationProtocol) 挑战握手认证协议,它与PAP有很大区别,CHAP不会在链路上发送明文密码而是通过三次握手过程来确认摘要消息从而进行安全认证,所以CHAP的安全级别比PAP要高。那么什么是CHAP的三次握手过程?什么是CHAP的摘要消息?请参看下述关于CHAP的工作原理,如下图8.35所示。
、
第一步:路由器R1与R2在进行CHAP认证前,首先必须在认证对等体的两端设定一个相同的预共享密钥字符串,比如“ccna”。强调:两端的密钥必须一样。
第二步:路由器R2会生成一个随机数,然后将生成的这个随机数做两个处理:一是将随机数主动发送给路由器R1,这是CHAP三次握手的第一个过程,叫做发送CHAP的challenge(挑战)消息,具体的数据帧如下图8.36所示,可清晰的看到CHAP的消息类型与R2的随机数。二是将这个随机数与自己这边的密钥(这个密钥事实是R2与R1预先商量好的一个预共享密钥)放入MD5密钥生成器进行MD5的计算,然后从MD5的计算结果中提取一个摘要消息。
第三步:当路由器R1接收到路由器R2发来的随机数后,它会将这个随机数与R1的密钥(这个密钥事实上是R2与R1预先商量好的一个密码) 放入MD5密钥生成器进行MD5的计算,然后将MD5密钥生成器生成的摘要值,通过链路发送给R2。这是CHAP三次握手的第二个过程叫做CHAP的响应消息,具体数据帧如下图8.37所示。从数据帧中可看出,此时R1发送给R2的不是明文密码,而是经过处理后的摘要消息,这与PAP的认证有很大区别,所以CHAP的安全性比PAP要高。
第四步:当路由器R2收到R1发来的摘要消息后会与第二步中路由器R2自己计算出来的摘要值作对比,如果结果一样就表示CHAP认证成功,并发回CHAP的认证确定消息,具体数据帧如下图8.38所示,然后进入PPP的NCP过程,如果不一样就切断链路。
注意:根据对CHAP认证原理的分析,不难看出路由器R1与R2两边的密钥必须相同。因为它们属于 “预共享”机制的密钥,而该密钥是属于两边同时进行MD5摘要生成的关键因素。如果这两个密码不一样,即便是相同的随机数,MD5密钥生成器在两边计算出来的结果也会不一样,而摘要消息也就不可能匹配。但是真正的密钥内容并不用于网络传递。
演示:PPP的CHAP认证配置
演示目标:配置PPP链路上的CHAP认证功能。
演示环境:如下图 8.39所示。
演示工具:两台思科的路由器,要求路由器的支持串口模块。
演示背景:该演示环境中,将两台思科的路由器使用串口进行点对点的连接,然后在点对点的链路上启动PPP协议的封装。首先完成CHAP的认证配置。
演示步骤:
第一步:在路由器R1与R2的PPP链路上配置CHAP认证。
路由器R1上的配置:
r1(config)#username r2 password ccna
r1(config)#interfaces1/0
r1(config-if)#ipaddress 192.168.3.1 255.255.255.252
r1(config-if)#encapsulationppp
r1(config-if)#pppauthentication chap
r1(config-if)#pppchap hostname r1
r1(config-if)#pppchap password ccna
指令解释:指令username r2 password ccna指示在路由器R1上建立基于路由器本地的安全数据库,建立的用户名为r2,密码为ccna。事实上这里的密码就是在CHAP工作原理部分所描述的预共享密钥,所以路由器R1上的用户名可以不同,但密码必须要和路由器R2上的密码字符串相同;指令ppp authentication chap指示在PPP链路上启动CHAP认证;指令ppp chap hostnamer1指示定义CHAP认证所使用的用户名;指令ppp chap password ccna指示定义CHAP认证所使用的共享密钥。
路由器R2上的配置:
r2(config)#username r1 password ccna
r2(config)#interfaces1/0
r2(config-if)#ipaddress 192.168.3.2 255.255.255.252
r2(config-if)#encapsulationppp
r2(config-if)#pppauthentication chap
r2(config-if)#pppchap hostname r2
r2(config-if)#pppchap password ccna
注意:路由器R2上的CHAP配置指令除用户名以外基本上和路由器R1相同,在这里不再重复描述。值得一提的是:学员在理解CHAP时有一个严重的误区,通常认为只要在对方安全数据库中的密码与本地发送的密码一样,就可以协商成功,其实这种理解是错的,本地不会发送任何密码。在接口模式下的ppp chap password ccna,并不是把这个密码发送给对端进行验证,这种错误理解完全是将PAP的工作原理应用到了CHAP认证,所以一定要小心使用。
第二步:当完成上述配置后,一个关于PPP链路上的CHAP认证就配置完成了。现在需要来检测这个CHAP认证的配置结果,首先请在路由器R2的S1/0接口模式下使用Shutdown指令关闭该接口,然后在路由器R2的特权模式下启动debug ppp authentication指令来debug ppp认证的具体过程,最后再重新激活路由器R2的S1/0接口,debug会提示如下图 8.40所示的结果,从结果可看了CHAP的三次握手过程,认证的结果是PASS(通过)。