前言
Kerberos 是一种由 MIT(麻省理工大学)提出的一种网络身份验证协议。它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证。
kerberos的主要目的是为证明你是你的问题,比如在你作为client端的时候,访问server端资源时。如何判断你是否有权限去访问呢,以及访问的人到底是不是你呢?
一、Kerberos 协议框架
角色组成
- Client:需要认证的客户端
- Server:提供服务的服务端
- KDC:密钥分发中心,分为两部分Authentication Service(AS)和Ticket Granting Service(TGS)
Client和Server都好理解,接下我们主要了解一下KDC的原理
KDC 原理
KDC中分为两个部分:Authentication Service和Ticket Granting Service
- Authentication Service(AS): 初步验证Client的身份,然后给一张TGT 票
- Ticket Granting Service(TGS):二次验证,通过后发给正式的ST票
举个栗子说明:
比如:你现在饥肠辘辘想吃饭,恰好来到一家大饭店。你径直走向饭店大门却被拦下,被酒店人员告知要吃饭先要拿到预约票(TGT),于是你向发起预约申请得到预约票(TGT)。然后你拿着预约票(TGT)走进九点,向工作人员出示,对方确认信息正确后,发给你一张就餐票(ST)。你带着就餐票上了二楼,服务人员检查了你的就餐票(ST)无误后,给你安排餐食~
看下图:

结合图中流程,大致理解Client、Server、AS、TGS的作用。以及基本清楚认证流程~
二、Kerberos详细流程讲解
1.整体流程图

2. 详细分析
整个流程我们分为三次对话:Client 和 AS 、Client和TGS 、Client和Server
Client和AS
Client ——> AS : 使用 client端的密码Hash 加密 时间戳,发送到AS
AS 处理 : AS 接收到Client的请求后,通过Client使用的用户名,去AD 数据库查询是否在白名单中,以及获取用户的密码HASH 。生成随机数session-key,并使用Client的密码HASH加密得到session-key-as。以及使用kdc 中krbtgt的 NTLM Hash,去加密 session key 和 客户端的信息,客户端的信息里面包含了时间戳等信息,生成TGT。
AS ——> Client:session-key-as 和 TGT
Client 处理: 使用本地的Hash 解密 session-key-as ,获取到session-key。使用session-key 去加密时间戳。
Client和TGS
Client——>TGS : 发送给TGT 和session-key加密的时间戳。
TGS 处理: 解密TGT, 检验 原请求地址和时间戳等。生成session key-tgs, 使用session-key 加密 session key-tgs (session-key-tgs-encrypt)以及使用Client要访问的Server的密码 HASH 加密 session-key-tgs (ST)
TGS ——> Client: 返回session-key-tgs-encrypt和ST
Client 处理 : 使用session-key 解密 session-key-tgs-encrypt ,获得session-key-tgs,以及使用session-key-tgs 加密时间戳。
Client和Server
Client——>Server: 发送 ST 和 session-key-tgs 加密时间戳
Server 处理: Server端使用自身的密码HASH ,解密ST得到session-key-tgs 。使用session-key-tgs 解密 ,获取TimeStamp。验证成功后,返回验证成功。
Server ——> Client: 返回校验结果。
到此,各位再结合图,是不是就能理解了呢~
总结
本章主要内容:
- Kerberos 的组成部分:Client、Server、KDC
- 理解整个认证流程和原理