访问受信任域中的资源时出现“不支持的 etype”错误

原始 KB 编号: 4492348

症状

Active Directory 域服务 (AD DS) 林子域中的计算机无法访问驻留在同一林中不同域中的服务。 如果对与客户端计算机之间的通信运行网络跟踪,则跟踪包含以下 Kerberos 消息:

6 9:35:19 AM 8/14/2018   17.8417442   192.168.1.101   192.168.1.2  KerberosV5   KerberosV5:AS Request Cname: Administrator Realm: contoso.com Sname: krbtgt/contoso.com   {TCP:4, IPv4:1}  
  
7 9:35:19 AM 8/14/2018   17.8452544   192.168.1.2   192.168.1.101  KerberosV5   KerberosV5:KRB_ERROR - KDC_ERR_ETYPE_NOSUPP (14)  {TCP:4, IPv4:1}  

在子域的域控制器上,事件查看器记录以下事件 14 条目:

Log Name: System  
Source: Microsoft-Windows-Kerberos-Key-Distribution-Center  
Event ID: 14  
Task Category: None  
Level: Error  
Keywords: Classic  
Description:  
While processing an AS request for target service krbtgt, the account Administrator did not have a suitable key for generating a Kerberos ticket (the missing key has an ID of 1). The requested etypes : 18 17 3. The accounts available etypes : 23 -133 -128. Changing or resetting the password of Administrator will generate a proper key.  

原因

配置子域 (或仅配置客户端) 时,会出现此问题,如下所示:

  • 禁用 RC4_HMAC-MD5 加密类型,使 AES128-CTS-HMAC-SHA1-96 和 AES256-CTS-HMAC-SHA1-96 加密类型保持启用状态。
  • 禁用 NTLM 身份验证。

Kerberos 加密类型

RC4 加密的安全性低于较新的加密类型 AES128-CTS-HMAC-SHA1-96 和 AES256-CTS-HMAC-SHA1-96。 安全指南(如 Windows 10 安全技术实施指南) 提供了有关通过将计算机配置为仅使用 AES128 和/或 AES256 加密来提高计算机安全性的说明 (请参阅 必须配置 Kerberos 加密类型,以防止) 使用 DES 和 RC4 加密套件

此类客户端可以继续连接到其自己的域中使用 AES128 或 AES256 加密的服务。 但是,其他因素可能会阻止客户端连接到另一个受信任域中的类似服务,即使这些服务也使用 AES128 或 AES256 加密。

在非常高的级别上,域控制器 (DC) 负责管理其自己的域中的访问请求。 作为 Kerberos 身份验证过程的一部分,DC 会检查客户端和服务是否可以使用相同的 Kerberos 加密类型。 但是,当客户端请求访问其他受信任域中的服务时,客户端的 DC 必须将客户端“引用”到服务域中的 DC。 当 DC 生成引荐票证时,它比较客户端和信任的加密类型,而不是比较客户端和服务的加密类型。

出现此问题的原因是信任本身的配置。 在 Active Directory 中,域对象将受信任的域对象关联 (表示其信任的每个域的 TDO) 。 TDO 的属性描述信任关系,包括信任支持的 Kerberos 加密类型。 子域和父域之间的默认关系是支持 RC4 加密类型的双向可传递信任。 父域和子域都有描述此关系的 TDO,包括加密类型。

当客户端联系 child.contoso.com DC 以请求访问服务时,DC 确定该服务位于受信任的域 contoso.com中。 DC 检查信任配置,以确定信任支持的加密类型。 默认情况下,信任支持 RC4 加密,但不支持 AES128 或 AES256 加密。 另一方面,客户端无法使用 RC4 加密。 DC 无法识别常见的加密类型,因此无法生成引荐票证,并且请求失败。

NTLM 身份验证

Kerberos 身份验证失败后,客户端会尝试回退到 NTLM 身份验证。 但是,如果 NTLM 身份验证被禁用,则客户端没有其他替代方法。 因此,连接尝试失败。

解决方案

要解决此问题,请使用以下方法:

  • 方法 1:将信任配置为支持 AES128 和 AES 256 加密以及 RC4 加密。
  • 方法 2:将客户端配置为除 AES128 和 AES256 加密外还支持 RC4 加密。
  • 方法 3:配置信任以支持 AES128 和 AES 256 加密,而不是 RC4 加密。

