Kerberos协议角色组成:
Kerberos协议中存在三个角色,分别是:
- 客户端 (client):发送请求的一方
- 服务端(server)接受请求的一方
- 钥匙分发中心(Key distribution KDC)
密钥分发中心又分为两个部分,分别是:
- AS(Authentication Server):认证服务器,专门用来认证客户端的身份并发放客户用于访问TGS的TGT(票据授予票据)
- TGS(Ticket Granting ticket):票据授予服务器,用来发放整个认证过程以及客户端访问服务端时所需的服务授予票据(ticket)
Kerberos认证过程简化描述如下:
客户端在访问每个想要访问的网络服务时,他需要携带一个专门用于访问该服务并且能够证明自己身份的票据,当服务端收到了该票据他才能认定客户端身份正确,向客户端提供服务。所以整个流程可简化为两大步:
- 客户端向KDC请求获取想要访问的目标服务的服务授予票据(Ticket);
- 客户端拿着从KDC获取的服务授予票据(Ticket)访问相应的网络服务;
简化认证图如下:
当 Client 想要访问 Server 上的某个服务时,需要先向 AS 证明自己的身份,然后通过 AS 发放的 TGT 向 Server 发起认证请求,这个过程分为三块:
The Authentication Service Exchange:Client 与 AS 的交互,
The Ticket-Granting Service (TGS) Exchange:Client 与 TGS 的交互,
The Client/Server Authentication Exchange:Client 与 Server 的交互
1、客户端发送自己的用户名给AS
2、AS验证用户名是否在白名单列表,如果在的话随机生成session key(as),返回如下信息 TGT1(session key(as),TGS服务器信息等)--客户端NTLM哈希加密 TGT2(session key(as),客户端信息等)--KRBTGT NTLM哈希加密
3、用自己的NTML哈希解密TGT1,获得TGS服务器信息以及session key(as),TGT2由于是别人的哈希,所以解不开 生成认证因子(客户端信息,当前时间)--session key(as)加密 发送认证因子以及TGT2给TGS服务
4、TGS服务先解密TGT2获得session key(as),紧接着利用session key(as)解密认证因子,对比认证因子与TGT2的客户端信息是否一致,如果一致生成session key(TGS),返回如下信息给客户端 TGT3(session key(TGS),服务器信息,票据到期时间)--session key(as)加密 TGT4(session key(TGS),客户端信息,票据到期时间)--客户端想要访问的服务器的哈希加密 5、客户端解密TGT3,得到session key(TGS),服务器信息 生成认证因子2(服务器信息,票据到期时间)--session key(TGS)加密 发送认证因子2以及TGT4给服务器
6、服务器先用自己的哈希解密TGT4得到session key(TGS),客户端信息,票据有效期 利用session key(TGS)解密认证因子对比客户端信息决定是否提供服务