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