Kerberos验证过程:
如图,Kerberos认证过程:
1. Client 向KDC(Key Distribution Center)的KAS(Kerberos Authentication Service)确认,自己是真的Client。Client 发送KAS Request给KAS包括: UserName 和 用“Client的密码”加密过的Authenticator(相当于暗号)。KAS根据UserName从AD(Authentication Database)提取出Client的密码并生成密钥,将发来的Authenticator解密。将解密后生成的信息与已知的信息对比,信息相符则成功(这里的信息指的是双方用于验证的预先知道的内容)。
2. 验证完身份后KAS反馈Client,KAS Response包括:用KDC的密钥加密的TGT和用Client的密码加密过的Logon Session Key,Client收到后放到本地的缓存中,如果需要同其他的Service通信,则不需要再次验证,可以直接使用在本地的TGT向TGS(Ticket Granting Serice)申请其他的Ticket。
注: TGT是用KDC的密钥加密的,所以Client收到后无法解开TGT。
3. Client向TGS请求Ticket,请求包括: UserName,用Logon Session Key加密的Authenticator,TGT和Server Name。TGS收到请求后,用KDC的密钥解密TGT,并用解密出来的Logon Session Key(TGT中的)解密Authenticator验证身份。
4. 确认身份后,根据UserName和ServerName生成一个Service Session Key和Ticket,并用Logon Session Key加密Service Session Key,用Server的密码加密Ticket,然后,反馈给Client。
5. Client收到反馈后,用本地缓存中的Logon Session Key解密出Service Session Key,然后,用Service Session Key加密Authenticator,将Authenticator和Ticket发送给Server做验证,同时它们也会被放入本地缓存之中。
注: Ticket是用Server的密码加密的,所以Client看不见里面的内容。
6. Server收到请求后,用密码解密Ticket,用解密后生成的Service Session Key解密Authenticator,用Authenticator解密出来的信息与Ticket中的信息对比验证。为了防止服是钓鱼服务,所以,需要双向验证(Mutual Authentication),Server需要将Authenticator,再次用Ticket中的Service Session Key加密,返还给Client。
7. Client收到Authenticator后,用缓存中的Service Session Key解密,验证Authenticator。