Kerberos认证
Posted 番茄酱料
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kerberos认证相关的知识,希望对你有一定的参考价值。
名词介绍:
DC(Domain Controller):域控
KDC(Key Distribute Center):密钥分发中心
AS(Authentication Service):身份验证服务
TGS(Ticket Granting Service):票据分发服务
TGT(Ticket Granting Ticket):票据分发票据
AD(Active Directory):活动目录(维护一个账户数据库),该数据库中存储了所有用户的密码hash和白名单,只有账户密码都在白名单中的Client才能申请到TGT
注意:在DC中有一个特殊用户叫做:krbtgt,它是一个无法登录的账户,是在创建域时系统自动创建的,在整个kerberos认证中会多次用到它的Hash值去做验证
注意:以下内容中的服务器代表TGS服务器,服务端代表我们最终需要请求的服务
第一步(图中1阶段)
(1)客户端会发送自己的信息以及要连接服务器的信息给AS然后AS会去ad数据库看是否在白名单中
(2)如果是处于白名单中,则身份验证通过,AS就会返回随机产生的session key(会话密钥,相等于登录成功)同时会生成两个票:
1.TGT1(session key,TGS服务信息,票据到期时间),TGT1使用客户端的NTLM hash加密
2.TGT2(session key,客户信息,票据到期时间),TGT2是使用KDC的NTLM hash加密
然后AS将这两个票发送给客户端
第二步(图中2阶段)
客户端拿到两个票之后
(1)先用客户端自己的NTLM hash解密TGT1,因为TGT1是用客户端的NTLM hash加密的,从而得到session key,
(2)然后生成认证因子(客户信息,当前时间戳),然后用解密出来的sessionkey加密
(3)之后发送给TGS服务器认证因子和TGT2,因为TGT2是用KDC NTLM hash进行加密的所以无法解密只能原封不动的发送,同时也会发送自己的客户端信息和TGS服务器信息用于校验
第三步(图中3阶段)
(1)TGS服务器拿到该内容后(认证因子+TGT2+客户端信息+服务器信息),先用KDC NTLM hash解密TGT2得到(session key,客户信息,票的结束时间)
(2)再用得到的session key去解密认证因子,因为认证因子使用session key进行加密的,从而得到(客户信息,时间戳)
(3)然后校验三点
<1>时间戳和当前时间的差距是不是很大,如果很大就说明会话有问题
<2>用解密的TGT2里面的客户信息与session key解密的客户信息进行比较,相同则通过
<3>客户端权限访问服务端是否正常
然后校验通过,TGS服务器将随机生成一个server session key
再次生成两个票:
TGT3(server session key,服务端信息,票据到期时间)用AS返回的session key进行加密的
TGT4(server session key,客户信息,票据到期时间)用服务端的NTLM hash加密的
服务端的NTLM hash:当访问服务时,他肯定有一个计算机名,在加入域时也会随机生成一个NTML hash值
它将TGT3和TGT4返回给客户端
第四步(图中4阶段)
客户端收到TGT3和TGT4后
(1)首先解密TGT3,因为session key是第一次AS生成的,客户端也是知道的,从而得到(server session key,服务端信息,票据到期时间)
(2)再生成认证因子2(服务端信息,票据到期时间),然后再用server session key进行加密
(3)将认证因子2和TGT4发送给服务端,因为TGT4是用的服务端的NTLM hash加密的,客户端不知道服务端的NTLM hash
第五步(图中5阶段)
服务端收到客户端后
(1)首先会解密TGT4,因为加密TGT4时用的是服务端的NTLM hash,因此服务端可以用自己的NTLM hash进行解密,从而得到(server session key,客户信息,票据到期时间)
(2)然后再用得到的server session key去解密认证因子2,从而得到服务端信息,票据到期时间。
(3)服务将会成功发送给客户端
第六步(图中6阶段)
客户端将会成功进行服务的访问
以上是关于Kerberos认证的主要内容,如果未能解决你的问题,请参考以下文章