// 安全研究 · 2026-07-08

Windows Kerberos 身份认证基础

概述

Kerberos 是一种用于验证用户或主机身份的网络身份验证协议。在 Windows 域环境中,Kerberos 是默认的身份验证机制,它为整个企业网络提供安全、高效的身份认证服务。

Windows Server 操作系统实现了 Kerberos 版本 5 身份验证协议及其扩展,支持公钥身份验证、授权数据传输和委派功能。Kerberos 身份验证客户端作为安全支持提供程序(SSP)实现,可通过安全支持提供程序接口(SSPI)进行访问,初始用户身份验证与 Winlogon 单一登录体系结构相集成。


Kerberos 的核心优势

单一登录(Single Sign-On)

在域或林环境中使用 Kerberos 身份验证,用户或服务只需在首次登录时输入一次凭据,即可访问管理员授权的所有资源,无需多次请求凭据。通过 Winlogon 初始登录域之后,Kerberos 会在整个林中管理用户的凭证。

相互身份验证

使用 Kerberos 协议,网络连接的两端都可以验证对方的身份。这与 NTLM 协议不同——NTLM 无法让客户端验证服务器的身份,也不支持服务器之间相互验证。Kerberos 不假设服务器一定是可信的,而是通过加密机制确保通信双方的真实性。

更高效的身份验证

在 Kerberos 出现之前,NTLM 身份验证要求应用程序服务器每次都要连接到域控制器,以验证每个客户端计算机的身份。有了 Kerberos 协议,可续订的会话票证取代了这种传递式身份验证。服务器不需要每次都连接域控制器,除非需要验证特权属性证书(PAC),从而大幅减轻了域控制器的负担。

委托身份验证

Windows 服务在代表客户端访问资源时,可以模拟客户端计算机。Kerberos 支持一种委派机制,使前端服务在连接到其他后端服务时,能够以客户端的身份进行操作。

互操作性

Microsoft 的 Kerberos V5 实现基于 IETF 的标准规范,因此能够与同样使用 Kerberos 协议的其他网络系统实现互操作。


Kerberos 核心组件

在 Windows 域环境中,Kerberos 由以下核心组件构成:

组件 角色 在 Windows 中的实现
认证服务器(AS) 验证用户身份,颁发票据授予票据(TGT) 集成在域控制器中
票据授予服务器(TGS) 根据 TGT 颁发服务票据(ST) 集成在域控制器中
密钥分发中心(KDC) 统筹管理票据的生成和颁发 域控制器的核心服务
Active Directory 域服务 提供安全帐户数据库 域控制器上的目录服务

KDC 使用 Active Directory 域服务数据库作为其安全帐户数据库。在域或林中实现默认的 Kerberos,必须有 Active Directory 域服务。


Kerberos 票据:身份证明的核心

Kerberos 通过票据(Ticket)机制实现身份验证。票据分为两种类型:

  • 票据授予票据(TGT):用户登录后获得的“主票据”,用于后续向 KDC 请求访问各类服务的权限。
  • 服务票据(ST):用户访问特定服务时获得的临时凭证,证明用户有权使用该服务。

票据包含的信息

Kerberos 票据中包含了用于验证用户身份和权限的关键数据。其中特别重要的是特权属性证书(PAC,Privilege Attribute Certificate)。

PAC 是票据授权数据字段的扩展元素,由域控制器生成并嵌入票据中。PAC 包含以下核心信息:

  • 用户的安全标识符(SID)
  • 用户所属组的成员信息(直接成员和传递成员)
  • 用户配置文件信息
  • 密码凭证信息

当用户登录时,KDC 会查询 Active Directory 获取用户的组员资格,将这些信息编码到 PAC 中,然后嵌入到 TGT 中返回给客户端。后续当客户端请求访问某个服务时,服务端可以通过检查票据中的 PAC 来判断用户是否拥有相应的权限。

PAC 的安全验证:为防止攻击者篡改 PAC 以获取未授权的权限,Windows 应用服务器在模拟用户时,会向域控制器发送 PAC 验证请求。域控制器会验证 PAC 的校验和,确认其未被篡改后返回成功代码;如果验证失败,说明 PAC 已被修改,访问将被拒绝。


Kerberos 认证流程

Kerberos 认证流程分为三个主要步骤:

第一步:客户端向 AS 请求 TGT

用户输入用户名和密码后,客户端向认证服务器(AS)发送请求。AS 验证用户身份后,生成加密的 TGT(包含 PAC)并返回给客户端。

第二步:客户端向 TGS 请求服务票据

当用户需要访问某个服务时,客户端使用 TGT 向票据授予服务器(TGS)发送请求。TGS 验证 TGT 的有效性后,生成针对特定服务的服务票据(ST)并返回给客户端。

第三步:客户端使用 ST 访问服务

客户端将服务票据发送给目标服务端,服务端验证票据后,确认用户身份并提供相应服务。在此过程中,服务端可以检查票据中的 PAC 来验证用户的授权信息。


Kerberos 票据的生命周期

票据的生命周期管理直接影响系统的安全性和用户体验。

关键生命周期参数

参数 说明 典型默认值
ticket_lifetime TGT 的有效期 10 小时
renew_lifetime TGT 可被续签的最长期限 7 天
service_ticket_lifetime 服务票据的有效期 1 小时

票据的失效机制

票据会在以下情况下失效:

  1. 自然过期:票据超过有效期(如 10 小时后)自动失效,用户需重新登录获取新票据。

  2. 主动销毁:用户可以通过 kdestroy 等命令主动清除票据缓存。

  3. 续期过期:即使 TGT 可以续期,也不能超过 renew_lifetime 的限制。超过该期限后,票据彻底无法续期。

  4. 组员变更导致 PAC 过时:当用户的组成员资格发生变化时,旧的票据虽然尚未过期,但其中的 PAC 不包含新组信息,因此访问依赖新组权限的资源时会被拒绝,实际效果等同于失效。用户需要重新登录获取包含最新组信息的新票据。


凭证缓存与环境变量

在 Windows 和 Linux/Unix 环境中,Kerberos 票据通常存储在凭证缓存中。在 Linux/Unix 系统中,KRB5CCNAME 环境变量用于指定凭证缓存(Credential Cache,简称ccache)的位置。

  • 默认值:通常为 FILE:/tmp/krb5cc_<UID>,其中 <UID> 是用户的数字 ID。
  • 其他缓存类型:包括 MEMORY:(内存缓存)、KEYRING:(内核密钥环)等。

当用户加组后,旧的票据因为 PAC 不包含新组信息,无法反映新的权限状态,因此需要销毁旧票据并重新获取新票据。


总结

Windows Kerberos 认证协议为域环境提供了安全、高效的身份验证机制。其核心特点包括:

  • 单一登录:一次登录,全网通行
  • 相互身份验证:客户端和服务端双向验证身份
  • PAC 机制:将组员资格等授权信息嵌入票据,实现权限管理
  • 票据生命周期管理:通过有效期和续期策略平衡安全性和用户体验

理解 Kerberos 的工作机制,对于管理 Windows 域环境、排查身份验证问题以及优化系统安全策略都具有重要意义。

原文 https://blog.csdn.net/2301_79518550/article/details/162705793