Windows 中的 Kerberos 协议注册表项和 KDC 配置密钥

本文介绍有关 Kerberos 版本 5 身份验证协议和密钥分发中心 (KDC) 配置的注册表项。

原始 KB 数: 837361

总结

Kerberos 是用于验证用户或主机标识的身份验证机制。 Kerberos 是 Windows 中服务的首选身份验证方法。

如果运行的是 Windows,则可以修改 Kerberos 参数以帮助排查 Kerberos 身份验证问题或测试 Kerberos 协议。 为此,请添加或修改以下各节中列出的注册表项。

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 作为额外保护措施,请在修改注册表之前先将其备份。 如果之后出现问题,您就可以还原注册表。 有关如何备份和还原注册表的详细信息,请参阅:如何备份和还原 Windows 中的注册表

注意

完成故障排除或测试 Kerberos 协议后,删除添加的任何注册表项。 否则,计算机的性能可能会受到影响。

Parameters 键下的注册表项和值

必须将本部分中列出的注册表项添加到以下注册表子项:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters

注意

如果未在 Kerberos列出 Parameters 键,则必须创建密钥。

  • 条目:SkewTime

    • 类型:REG_DWORD

    • 默认值:5(分钟)

      此值是客户端计算机和接受 Kerberos 身份验证或 KDC 的服务器之间允许的最大时间差。

      注意

      SkewTime 在确定 Kerberos 票证有效性以重复使用时考虑。 如果过期时间小于当前时间 + SkewTime,则票证被视为过期。 例如,如果将 SkewTime 设置为 20 分钟,并且当前时间为 08:00,则 08:20 之前的到期时间的任何票证都将被视为过期。

  • 条目:LogLevel

    • 类型:REG_DWORD

    • 默认值:0

      此值指示是否在系统事件日志中记录事件。 如果此值设置为任何非零值,则会在系统事件日志中记录所有与 Kerberos 相关的事件。

      注意

      记录的事件可能包括误报,其中 Kerberos 客户端使用不同的请求标志重试,然后成功。 因此,在看到基于此设置记录的事件时,不要假定你遇到 Kerberos 问题。 有关详细信息,请参阅 如何启用 Kerberos 事件日志记录

  • 条目:MaxPacketSize

    • 类型:REG_DWORD

    • 默认值:1465(字节)

      此值是最大用户数据报协议 (UDP) 数据包大小。 如果数据包大小超过此值,则使用 TCP。

      Windows Vista 及更高版本的 Windows 中的此值的默认值为 0,因此 Windows Kerberos 客户端永远不会使用 UDP。

  • 条目:StartupTime

    • 类型:REG_DWORD

    • 默认值:120(秒)

      此值是 Windows 在 Windows 放弃之前等待 KDC 启动的时间。

  • 条目:KdcWaitTime

    • 类型:REG_DWORD

    • 默认值:10(秒)

      此值是 Windows 等待 KDC 的响应的时间。

  • 条目:KdcBackoffTime

    • 类型:REG_DWORD

    • 默认值:10(秒)

      此值是上一次调用失败时对 KDC 的连续调用之间的时间。

  • 条目:KdcSendRetries

    • 类型:REG_DWORD

    • 默认值:3

      此值是客户端尝试联系 KDC 的次数。

  • 条目:DefaultEncryptionType

    • 类型:REG_DWORD

      此值指示预身份验证的默认加密类型。 AES256 的默认值为 18 个小数

      可能的其他值:

      • AES128 的 17 个小数
      • RC4 HMAC 的 23 个小数

      此值指示预身份验证的默认加密类型。

  • 条目:FarKdcTimeout

    • 类型:REG_DWORD

    • 默认值:10(分钟)

      它是用于使域控制器在域控制器缓存中的不同站点失效的超时值。

  • 条目:NearKdcTimeout

    • 类型:REG_DWORD

    • 默认值:30(分钟)

      它是用于使域控制器缓存中同一站点中的域控制器失效的超时值。

  • 条目:StronglyEncryptDatagram

    • 类型:REG_BOOL

    • 默认值:FALSE

      此值包含一个标志,指示是否对数据报数据包使用 128 位加密。

  • 条目:MaxReferralCount

    • 类型:REG_DWORD

    • 默认值:6

      此值是客户端在客户端放弃之前所追求的 KDC 引荐数。

  • 条目:MaxTokenSize

    • 类型:REG_DWORD

    • 默认值:12000(十进制)。 从 Windows Server 2012 和 Windows 8 开始,默认值为 48000。

      此值是 Kerberos 令牌的最大值。 Microsoft建议将此值设置为小于 65535。 有关详细信息,请参阅 当用户属于多个组时 Kerberos 身份验证的问题。

  • 条目:SpnCacheTimeout

    • 类型:REG_DWORD

    • 默认值:15 分钟

      清除服务主体名称(SPN)缓存条目时,系统会使用此值。 在域控制器上,SPN 缓存处于禁用状态。 客户端和成员服务器使用此值来老化并清除负缓存条目(找不到 SPN)。 创建 15 分钟后,不会删除有效的 SPN 缓存条目(例如,非负缓存)。 但是, SPNCacheTimeout 值还用于将 SPN 缓存减少到可管理的大小 - 当 SPN 缓存达到 350 个条目时,系统将使用此值来 scavenge / cleanup 旧条目和未使用的条目。

  • 条目:S4UCacheTimeout

    • 类型:REG_DWORD

    • 默认值:15 分钟

      此值是用于限制来自特定计算机的 S4U 代理请求数的 S4U 负缓存条目的生存期。

  • 条目:S4UTicketLifetime

    • 类型:REG_DWORD

    • 默认值:15 分钟

      此值是 S4U 代理请求获取的票证的生存期。

  • 条目:RetryPdc

    • 类型:REG_DWORD

    • 默认值:0(false)

    • 可能的值:0(false)或任何非零值(true)

      此值指示客户端是否在客户端收到密码过期错误时联系身份验证服务请求的主域控制器(AS_REQ)。

  • 条目:RequestOptions

    • 类型:REG_DWORD

    • 默认值:任何 RFC 1510 值

      此值指示在票证授予服务请求(TGS_REQ)中是否必须作为 KDC 选项发送更多选项。

  • 条目:ClientIpAddresses

    • 类型:REG_DWORD

    • 默认值:0(由于动态主机配置协议和网络地址转换问题,此设置为 0)。

    • 可能的值:0(false)或任何非零值(true)

      此值指示是否在AS_REQ中添加客户端 IP 地址,以强制 Caddr 字段在所有票证中包含 IP 地址。

      对于需要客户端地址的第三方领域,可以选择性地启用地址:

      1. 打开提升的命令提示符窗口。

      2. 运行下面的命令:

        ksetup /setrealmflags <your Kerberos realm name> sendaddress
        
      3. 可以使用 /server 开关让 ksetup 在远程计算机上进行更改。

  • 条目:TgtRenewalTime

    • 类型:REG_DWORD

    • 默认值:600 秒

      此值是 Kerberos 在票证过期前尝试续订票证授予票证(TGT)之前等待的时间。

  • 条目:AllowTgtSessionKey

    • 类型:REG_DWORD

    • 默认值:0

    • 可能的值:0(false)或任何非零值(true)

      此值指示是使用初始密钥还是跨领域 TGT 身份验证导出会话密钥。 默认值为 false,因为安全原因。

      注意

      在 Windows 10 及更高版本的 Windows 中使用活动 Credential Guard,无法再与应用程序共享 TGT 会话密钥。

