kerbos认证过程笔记
参考文章链接https://blog.csdn.net/scythe666/article/details/53429819
kerbos认证过程
第一步骤、client向AS发送Authentication Service Request即ASR申请,内容包含:
Pre-authentication data:包含用以证明自己身份的信息。说白了,就是证明自己知道自己声称的那个account的Password。一般地,它的内容是一个被Client的Master key加密过的Timestamp。
Client name & realm: 简单地说就是Domain name\Client
Server Name:注意这里的Server Name并不是Client真正要访问的Server的名称,而我们也说了TGT是和Server无关的(Client只能使用Ticket,而不是TGT去访问Server)。这里的Server Name实际上是KDC的Ticket Granting Service的Server Name。
获取client的master key加密的 session-key(skdc-client ) 和 TGT, TGT包含skdc-client session-key ,client-name, end time(TGT的过期时间)
第二步骤、client向server请求TGT,server走第一步中client走的步骤申请 KDC和server的TGT
第三步骤、client向KDC中TGS Exchange发送Ticket Granting Service Request(KRB_TGS_REQ)
大体包含以下内容:
Client-TGT:Client通过AS Exchange获得的Ticket Granting Ticket,TGT被KDC的Master Key进行加密。
server-TGT:server通过AS Exchange获得的Ticket Granting Ticket,TGT被KDC的Master Key进行加密。
Authenticator:用以证明当初TGT的拥有者是否就是自己,所以它必须以Session Key(SKDC-Client:Logon Session Key)来进行加密。
Client name & realm: 简单地说就是Domain name\Client。
Server name & realm: 简单地说就是Domain name\Server,这回是Client试图访问的那个Server。
KDC收到请求后先确定Client-TGT是不是AS颁发给客户端的,以自身masterkey解密客户端TGT,然后获取session-key也就是client-kdc key,然后解密Authenticator,验证通过后,返回一个KRB_TGS_REP:
1、使用Logon Session Key(SKDC-Client)加密过用于Client和Server的Session Key(SServer-Client)
2、使用Server的Master Key进行加密的Ticket
3、使用server-TGT中skdc-server session-key加密的TICKET:
Session Key:SServer-Client。
Client name & realm: 简单地说就是Domain name\Client。
End time: Ticket的到期时间。
客户端收到KRB_TGS_REP之后,通过skdc-client session-key解密server-client session key
第四步骤、向server发送KRB_AP_REQ:
1、使用server-client key加密的Authenticator验证client的身份
2、3步骤中获取的kdc-server session-key加密的TICKET
server收到KRB_AP_REQ之后,通过自己缓存的kdc-server session-key解密Ticket,从而获得Session Key(SServer-Client)通过SServer-Client解密Authenticator实现对Client的验证。
如果向server发送KRB_AP_REQ设置需要进行双向验证Server从Authenticator提取Timestamp,使用Session Key(SServer-Client)进行加密,并将其发送给Client用于Client验证Server的身份。