当Client想要访问Server上的某个服务时,首先向AS证明自己的身份,AS认证通过发放TGT给Client,然后Client拿着TGT向TGS发起认证请求,认证通过返还一个ST给Client,最后Client拿着ST去访问serve,整个过程分为三步:
The Authentication Service Exchange: Client 与 AS 的交互
The Ticket Granting Service Exchange:Client 与 TGS 的交互
The Client/Server Authentication Exchange:Client 与 Server 的交互
Domain Controller (域控制器),简称DC,一台计算机,实现用户、计算机的统一管理。
KeyDistribution Center(秘钥分发中心),简称KDC,默认安装在域控。
Authentication Service(身份验证服务),简称AS,用于KDC对Client认证。
Ticket Grantng Service (票据授予服务),简称TGS,用于KDC向Client和Server分发Session Key。
Active Directory(活动目录),简称AD,用于存储用户、用户组、域相关的信息。
Client 客户端,指用户。
Server 服务端,某台计算机或者某个服务
##Client 与 AS 的交互
KRB_AS_REQ:
Client 先向 KDC 的 AS 发送 Authenticator1,内容为通过 Client NTML Hash 加密的时间戳、Client ID、网络地址、加密类型等内容。
KBR_AS_REP:
当 AS 接受到 Client的请求后,向AD发起请求,通过AD获取密码Hash并且验证信息。验证成功后生成一个由Client Hash加密的Session Key as和使用域特定账户krbtgt Hash加密的TGT(包含了session key as,超时时间等信息)返回给cilent客户端。
kerberos 第一步请求完成。
Client 与 TGS 的交互KBR_TGS_REQ:
client接收到as返回的KBR_AS_REP:,使用自身的hash解密第一部分得到Session Key as,由于不知道krbtgt的Hash,因此TGT无法解密。使用得到的Session-Key as 加密数据(timestamp、Client-info、Server-info)作为一部分,然后把无法解密的TGT做为第二部分组成KBR_TGS_REQ发送给TGS。
KBR_TGS-REP:
TGS 收到 Client 发送过来的 TGT 和 Session key-as 加密的数据(timestamp、Client-info、Server-info)后,使用krbtgt的hash解密TGT,得到Session-key as等信息,然后拿着Session-key as去解密第一部分,TGA将两部分中的时间戳,客户端等信息进行比较,如果认证都通过,发送KBR_TGS-REP给Client。
KBR_TGS-REP由二部分组成,第一部分是由Session-key as加密的Session-key tgs,第二部分是ST(由Server NTLM-hash加密的Session-key tgs、timestamp、Client-info)
kerberos第二步请求完成。
Client 与 Server 的交互