Kdc 键下的注册表项和值

必须将本部分中列出的注册表项添加到以下注册表子项:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc

注意

如果未在“服务”下列出 Kdc 密钥,则必须创建密钥。

  • 条目:KdcUseClientAddresses

    • 类型:REG_DWORD

    • 默认值:0

    • 可能的值:0(false)或任何非零值(true)

      此值指示是否在票证授予服务回复(TGS_REP)中添加 IP 地址。

  • 条目:KdcDontCheckAddresses

    • 类型:REG_DWORD

    • 默认值:1

    • 可能的值:0(false)或任何非零值(true)

      此值指示是否检查TGS_REQ和 TGT Caddr 字段的 IP 地址。

  • 条目:NewConnectionTimeout

    • 类型:REG_DWORD

    • 默认值:10(秒)

      此值是初始 TCP 终结点连接在断开连接之前保持打开状态以接收数据的时间。

  • 条目:MaxDatagramReplySize

    • 类型:REG_DWORD

    • 默认值:1465(十进制、字节)

      此值是TGS_REP和身份验证服务答复(AS_REP)消息中的最大 UDP 数据包大小。 如果数据包大小超过此值,KDC 将返回请求客户端切换到 TCP 的“KRB_ERR_RESPONSE_TOO_BIG”消息。

      注意

      增加 MaxDatagramReplySize 可能会增加 Kerberos UDP 数据包碎片的可能性。

      有关此问题的详细信息,请参阅 如何强制 Kerberos 在 Windows 中使用 TCP 而不是 UDP。

  • 条目:KdcExtraLogLevel

    • 类型:REG_DWORD

    • 默认值:2

    • 可能的值:

      • 1(十进制)或0x1(十六进制):审核安全事件日志中的未知 SPN 错误。 事件 ID 4769 记录失败的审核。
      • 2(十进制)或0x2(十六进制):日志 PKINIT 错误。 这会将 KDC 警告事件 ID 21(默认启用)记录到系统事件日志。 PKINIT 是 Kerberos 中用于初始身份验证的公钥加密的 Internet 工程工作队 (IETF) Internet 草稿
      • 4(十进制)或0x4(十六进制):记录所有 KDC 错误。 这会将 KDC 事件 ID 24(U2U 所需问题示例)记录到系统事件日志。
      • 8(十进制)或0x8(十六进制):在系统日志中记录 KDC 警告事件 ID 25(当请求 S4U2Self 票证的用户无权访问目标用户时)。
      • 16(十进制)或0x10(十六进制):记录加密类型的审核事件(ETYPE)和错误选项错误。 此值指示 KDC 将写入事件日志和安全事件日志中的审核信息。 事件 ID 4769 记录失败的审核。
  • 条目:DefaultDomainSupportedEncTypes

    • 类型:REG_DWORD

    • 默认值:0x27

    • 可能的值:

      默认值为0x27(DES、RC4、AES 会话密钥)。 建议将该值设置为0x3C以提高安全性,因为此值允许 AES 加密的票证和 AES 会话密钥。 如果移动到 RC4 不用于 Kerberos 协议的仅限 AES 的环境,建议将值设置为0x38。

      此值将 AES 设置为未使用默认加密类型标记的帐户上的会话密钥的默认加密类型。

      有关详细信息,请参阅 KB5021131:如何管理与 CVE-2022-37966 相关的 Kerberos 协议更改。