kerberos协议学习

Kerberos协议

概念:这个是一种网络认证协议,通过密钥系统为客户机/服务器应用程序提供认证服务,依赖于主机系统的认证。在kerberos协议中不是所有的客户端向想要访问的服务发起请求就能成功发起请求,必须通过一系列的身份认证,包括客户端和服务端的双向认证,只有当通信双方都进行了了身份验证并且通过才能建立连接进行网络通信。使用的是88和64端口进行认证和密码器重设,

kerberos协议三个角色

客户端:kerberos客户端是代表需要访问资源的用户进行操作的应用程序,每个kerberos客户端在访问资源之前都会请求身份验证

服务端:域内提供服务的服务段,服务端都有一个独一无二的SPN,也就是接收客户端的请求

密钥分发中心:就是所说的KDC,这个是一种网络服务,向AD域内用户和计算机提供会话票据和临时会话密钥,服务账号是krbtgt,每一个域控制器上都有

krbtgt:这个用户是在创建活动目录时候系统自动创建的一个账号,作用就是KDC密钥发行中心的服务账号,密码是随机生成的

通信流程

第一步:客户端想要访问服务端的某个服务,kerberos收到请求,AS通过在AD中存储的用户的信息判断是否由这个用户,是白名单还是黑名单,如果用户存在,认证成功,然后将TGT票据授予客户端。

这个TGT是KDC的TGS票据授予服务发送的,KDC是由两部分组成,一部分是TGS,另一部分是AS,AS是认证服务,认证中的TGT票据就是AS授予的,在这个第一步的请求中客户端中的请求携带了自己的用户、主机IP、和当前的时间戳,如果第一步认证成功,AS认证中心就会认为用户存在,就返回给客户端两部分的内容。至此这里就是客户端向AS发送认证请求的过程.

返回的两部分分别是第一部分就是TGT,客户端需要使用TGT去KDC中的TGS获取访问网络服务所需要的票据,TGT中包含的内容是kerberos数据库中存放的Name、IP、当前时间戳、TGT的有效时间和一把TGS密钥(这个是客户端和TGS通信的密钥client/TGS sessionkey),这个密钥客户端没有是无法进行解密的,第二部分就是AS使用客户端密钥加密后的数据,客户端收到这个返回的内容就能利用自己的密钥解开服务端经过加密的数据,反之不是真的客户端就无法进行解密,认证失败,这个TGS密钥其实就是KDC Hash也就是krbtgt的NTML hash

AS 认证服务器,用来认证客户端的身份并给客户授予TGS的TGT票据
TGT 这个是KDC的AS认证服务授予的
TGS 这个是票据授予服务器,这个是用来发送认证过程和客户端访问服务端的票据也就是ST票据
ST 这个就是由KDC的TGS颁发的
DC 就是域控
krbtgt 这个是KDC的密钥发行中心服务账户
AD 活动目录,里面存储域内所有用户的数据库

第二步:客户端收到AS的响应,然后对第二部分进行解密,获得其中的信息,之后认证成功向TGS发起请求这次的请求就是获取能够访问目标网络服务的票据,第二次请求中客户端发送了三部分的内容,第一部分就是明文发送自己想要访问的服务ID,第二部分就是原封不动的发送得到的TGT票据,第三部分就是使用Client/TGS sessionkey加密的主机信息,这个key就是第一步AS随机生成的。

然后TGS收到了客户端的请求,首先检查kerberos服务中是否存在用户明文请求的server ID,如果不存在,认证就结束,如果存在,就使用自己的密钥对TGT进行解密,获得AS的Client/TGS Sessionkey,然后利用这个key对客户端的加密数据进行解密,比对这个数据和TGT中的数据,如果相同就代表认证成功,反之失败。

最后认证成功后,TGS就会返回给客户端两部分的信息,第一部分:用于客户端访问网络服务使用的Server密钥加密的ST,里面的内容包括客户端的Name,IP,时间戳等等,还有用于和服务端之间通信的client/server session key.第二部分:就是使用了Client/TGS Sessionkey加密的内容,其中包括client/server session key和时间戳,还有ST的有效时间,因为在第一次通信的过程中AS已经将Client/TGS Sessionkey给了客户端,客户端缓存了这个密钥,所以就可以对这个第二部分进行解密,第一部分是server密码加密的ST无法解密

第三步:客户端向服务端发送请求,包含两部分:第一部分:使用第二步解密得到的Client/Server sk对自己的主机信息和时间戳进行加密,然后第二部分就是ST这个是使用server密钥进行加密的,客户端无法解密,直接原封不动的进行发送。

服务器收到了客户端的请求和数据,使用主机的密钥也就是服务端密钥对第二部分进行解密,得到里面的Client/Server sk,利用这个密钥对客户端发送的第一部分进行解密,获得客户端的信息,然后将这部分内容和使用服务端密钥解密后的数据进行对比,如果完全相同说明客户端是通过KDC认证的真实客户端,就可以为其提供服务。之后服务端返回一段使用Client/Server sk加密的响应给客户端,客户端收到请求使用缓存的Client/Server sk进行解密,确认服务端身份,之后就完成了Kerberos的认证,就能进行客户端与服务端进行网络通信

总结:这个kerberos认证中主要还是使用KDC进行密钥和凭证的变化进行双向认证,比如第一步AS给的TGT,客户端无法解密,只能下一步TGS进行解密核对身份,还有第二步给的ST,使用的是服务端密钥加密,只能第三步服务端进行解密,都是环环相扣。从而达到双向认证的效果。

参考资料:http://www.manongjc.com/detail/42-tgdyojzywleqptd.html
https://blog.csdn.net/weixin_46944519/article/details/126828074

posted @ 2023-11-30 13:55  Running_J  阅读(22)  评论(0编辑  收藏  举报