Kerberos协议流程
- User 用户
- KDC 域控制器,秘钥颁发中心
- AP 应用服务器
流程1
User向KDC请求访问某个应用,使用自己密码的hash去加密当前时间戳+用户名+SPN(服务主体名称)+随机数 发送给KDC。
流程2
KDC收到消息后,先抽取username信息。因为KDC有所有人的用户信息,可以查询当前用户是否在数据库中。如果存在,会解密当前的数据包,并解出当前的时间戳。颁发一个TGT票据返回给当前用户。
TGT票据是使用KDC自己的密码hash去对右边的数据包进行加密。这个数据包只能是KDC去进行解密,别人无法解密。
(
Username 是KDC的用户名
Session key是User和KDC之间定义好的session key。就是左边那块User hash加密之后的内容
TGT expiration time 是定义票据过期时间
PAC是特权用户信息(是包含User的详情。固定的 User SID 和 Groups ID,还有其他一些时间等信息)是使用KDChash去加密的
)
User hash 左边部分是可以让User自己去解密的。使用的秘钥是用户自己密码的hash
- User nonce 用户随机值。对应👆🏻的随机数
流程3
当User解密出Session key之后。将Session key 作为加密秘钥加密(User用户名+时间戳) + 原封不到的TGT数据包 + SPN(想要访问的应用信息)+ 用户随机数 发送给KDC
流程4
当KDC收到用户信息,用自己的krbtgt hash解密出TGT,再使用之前规划好的Session key解析出用户信息+时间戳。
确认用户身份,同时在服务器中找SPN所对应的服务。如果找到,并且用户信息对应没问题,KDC会将找到的SPN服务器信息加密成一个数据包
TGS expiration time 票据过期时间
PAC User的特权信息
Service session Key 不是之前的KDC和User协定的key了。是KDC和AP的Session key
Service owner hash 服务hash。User无法解密
同时会使用解密出来的Session key 去加密左边信息
流程5
User解出Session key加密的数据包后使用解密出的Service session key 去加密自己的用户名+时间戳
并将TGS原封不动发给AP
流程6
AP自己拥有Service owner hash 解密TGS。可以解出PAC信息。获取User信息,过期时间,判断用户访问服务是否合法。
AP 正常情况不会和KDC发送信息去进行验证4个字段
PAC 不会通过AP发送给KDC(KDC的工作量会很大)
KDC 与AP 连接 ,KDC会发给AP一个token,包含KDC的签名信息
Kerberos协议中只负责认证,不负责鉴权。