一、Kerberos 是什么?
1.1 定义
Kerberos 是一种基于票据(Ticket)的、三方对称加密网络身份认证协议,由 MIT 开发,是目前企业内网最主流的单点登录(SSO)认证标准。
名字来源:希腊神话中守护地狱之门的三头犬,对应协议三方认证架构(客户端、服务、KDC),缺一不可。
1.2 解决的核心问题
在不可信的公开网络中,解决三个痛点:
-
密码明文传输被抓包窃取
-
中间人伪造服务/伪造客户端冒充身份
-
每次访问不同服务重复输入密码(实现单点登录)
核心设计思想:密码永远不上网传输,全程靠加密票据证明身份。
1.3 核心特性(区别于普通密码登录)
-
三方认证,而非两方直接校验
-
全程对称加密,无明文密码
-
双向认证:客户端验服务、服务验客户端
-
票据时效性,防永久盗用
-
一次认证、多服务免密访问(SSO)
二、必记核心角色
Kerberos 所有流程只围绕 三个核心角色,所有复杂报文都是为这三者服务。
2.1 Client(客户端/主体 Principal)
需要访问网络资源的用户、电脑、服务账号。
Kerberos 中所有身份统称为 Principal(主体),格式固定:名称/主机@域名。
示例:
-
用户:admin@test.com
-
服务:ldap/win-ad.test.com@test.com
2.2 Server(业务服务端)
客户端要访问的目标服务,比如 AD 域服务、HDFS、SSH、LDAP、数据库服务等。
特点:服务自身不校验用户密码,只校验 KDC 下发的票据。
2.3 KDC(密钥分发中心,核心中枢)
整个 Kerberos 的大脑,所有认证、票据签发都由它完成,默认部署在域控制器上。
KDC 包含两个核心服务,必须区分清楚:
AS(Authentication Service 认证服务)
作用:初次身份校验,发放 TGT 票据。
用户第一次登录时,AS 用用户密码哈希验证身份,通过后返回「入场券 TGT」。
TGS(Ticket Granting Service 票据授予服务)
作用:凭 TGT 兑换具体服务的访问票据 ST。
用户有了 TGT 后,后续访问任意服务,都找 TGS 兑换对应服务票据,无需再次输密码。
三、核心票据与密钥术语
Kerberos 所有安全逻辑,都靠「票据+密钥」支撑,彻底弄懂这几个概念,就掌握 80% 原理。
3.1 TGT(Ticket Granting Ticket 票据授予票据)
全称:入场券/全局通行证
-
签发方:AS(Authentication Service 认证服务)
-
加密密钥:KDC 密钥(只有 KDC 密钥分发中心 能解密)
-
作用:证明「我是合法用户」,用于向 TGS 申请服务票据
-
时效:通常 10 小时,过期需要重新登录获取
核心:TGT 不能直接访问业务服务,只能用来换服务票据。
3.2 ST / Service Ticket(服务票据)
全称:业务通行证
-
签发方:TGS
-
加密密钥:目标服务密钥(只有对应业务服务能解密)
-
作用:访问具体业务服务的凭证
-
时效:短时效,通常几分钟到一小时,防止被盗用
3.3 三类核心会话密钥(Session Key)
Kerberos 全程不传输明文密码,靠「临时会话密钥」加密通信:
-
用户会话密钥(Client Session Key):AS 生成,加密客户端与 TGS 的通信,仅用户和 KDC 知晓
-
服务会话密钥(Service Session Key):TGS 生成,加密客户端与业务服务的通信
-
长期密钥:用户密码哈希、服务机器密码哈希、KDC 密钥,永久固定(除非改密码)
3.4 Authenticator(认证器)
很多教程忽略但至关重要的字段。
Authenticator 是客户端生成的、带时间戳的加密数据包,作用:
-
证明:当前请求是「实时在线发起」,不是别人截获重放的旧票据
-
实现防重放攻击
核心逻辑:票据是固定的,Authenticator 每次请求都不一样(靠时间戳)。
3.5 PAC(Privilege Attribute Certificate 权限属性证书)
Windows 域环境特有核心字段,嵌入在票据中。
作用:存储用户权限信息、用户组、SID、管理员标识。
业务服务拿到票据后,解析 PAC 就能知道「这个用户有什么权限」,决定允许/拒绝访问。
⚠️ 内网安全重点:黄金票据、白银票据攻击,本质都是伪造 PAC 权限信息。
四、完整版 Kerberos 认证五步流程