选择取决于你的安全需求,以及你对最大程度地减少中断或保持向后兼容性的需求。

方法 1:配置信任以支持 AES128 和 AES 256 加密以及 RC4 加密

此方法将较新的加密类型添加到信任配置,并且不需要对客户端或服务进行任何更改。 在此方法中 ksetup ,使用命令行工具配置信任。

若要配置信任的 Kerberos 加密类型,请在受信任域中的 DC 上打开命令提示符窗口,然后输入以下命令:

ksetup /setenctypeattr <trustingdomain> RC4-HMAC-MD5 AES128-CTS-HMAC-SHA1-96 AES256-CTS-HMAC-SHA1-96

注意

在此命令中, <trustingdomain> 表示 (FQDN) 信任域的完全限定域名。

在示例中 contoso.com ,服务所在的根域 () , child.contoso.com 是客户端) 所在的子域 (,在 DC 上 contoso.com 打开命令提示符窗口,然后输入以下命令:

ksetup /setenctypeattr child.contoso.com RC4-HMAC-MD5 AES128-CTS-HMAC-SHA1-96 AES256-CTS-HMAC-SHA1-96

此命令完成后, child.contoso.com DC 可以成功生成客户端可用于访问 DC 的 contoso.com 引荐票证。

由于两个域之间的关系是双向可传递信任,因此请在 DC 上打开命令提示符窗口,然后输入以下命令来配置信任的另一 child.contoso.com 端:

ksetup /setenctypeattr contoso.com RC4-HMAC-MD5 AES128-CTS-HMAC-SHA1-96 AES256-CTS-HMAC-SHA1-96

此命令完成后, contoso.com DC 可以为中 contoso.com 无法使用 RC4 加密但必须使用 中的 child.contoso.com资源的任何客户端生成引荐票证。

有关 ksetup 工具的详细信息,请参阅 ksetup

方法 2:将客户端配置为除 AES128 和 AES256 加密外还支持 RC4 加密

此方法涉及更改客户端的配置,而不是信任。 可以更改单个客户端的配置,或使用组策略更改域中多个客户端的配置。 但是,此配置更改的主要缺点是,如果为了提高安全性禁用了 RC4 加密,则可能无法回滚该更改。

有关更改客户端可以使用的加密类型的完整说明,请参阅 适用于 Kerberos 的 Windows 配置支持的加密类型

方法 3:配置信任以支持 AES128 和 AES 256 加密,而不是 RC4 加密

此方法类似于 中配置信任属性的方法 1。

对于 Windows 林信任,信任的双方都支持 AES。 因此,信任上的所有票证请求都使用 AES。 但是,检查引荐票证的第三方 Kerberos 客户端可能会通知你票证使用客户端不支持的加密类型。 若要继续允许此类客户端检查票证,请将其更新为支持 AES。

使用此方法时,请使用 Active Directory 域和信任 MMC 管理单元配置信任。 若要使用此方法,请执行以下步骤:

  1. 在“Active Directory 域和信任”中,导航到示例中的受信任域对象 (,contoso.com) 。 右键单击对象,选择 “属性”,然后选择“ 信任”。

  2. “信任此域的域 (传入信任) ”框中,选择示例中的信任域 (, child.domain.com) 。

  3. 依次选择 “属性”、“ 其他域支持 Kerberos AES 加密”和“ 确定”。

    子域的属性的屏幕截图,“属性”窗口包括其他域支持 Kerberos AES 加密复选框。

    注意

    若要验证信任配置,请在“信任域”对话框中选择“ 验证 ”。

    重要

    对于单向信任,受信任域将信任域列为传入信任,信任域将受信任域列为传出信任。

    如果关系是双向信任,则每个域将另一个域列为传入和传出信任。 在此配置中,请确保检查 信任此域 (传入信任) 的域和 此域信任的域 (传出信任) 的域配置。 在这两种情况下,都必须选中复选框。

  4. 在“ 信任” 选项卡上,单击“ 确定”。

  5. 导航到信任域的域对象 (child.contoso.com) 。

  6. 重复步骤 1 - 4 以确保此域的信任配置镜像其他域的信任配置 (在这种情况下,传入和传出信任列表包括 contoso.com) 。

更多信息

有关 TDO 的详细信息,请参阅以下文章:

有关 Kerberos 加密类型的详细信息,请参阅以下文章: