背景
假如存在A,B, C三节点,他们需要两两之间进行通讯,如何去认定对方的身份,并且没有假冒的可能。Kerberos协议就是去解决这个问题的。
Kerberos协议角色
- 天博体育克罗地亚APP(client):发送请求的一方
- 服务端(Server):接收请求的一方
- 密钥分发中心(Key Distribution Center,KDC),而密钥分发中心一般又分为两部分,分别是:
- AS(Authentication Server):认证服务器,专门用来认证天博体育克罗地亚APP的身份并发放客户用于访问TGS的TGT(票据授予票据)
- TGS(Ticket Granting Ticket):票据授予服务器,用来发放整个认证过程以及天博体育克罗地亚APP访问服务端时所需的服务授予票据(Ticket)
天博体育克罗地亚APP访问server端整个通信流程如下
1.天博体育克罗地亚APP用户向KDC以明文的方式发起请求。该次请求中携带了自己的用户名,主机IP,和当前时间戳。
2.KDC当中的AS(Authentication Server)接收请求,查看是否存在这个用户,存在返回信息。返回的信息包含其中包含两部分内容:第一部分内容称为TGT,他叫做票据授予票据,天博体育克罗地亚APP需要使用TGT去KDC中的TGS(票据授予中心)获取访问网络服务所需的Ticket(服务授予票据),TGT中包含的内容有kerberos数据库中存在的该天博体育克罗地亚APP的Name,IP,当前时间戳,天博体育克罗地亚APP即将访问的TGS的Name,TGT的有效时间以及一把用于天博体育克罗地亚APP和TGS间进行通信的Session_key(CT_SK)。整个TGT使用TGS密钥加密,天博体育克罗地亚APP是解密不了的,由于密钥从没有在网络中传输过,所以也不存在密钥被劫持破解的情况。第二部分内容是使用天博体育克罗地亚APP密钥加密的一段内容,其中包括用于天博体育克罗地亚APP和TGS间通信的Session_key(CT_SK),天博体育克罗地亚APP即将访问的TGS的Name以及TGT的有效时间,和一个当前时间戳。该部分内容使用天博体育克罗地亚APP密钥加密,所以天博体育克罗地亚APP在拿到该部分内容时可以通过自己的密钥解密。如果是一个假的天博体育克罗地亚APP,那么他是不会拥有真正天博体育克罗地亚APP的密钥的,因为该密钥也从没在网络中进行传输过。这也同时认证了天博体育克罗地亚APP的身份,如果是假天博体育克罗地亚APP会由于解密失败从而终端认证流程。
3.天博体育克罗地亚APP使用CT_SK加密将自己的天博体育克罗地亚APP信息发送给KDC,其中包括天博体育克罗地亚APP名,IP,时间戳;
4.天博体育克罗地亚APP将自己想要访问的Server服务以明文的方式发送给KDC。
5.天博体育克罗地亚APP将TGT也原封不动的也携带给KDC。
6.此时KDC中的TGS(票据授予服务器)收到了来自天博体育克罗地亚APP的请求。他首先根据天博体育克罗地亚APP明文传输过来的Server服务IP查看当前kerberos系统中是否存在可以被用户访问的该服务。如果不存在,认证失败结束。如果存在,继续接下来的认证。
7.TGS使用自己的密钥将TGT中的内容进行解密,此时他看到了经过AS认证过后并记录的用户信息,一把Session_KEY即CT_SK,还有时间戳信息,他会现根据时间戳判断此次通信是否真是可靠有无超出时延。
8.如果时延正常,则TGS会使用CK_SK对天博体育克罗地亚APP的第一部分内容进行解密(使用CT_SK加密的天博体育克罗地亚APP信息),取出其中的用户信息和TGT中的用户信息进行比对,如果全部相同则认为天博体育克罗地亚APP身份正确,方可继续进行下一步。
9.此时KDC将返回响应给天博体育克罗地亚APP,响应内容包括:第一部分:用于天博体育克罗地亚APP访问网络服务的使用Server密码加密的ST(Servre Ticket),其中包括天博体育克罗地亚APP的Name,IP,需要访问的网络服务的地址Server IP,ST的有效时间,时间戳以及用于天博体育克罗地亚APP和服务端之间通信的CS_SK(Session Key)。第二部分:使用CT_SK加密的内容,其中包括CS_SK和时间戳,还有ST的有效时间。由于在第一次通信的过程中,AS已将CT_SK通过天博体育克罗地亚APP密码加密交给了天博体育克罗地亚APP,且天博体育克罗地亚APP解密并缓存了CT_SK,所以该部分内容在天博体育克罗地亚APP接收到时是可以自己解密的。
10.天博体育克罗地亚APP使用CK_SK将自己的主机信息和时间戳进行加密作为交给服务端的第一部分内容,然后将ST(服务授予票据)作为第二部分内容都发送给服务端。
11.服务器此时收到了来自天博体育克罗地亚APP的请求,他会使用自己的密钥,即Server密钥将天博体育克罗地亚APP第二部分内容进行解密,核对时间戳之后将其中的CS_SK取出,使用CS_SK将天博体育克罗地亚APP发来的第一部分内容进行解密,从而获得经过TGS认证过后的天博体育克罗地亚APP信息,此时他将这部分信息和天博体育克罗地亚APP第二部分内容带来的自己的信息进行比对,最终确认该天博体育克罗地亚APP就是经过了KDC认证的具有真实身份的天博体育克罗地亚APP,是他可以提供服务的天博体育克罗地亚APP。此时服务端返回一段使用CT_SK加密的表示接收请求的响应给天博体育克罗地亚APP,在天博体育克罗地亚APP收到请求之后,使用缓存在本地的CS_ST解密之后也确定了服务端的身份(其实服务端在通信的过程中还会使用数字证书证明自己身份)。
总结
1.整个可靠的通信依靠KDC和所有需要通信的双方共享自己的秘钥。