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认证的主要内容,如果未能解决你的问题,请参考以下文章

Kafka 认证三:Kerberos 认证中心部署

Kafka Kerberos 安全认证

什么叫kerberos

如何给openldap安装配置kerberos身份认证服务

Kerberos协议详解

Kafka 认证三:添加 Kerberos 认证详细流程