这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战
Kerberos认证请求认证过程
- KRB_AS_REQ:Client用明文向AS发起请求,请求体为Client Info
- KRB_AS_REP:AS通过AD验证用户是否存在,不验证密码正确性,AS生成SKDC-Client与TGS Name用CMK加密后和KDC加密的TGT一起返回,Client密码不对则解不开CMK加密部分
- KRB_TGT_REQ:Client对Server进行请求,获得KDC加密的Server的TGT(内含SKDC-Server)对于Server来说,可以像Client一样通过AS Exchange获得和KDC之间的SessionKey以及Server的TGT,获得这个TGT后 Server会缓存它,以待Client对它的请求
- KRB_TGT_REP:如果Server的TGT存在于缓存,将该TGT返回给Client
- KRB_TGS_REQ:Client提供自己的TGT,Server的TGT以及SKDC-Client加密的Authenticator以及要访问的Server请求TGS
- KRB_TGS_REP:KDC先解密Client的TGT获得SKDC-Client,用此解密Authenticator和TGT中Client Info对比,TimeStamp与系统时间对比(PRE_AUTH_FAILED)。通过后再解密Server的TGT获得SKDC-Server来加密Session Ticket和SKDC-Client加密的SServer-Client一起返回给Client
- KRB_AP_REQ:Client用Session Ticket和SServer-Client加密的Authenticator请求,包含一个Flag是否启用双向认证
- KRB_AP_REP:Server用SKDC-Server解密Session Ticket,用SServer-Client解密Auth,对比Client Info和Time,if Flag:Server提取Auth中的TimeStamp,并用SServer-Client加密返回给Client
认证总结
- Session-Key是参与的双方都拥有的,KDC颁发,想让对方解密的信息都用Session-key加密
- TGT都是KDC加密,Session Tikcet是SKDC-Server加密。Server的TGT是为了提供SKDC-Server
- Authenticator (ClientInfo+TimeStamp):为有效的证明自己提供证据,用请求者和被请求者的Session加密
Client Info包含:Client-Name(Principle),IP,TGT有效时间/生命周期
TGT包含:Client Info+ Session key
Session Ticket包含:Client和Server的principal、ip、st生命周期、SServer-Client - Long-term Key加密的数据不应该在网络中传递,所以都替换成Short-term key(Session Key)
- TGS:可以在这里添加权限认证服务
- Client Master Key:用户输入的密码或kerberos.keytab文件中的密码hash生成:为了加密①请求
- 一个TGT可以让Client获取多个Server的Session Ticket,TGT和每个Ticket都具有有效期,TGT要是过期了申请的Session Ticket也过期了,在Session Ticket未过期情况下,Client直接可以与Server验证
为什么KDC不直接将Session-Key发给server
- Server需要维护一个Session-Key的列表
- Session-Key可能等Client去认证还没到Server
- KDC都是从TGT获取Session-key来解密
Master Key从哪里来
从Domain的Account Database中提取Client和Server的Master Key
本文转载自: 掘金