现象
在Active Directory 域服务(AD DS)环境中,Linux 集成帐户在使用 Kerberos 身份验证时接收 RC4 加密票证而不是高级加密标准(AES)加密票证。 若要解决此问题,请转到密钥分发中心(KDC)。
-
在事件 ID 4769 的日志中,受影响的计算机的票证加密类型的值是0x17。 这对应于 RC4 加密类型。
Source: Microsoft-Windows-Security-Auditing Event ID: 4769 Task Category: Kerberos Service Ticket Operations Level: Information Computer: MyDC.contoso.com Description: A Kerberos service ticket was requested. … Service Information: Service Name: MYLINUX Service ID: CONTOSO\MYLINUX Network Information: Client Address: ::ffff:10.20.30.40 Client Port: 57499 Additional Information: Ticket Options: 0x40810000 Ticket Encryption Type: 0x17 Failure Code: 0x0 Transited Services: - -
运行
klist命令后,KerbTicket 加密类型的值为 RSADSI RC4-HMAC(NT)。 这表示加密类型为 RC4。C:\> Klist get MYLINUX@CONTOSO.COM Current LogonId is 0:0xb532bccf A ticket to MYLINUX@CONTOSO.COM has been retrieved successfully. Cached Tickets: (2) … #1> Client: MyUser@CONTOSO.COM Server: MYLINUX@CONTOSO.COM KerbTicket Encryption Type: RSADSI RC4-HMAC(NT) Ticket Flags 0x40a50000 -> forwardable renewable pre_authent ok_as_delegate name_canonicalize Start Time: <DateTime> (local) End Time: <DateTime> (local) Renew Time: <DateTime> (local) Session Key Type: AES-256-CTS-HMAC-SHA1-96 Cache Flags: 0 Kdc Called: MyDC.Contoso.com
注意
将 msDS-SupportedEncryptionTypes 属性值设置为 24(0x18), 以强制 AES256 或 AES128 加密无法解决问题。 同样,禁用 RC4 加密,并通过使用 网络安全:配置 Kerberos 允许的加密类型 组策略对象(GPO)启用 AES 加密,无法解决该问题。
原因
出现此问题的原因是 Linux 的 operatingSystemVersion 属性值设置为 3.10.0x。 AD DS 从左到右读取属性值,在第一个小数点处停止(.)如果值的第一个字符是数字,并且该值小于 6,则 KDC 确定请求的操作系统可能不支持较新的加密类型。 在这种情况下,值为 3。 因此,KDC 将忽略 msDS-SupportedEncryptionTypes ,并将使用域的假定支持的加密类型。 有关详细信息,请参阅 KDC DefaultDomainSupportedEncTypes 注册表配置。
此行为是特意这样设计的。 它容纳不支持 msDS-SupportedEncryptionTypes** 属性或 AES 加密类型的较旧版本的 Windows(包括 Windows 2000 Server、Windows Server 2003 和 Windows XP**)。 以下规范描述了此设计:
- 如果服务器或服务具有使用支持的加密类型填充的KerbSupportedEncryptionTypes属性<58>,那么 KDC 应在 TGS-REP 消息的加密部分 ([Referrals-11] 附录 A) 中返回一个 PA-DATA 结构,其中 padata-type 设置为 PA-SUPPORTED-ENCTYPES [165],以指示服务器或服务支持的加密类型(第2.2.7节)。 如果不是这样,KDC 应<60> 检查服务器或服务帐户的 UseDESOnly 标志。
- <58> 第 3.3.5.7 节:如果帐户用于计算机对象,并且 OperatingSystemVersion([MS-ADA3] 第 2.56 节)的值小于 6,则 KerbSupportedEncryptionTypes 被视为未填充。 如果请求的计算机运行 Windows 2000、Windows XP 或 Windows Server 2003,此方法可确保不会尝试更新的加密类型。 这些系统不支持设置 KerbSupportedEncryptionTypes。
有关详细信息,请参阅 TGS Exchange和 Kerberos 协议扩展附录 A58<>规范。
解决方案
若要解决此问题,请使用以下一种方法:
- 删除 operatingSystemVersion 属性。
- 设置属性值,使第一个字符不是数字数字。 例如,将该值设置为 Linux 3.10.0x ,而不是 3.10.0x。
- 升级到符合规范的更新的系统版本。 从第三方供应商(例如 Linux)获取更新。
有关 KDC 如何选择加密类型的详细信息,请参阅 Kerberos Exchange 中的加密类型选择。