kerberos是ad域内建的默认认证机制,域控制器即kdc,集成as和tgs服务,通过tgt和st实现免密、双向认证;spn是服务唯一标识,缺失或冲突将导致认证失败。
在 ad 域环境中,kerberos 不是额外安装的组件,而是内建于每个域控制器中的默认认证机制。它的运行完全依托 active directory 的基础设施,用户登录、访问文件服务器、exchange 或 sharepoint 等服务时,背后几乎都由 kerberos 自动完成身份核验。
域控制器即 KDC
AD 域控制器同时承担 Kerberos 密钥分发中心(KDC)角色,集成了两个逻辑服务:
- 认证服务器(AS):处理用户首次登录请求,验证账号密码哈希,发放票据授予票据(TGT)
- 票据授予服务器(TGS):接收有效的 TGT 后,为用户签发访问具体服务(如 \fileservershare)的服务票据(ST)
所有密钥(如用户主密钥、服务密钥)均从 AD 数据库存取,无需单独维护密钥数据库。
TGT 是一切访问的起点
用户输入域凭据后,客户端向域控制器发起 AS_REQ 请求:
- 请求中包含明文用户名和时间戳(不传密码)
- 域控制器查 AD 验证该用户是否存在,并用其密码派生的密钥(如 AES256-HMAC)加密生成 TGT
- TGT 本身由 KDC 的长期密钥加密,客户端无法解密,仅能存储并后续提交给 TGS
TGT 有严格时效(默认 10 小时),且含时间戳防重放;客户端缓存它,后续数小时内无需重复输密码。
服务票据(ST)实现免密访问资源
当用户尝试访问某服务(例如打开一个域内共享文件夹)时:
- 客户端用本地缓存的 TGT 向 KDC 发起 TGS_REQ,附带目标服务主体名(SPN),如 cifs/fileserver.contoso.com
- KDC 验证 TGT 有效性后,生成 ST:其中包含客户端身份、时间戳、会话密钥,并用该服务账户的密码派生密钥加密
- 客户端将 ST 提交给目标服务器;服务器用自己的密钥解密 ST,确认用户身份及权限,再建立会话
整个过程不传输密码,不依赖网络信任,且服务端也能反向验证客户端(双向认证)。
SPN 是 Kerberos 正确路由的关键
服务主体名称(SPN)是 Kerberos 能把票据准确送到对应服务的唯一标识:
- 每个需要 Kerberos 认证的服务(如 SQL Server、IIS 网站、自定义应用)必须注册唯一 SPN,格式为 服务类/主机名.域名 或 服务类/FQDN:端口
- SPN 必须绑定到运行该服务的域用户或计算机账户(不能重复,否则导致“KRB_AP_ERR_SKEW”或票据拒绝)
- 管理员常用 setspn 命令管理 SPN,例如:setspn -S HTTP/web01.contoso.com contosowebappsvc
缺少或冲突的 SPN 是 Kerberos 认证失败最常见的原因之一。