行业标准分为 三大阶段、五次报文交互(AS阶段、TGS阶段、服务访问阶段),所有抓包(Wireshark)都是这五个包。
阶段一:AS 认证阶段(获取 TGT,登录账号)
1. AS-REQ(客户端 → KDC-AS)
用户第一次登录时,需要主动向 AS 发送 AS-REQ 认证请求,请求中仅携带两类明文信息
-
客户端身份信息:当前登录用户的 Principal 主体账号(如 admin@test.com),用于KDC检索用户信息
-
目标服务标识:固定为KDC的TGS服务身份(告知AS是为了申请登录票据、兑换后续服务权限)
2. AS-REP(KDC-AS → 客户端)
AS 校验账号存在后,做两件事:
AS会立刻从数据库中调取该用户的密码哈希,生成 用户会话密钥
返回两个加密内容:
TGT 票据(用 KDC 密钥加密,客户端无法解密)
会话密钥数据包(用用户密码哈希加密,客户端输对密码才能解密)
只有客户端输入正确密码,本地计算出匹配的哈希值,才能解密数据包、获取会话密钥,最终完成完整身份认证,拿到合法TGT入场券。本地缓存 TGT。
阶段二:TGS 票据兑换阶段(获取 ST,准备访问服务)
3. TGS-REQ(客户端 → KDC-TGS)
客户端要访问某业务服务,携带:缓存的 TGT + 自己生成的 Authenticator,向 TGS 申请服务票据。
4. TGS-REP(KDC-TGS → 客户端)
TGS 校验 TGT 和时间戳合法后:
生成 服务会话密钥
签发对应业务服务的 ST 票据(用服务密钥加密)
返回 ST + 服务会话密钥
此时客户端拿到访问目标服务的「专属通行证 ST」。
阶段三:业务服务访问阶段(正式通信)
5. AP-REQ / AP-REP(客户端 ↔ 业务服务)
客户端携带:ST 票据 + 全新 Authenticator,发送给业务服务。
服务校验流程:
用自身密钥解密 ST
校验票据有效期、时间戳防重放
解析 PAC 获取用户权限
校验通过,建立加密通信,允许访问资源
五、Kerberos 核心安全机制
5.1 无明文密码传输
全网数据包中永远没有明文密码,仅本地哈希校验,抓包完全无法窃取密码。
5.2 防重放攻击(时间戳+临时票据)
所有认证请求带时间戳,票据短期有效,攻击者截获旧票据也无法二次使用。
5.3 双向认证机制
不仅服务验证用户,用户也可验证服务票据合法性,防止伪造钓鱼服务。
5.4 对称加密高效安全
全程对称加密,速度远快于非对称加密,适配企业大规模内网高并发场景。
六、Kerberos 优缺点深度分析
6.1 核心优点
-
极致安全:无明文、防窃听、防重放、防伪造
-
完美单点登录:一次登录,全域服务免密访问
-
高性能:对称加密,认证速度快,支撑大规模集群
-
跨平台通用:Windows AD、Linux、Hadoop、K8s、SSH 全支持
6.2 不可避免的缺点
-
强依赖 KDC 单点:KDC 宕机,全网认证瘫痪(企业多部署备用 KDC 解决)
-
时间同步要求极高:依赖时间戳,全网设备时间必须一致(默认误差 5 分钟内)
-
配置复杂、排障困难:票据过期、密钥不匹配、时间偏差都会导致登录失败
-
存在经典安全漏洞:黄金票据、白银票据、AS-REP Roasting、Kerberoast 等攻击
七、主流应用场景
-
Windows 域环境:企业电脑域登录、文件共享、域服务认证(最核心场景)
-
大数据集群:Hadoop、Spark、Hive、Kafka 集群安全认证
-
运维服务:SSH、LDAP、Samba 免密单点登录
-
云原生/企业 SSO:企业统一身份认证、跨系统免密登录
八、高频面试/工作问答
Q1:TGT 和 ST 的区别?
TGT 是「KDC 通行证」,用来换服务票据;ST 是「具体服务通行证」,用来访问业务资源。TGT 全局通用,ST 一对一专属服务。
Q2:为什么需要 Authenticator?
票据是固定的,可被截获;Authenticator 带实时时间戳,防止攻击者重放旧票据冒充身份。
Q3:Kerberos 为什么要求全网时间同步?
所有票据、认证器都依赖时间戳校验有效性,时间偏差过大会直接认证失败。
Q4:Kerberos 和 NTLM 区别?
NTLM 是旧式哈希认证,易被重放攻击、无票据、不安全;Kerberos 是新一代票据认证,安全性、性能、SSO 能力全面碾压,是目前域环境默认认证协议。
九、总结
用一句话终极总结 Kerberos:
通过 KDC 三方授信、分层票据(TGT+ST)、时间戳防重放、对称加密保安全,实现不可信网络中的安全单点登录认证协议。
只要记住:先拿入场券 TGT,再换服务票 ST,带时间戳验真身,就能彻底吃透 Kerberos 所有核心逻辑。






