Active Directory 复制错误 -2146893022 (0x80090322):目标主体名称不正确

本文介绍如何排查 Active Directory 复制失败并生成错误(-2146893022:目标主体名称不正确)的问题。

适用于: Windows Server(所有支持的版本)
原始 KB 数: 2090913

注意

家庭用户: 本文仅适用于技术支持代理和 IT 专业人员。 如果你正在寻找有关问题的帮助,请 询问Microsoft社区

总结

当源域控制器不解密目标(目标)域控制器提供的服务票证时,会发生此错误。 目标域控制器是请求更改的域控制器。

首要原因

目标域控制器从 Kerberos 密钥分发中心(KDC)接收服务票证。 KDC 具有源域控制器的旧版密码。

最高分辨率

  1. 在目标域控制器上禁用 KDC 服务。 若要执行此操作,请运行以下命令之一:

    • 命令提示符

      sc config KDC start=Disabled
      
    • PowerShell

      Set-Service -Name KDC -StartupType Disabled
      
  2. 重新启动域控制器。

  3. 从源域控制器开始对目标域控制器进行复制。 使用 AD 站点和服务或 Repadmin

    使用 repadmin

    Repadmin /replicate destinationDC sourceDC DN_of_Domain_NC
    

    例如,如果复制失败 ContosoDC2.contoso.com,请运行以下命令 ContosoDC1.contoso.com

    Repadmin /replicate ContosoDC2.contoso.com ContosoDC1.contoso.com "DC=contoso,DC=com"
    
  4. 通过运行以下命令之一,将目标域控制器上的 KDC 服务设置回自动:

    • 命令提示符

      sc config KDC start=auto
      
    • PowerShell

      Set-Service -Name KDC -StartupType Auto
      
  5. 通过运行以下命令之一,在目标域控制器上启动 KDC 服务:

    • 命令提示符

      net start KDC
      
    • PowerShell

      Start-Service -Name KDC
      

如果无法解决问题,请参阅“解决方法部分,了解使用netdom resetpwd命令重置源域控制器的计算机帐户密码的替代解决方案。 如果这些步骤无法解决问题,请查看本文的其余部分。

现象

出现此问题时,会出现以下一个或多个症状:

  • DCDIAG 报告 Active Directory 复制测试失败并返回错误 -2146893022:目标主体名称不正确。

    [复制检查,<DC 名称>] 最近的复制尝试失败:
    从 <源 DC> 到 <目标 DC>
    命名上下文: <目录分区的 DN 路径>
    复制生成了错误(-2146893022):
    目标主体名称不正确。
    失败发生在 <日期><时间>。
    上次成功发生在 <日期><时间>。
    <自上次成功以来发生 X> 次失败。

  • Repadmin.exe报告复制尝试失败,并报告 -2146893022 (0x80090322) 的状态

    Repadmin 通常指示 -2146893022 (0x80090322) 状态的命令包括但不限于以下命令:

    • REPADMIN /REPLSUM

    • REPADMIN /SHOWREPL

    • REPADMIN /SHOWREPS

    • REPADMIN /SYNCALL

      指示目标主体名称错误的示例输出REPADMIN /SHOWREPSREPADMIN /SYNCALL如下所示:

      c:\> repadmin /showreps  
      <site name>\<destination DC>
      DC Options: IS_GC
      Site Options: (none)
      DC object GUID: <NTDS settings object object GUID>
      DChttp://bemis/13/Pages/2090913_en-US.aspx invocationID: <invocation ID string>
      
      ==== INBOUND NEIGHBORS ======================================
      
      DC=<DN path for directory partition>
           <site name>\<source DC via RPC
               DC object GUID: <source DCs ntds settings object object guid>
               Last attempt @ <date> <time> failed, result -2146893022 (0x80090322):
      The target principal name is incorrect.
               <X #> consecutive failure(s).
               Last success @ <date> <time>.
      
      c:\> repadmin /syncall /Ade
      Syncing all NC's held on localhost.
      Syncing partition: DC=<Directory DN path>
      CALLBACK MESSAGE: Error contacting server CN=NTDS Settings,CN=<server name>,CN=Servers,CN=<site name>,CN=Sites,CN=Configuration,DC=<forest root domain> (network error): -2146893022 (0x80090322):
      
  • Active Directory 站点和服务中的“立即复制”命令将返回以下错误消息:
    目标主体名称不正确

    右键单击源 DC 中的连接对象,然后选择 “复制”现在 会失败。 屏幕上的错误消息如下所示:

    对话框标题文本:立即复制
    对话框消息文本:尝试联系域控制器 <源 DC 名称>期间发生以下错误:
    目标主体名称不正确
    对话框中的按钮:确定

    • NTDS 知识一致性检查器(KCC)、NTDS 常规或 Microsoft-Windows-ActiveDirectory_DomainService 事件(状态 为 -2146893022 )记录在目录服务事件日志中。

      通常引用 -2146893022 状态的 Active Directory 事件包括但不限于以下事件:

      事件源 事件 ID 事件字符串
      NTDS 复制 1586 PDC 模拟器主服务器的 Windows NT 4.0 或更早版本的复制检查点未成功。

      如果 PDC 模拟器主角色在下一个成功检查点之前将 PDC 模拟器主角色传输到本地域控制器,则安全帐户管理器 (SAM) 数据库与运行 Windows NT 4.0 及更早版本的域控制器完全同步可能会发生。
      NTDS KCC 1925 尝试为以下可写目录分区建立复制链接失败。
      NTDS KCC 1308 知识一致性检查器(KCC)检测到连续尝试使用以下域控制器进行复制失败。
      Microsoft-Windows-ActiveDirectory_DomainService 1926 尝试建立指向具有以下参数的只读目录分区的复制链接失败
      NTDS 站点间消息传送 1,373 站点间消息传送服务无法通过以下传输接收以下服务的任何消息。 消息查询失败。

原因

-2146893022\0x80090322 SEC_E_WRONG_PRINCIPAL\ 错误代码不是 Active Directory 错误。 对于不同的根本原因,可能由以下下层组件返回:

  • RPC
  • Kerberos
  • SSL
  • LSA
  • NTLM

Windows 代码映射到 -2146893022 0x80090322\SEC_E_WRONG_PRINCIPAL\的 Kerberos 错误包括:

  • KRB_AP_ERR_MODIFIED(0x29/41 个小数/KRB_APP_ERR_MODIFIED)
  • KRB_AP_ERR_BADMATCH (0x24h/36 小数/“票证和验证器不匹配”)
  • KRB_AP_ERR_NOT_US (0x23h/35 小数/“票证不适合我们” )

-2146893022\0x80090322 SEC_E_WRONG_PRINCIPAL\的一些特定根本原因包括:

  • DNS、WINS、HOST 或 LMHOST 文件中的名称到 IP 映射不正确。 它导致目标域控制器在不同的 Kerberos 领域连接到错误的源域控制器。

  • KDC 和源域控制器具有不同版本的源域控制器的计算机帐户密码。 因此,Kerberos 目标计算机(源域控制器)无法解密 Kerberos 客户端(目标域控制器)发送的 Kerberos 身份验证数据。

  • KDC 找不到要查找源域控制器的 SPN 的域。

  • Kerberos 加密帧中的身份验证数据由硬件(包括网络设备)、软件或攻击者修改。

解决方法

  • dcdiag /test:checksecurityerror在源 DC 上运行

    由于简单的复制延迟(尤其是升级后或复制失败),SPN 可能缺失、无效或重复。

    重复的 SPN 可能会导致错误的 SPN 命名映射。

    DCDIAG /TEST:CheckSecurityError 可以检查是否存在缺失或重复的 SPN 和其他错误。

    在所有源域控制器的控制台上运行此命令,这些域控制器的出站复制失败并 出现SEC_E_WRONG_PRINCIPAL 错误。

    可以使用以下语法检查针对特定位置的 SPN 注册:

    dcdiag /test:checksecurityerror replsource:<remote dc>
    
  • 验证 Kerberos 加密的网络流量是否已达到预期的 Kerberos 目标(名称到 IP 映射)

    假设出现了下面这种情景:

    • 入站复制 Active Directory 目标域控制器在目录的本地副本中搜索源域控制器 NTDS 设置对象的 objectGUID

    • 域控制器查询活动 DNS 服务器以获取匹配的 DC GUIDED CNAME 记录。 然后将其映射到包含源域控制器 IP 地址的主机 A/AAAA 记录。

      在此方案中,Active Directory 运行名称解析回退。 它包括对 DNS 中完全限定的计算机名或 WINS 中单标签主机名的查询。

      注意

      DNS 服务器还可以在回退方案中执行 WINS 查找。

以下情况可能导致目标域控制器将 Kerberos 加密的流量提交到错误的 Kerberos 目标:

  • 过时 NTDS 设置对象
  • DNS 和 WINS 主机记录中的错误名称到 IP 映射
  • HOST 文件中的过时条目

若要检查此条件,请执行网络跟踪或手动验证名称 DNS/NetBIOS 名称查询是否解析为目标计算机。

方法 1:网络跟踪方法(由网络监视器 3.3.1641 分析,启用完全默认分析器)

下表显示了当目标 DC1 入站从源 DC2 复制 Active Directory 目录时发生的网络流量的概要。

F# SRC DEST 协议 Frame 注释
1 DC1 DC2 MSRPC MSRPC:c/o 请求:未知调用=0x5 Opnum=0x3 Context=0x1 Hint=0x90 在源 DC 上对 EPM 的 Dest DC RPC 调用超过 135
2 DC2 DC1 MSRPC MSRPC:c/o 响应:未知调用=0x5 Context=0x1 Hint=0xF4 Cancels=0x0 对 RPC 调用方进行 EPM 响应
3 DC1 DC2 MSRPC MSRPC:c/o Bind: UUID{E3514235-4B06-11D1-AB04-00C04FC2DCD2} DRSR(DRSR) Call=0x2 Assoc Grp=0x0 Xmit=0x16D0 Recv=0x16D0 RPC 绑定请求到 E351...服务 UUID
4 DC2 DC1 MSRPC MSRPC:c/o Bind Ack: Call=0x2 Assoc Grp=0x9E62 Xmit=0x16D0 Recv=0x16D0 RPC 绑定响应
5 DC1 KDC KerberosV5 KerberosV5:TGS 请求领域: CONTOSO.COM SnameE3514235-4B06-11D1-AB04-00C04FC2DCD2/6f3f96d3-dfbf-4daf-9236-4d6da6909dd2/contoso.com 源 DC 复制 SPN 的 TGS 请求。 此操作不会在目标 DC 的线路上显示为 KDC。
6 KDC DC1 KerberosV5 KerberosV5:TGS 响应 Cname: CONTOSO-DC1$ 对目标 DC contoso-dc1 的 TGS 响应。 此操作不会在目标 DC 的线路上显示为 KDC。
7 DC1 DC2 MSRPC MSRPC:c/o Alter Cont: UUID{E3514235-4B06-11D1-AB04-00C04FC2DCD2} DRSR(DRSR) Call=0x2 AP 请求
8 DC2 DC1 MSRPC MSRPC:c/o Alter Cont Resp: Call=0x2 Assoc Grp=0x9E62 Xmit=0x16D0 Recv=0x16D0 AP 响应。
7 上的向下钻取 8 上的向下钻取 注释
MSRPC MSRPC:c/o Alter Cont: UUID{E3514235-4B06-11D1-AB04-00C04FC2DCD2} DRSR(DRSR) Call=0x2 MSRPC:c/o Alter Cont Resp: Call=0x2 Assoc Grp=0xC3EA43 Xmit=0x16D0 Recv=0x16D0 DC1 通过 DC2 上的 EPM 返回的端口连接到 DC2 上的 AD 复制服务。
Ipv4:Src = x.x.x.245,Dest = x.x.x.35,下一协议 = TCP,数据包 ID =,IP 总长度 = 0 Ipv4:Src = x.x.x.35,Dest = x.x.x.245,下一协议 = TCP,数据包 ID = 31546,IP 总长度 = 278 验证 AD 复制源 DC(称为Dest第一列中的计算机)和第 2 列中 Src 计算机是否拥有跟踪中引用的 IP 地址。 x.x.x.35在此示例中。
票证:领域: CONTOSO.COMSname: E3514235-4B06-11D1-AB04-00C04FC2DCD2/6f3f96d3-dfbf-4daf-9236-4d6da6909dd2/contoso.com ErrorCode:KRB_AP_ERR_MODIFIED (41)

领域: <验证源 DC 返回的领域是否与目标 DC> 预期的 Kerberos 领域匹配。

Sname<验证 AP 响应中的匹配项是否 sName 包含预期源 DC 的主机名,而不是目标因名称到 IP 映射问题>而错误解决的另一个 DC。
在列 1 中,记下目标 Kerberos 领域的领域 contoso.com ,如下所示,源域控制器复制 SPN (Sname) 由 Active Directory 复制服务 UUID (E351...)与源域控制器 NTDS 设置对象的对象 GUID 连接在一起。

GUIDED 值 6f3f96d3-dfbf-4daf-9236-4d6da6909dd2 右侧 E351...复制服务 UUID 是源域控制器 NTDS 设置对象的对象 GUID。 它当前在 Active Directory 的目标域控制器副本中定义。 从源 DC 的控制台运行时repadmin /showreps,验证此对象 GUID 是否与 DSA 对象 GUID 字段中的值匹配。

ping 个或多个 nslookup 源域控制器完全限定的 CNAME 连接with_msdcs。<目标 DC 控制台中的林根 DNS 名称> 必须返回源域控制器当前 IP 地址:

ping 6f3f96d3-dfbf-4daf-9236-4d6da6909dd2._msdcs.contoso.com

nslookup -type=cname 6f3f96d3-dfbf-4daf-9236-4d6da6909dd2._msdcs.<forest root domain> <DNS Server IP>

在列 2 中显示的回复中,将焦点放在 Sname 字段上,并验证它是否包含 AD 复制源 DC 的主机名。

错误的名称到 IP 映射可能导致目标 DC 连接到无效目标领域的 DC,导致领域值无效,如本例所示。 主机到 IP 映射错误可能导致 DC1 连接到同一域中的 DC3。 它仍会生成 KRB_AP_ERR_MODIFIED,但第 8 帧中的领域名称将匹配第 7 帧中的领域。

方法 2:名称到 IP 映射验证(不使用网络跟踪)

在源域控制器的控制台中:

命令 注释
IPCONFIG /ALL |MORE 请注意目标域控制器使用的 NIC 的 IP 地址
REPADMIN /SHOWREPS |MORE 注意 DSA 对象 GUID 的值。 它表示 Active Directory 的源域控制器副本中源域控制器 NTDS 设置对象的对象 GUID。

从目标 DC 的控制台:

命令 注释
IPCONFIG /ALL |MORE 请注意,在 DNS 查找期间,目标 DC 可以查询的主要、辅助服务器和任何第三级 DNS 服务器。
REPADMIN /SHOWREPS |MORE 在输出的 repadmin “入站邻居”部分中,找到目标 DC 从源 DC 复制公共分区的复制状态。

在源 DC 的控制台上运行时,报表的复制状态部分中为源 DC 列出的 DSA 对象 GUID 应与标头中列出的 /showreps 对象 GUID 匹配。
IPCONFIG /FLUSHDNS 清除 DNS 客户端缓存
启动>运行>记事本
%systemroot%\system32\drivers\etc\hosts
检查引用源域控制器单标签或完全限定 DNS 名称的主机到 IP 映射。 如果存在,请将其删除。 保存对 HOST 文件的更改。

运行 Nbtstat -R (大写 R)以刷新 NetBIOS 名称缓存。
NSLOOKUP -type=CNAME <object guid of source DCs NTDS Settings object>._msdcs.<forest root DNS name> <primary DNS Server IP>

对目标 DC 上配置的每个附加 DNS 服务器 IP 重复此操作。

示例:c:\>nslookup -type=cname 8a7baee5-cd81-4c8c-9c0f-b10030574016._msdcs.contoso.com 152.45.42.103
验证返回的 IP 是否与上面从源 DC 的控制台记录的目标 DC 的 IP 地址匹配。

对目标 DC 上配置的所有 DNS 服务器 IP 重复此操作。
nslookup -type=A+AAAA <FQDN of source DC> <DNS Server IP> 检查目标 DC 上配置的所有 DNS 服务器 IP 上的重复主机 A 记录。
nbtstat -A <IP address of DNS Server IP returned by nslookup> 应返回源 DC 的名称。

注意

定向到非域控制器(由于名称到 IP 映射错误)或当前没有 E351 的域控制器的复制请求...向终结点映射器注册的服务 UUID 返回错误 1753:终结点映射器不再提供终结点。

由于密码不匹配,Kerberos 目标无法解密 Kerberos 身份验证的数据。

如果源域控制器的密码在 KDC 和源域控制器的 Active Directory 目录副本之间有所不同,则可能会出现此问题。 如果源域控制器计算机帐户密码未自行用作 KDC,则目标域控制器的副本可能已过时。

复制失败可能会阻止域控制器为给定域中的域控制器提供当前密码值。

每个域控制器都为其域领域运行 KDC 服务。 对于同一领域事务,目标域控制器倾向于从自身获取 Kerberos 票证。 但是,它可能会从远程域控制器获取票证。 引荐用于从其他领域获取 Kerberos 票证。

NLTEST /DSGETDC:<DNS domain of target domain> /kdc靠近SEC_E_WRONG_PRINCIPAL错误的近时间内,在提升的命令提示符下运行的命令可用于快速识别 Kerberos 客户端的目标 KDC。

确定 Kerberos 客户端从哪个域控制器获取票证的明确方法是获取网络跟踪。 网络跟踪中缺少 Kerberos 流量可能表示:

  • Kerberos 客户端已获取票证。
  • 它从自己那里得到门票。
  • 网络跟踪应用程序无法正确分析 Kerberos 流量。

可以使用 KLIST purge 命令在提升的命令提示符下清除已登录用户帐户的 Kerberos 票证。

可以在不使用 KLIST -li 0x3e7 purge重启的情况下清除 Active Directory 复制所使用的系统帐户的 Kerberos 票证。

域控制器可以通过在本地或远程域控制器上停止 KDC 服务来使用其他域控制器。

用于 REPADMIN /SHOWOBJMETA 检查与密码相关的属性(dBCSPwd、UnicodePWD、NtPwdHistory、PwdLastSet、lmPwdHistory)中源域控制器的源域控制器的明显版本号差异,以及源域控制器的目标域控制器的 Active Directory 目录副本。

C:\>repadmin /showobjmeta <source DC> <DN path of source DC computer account>
C:\>repadmin /showobjmeta <KDC selected by destination DC> <DN path of source DC computer account>

需要在需要密码重置的域控制器的控制台上以提升的命令提示符运行的 netdom resetpwd /server:<DC to direct password change to> /userd:<user name> /passwordd:<password> 命令可用于重置域控制器计算机帐户密码。

排查特定方案问题

  • 针对导致目标域控制器从错误源拉取的错误主机到 IP 映射的重现步骤。

    1. 在域中提升 \\dc1 + \\DC2 + \\DC3contoso.com。 端到端复制不会出错。

    2. 停止 \\DC1 和 \\DC2 上的 KDC 以强制在网络跟踪中观察到的现装 Kerberos 流量。 端到端复制不会出错。

    3. 为 \\DC2 创建一个主机文件条目,该条目指向远程林中 DC 的 IP 地址。 在主机 A/AAAA 记录中模拟错误的主机到 IP 映射,或者可能是目标域控制器的 Active Directory 目录副本中的过时 NTDS 设置对象。

    4. 在 \\DC1 的主机上启动 Active Directory 站点和服务。 从 \\DC2 右键单击 \\DC1 的入站连接对象 ,并记下 目标帐户名称复制 错误。

  • 针对 KDC 与源域控制器之间的源域控制器密码不匹配的重现步骤。

    1. 在域中提升 \\dc1 + \\DC2 + \\DC3contoso.com。 端到端复制不出错。

    2. 停止 \\DC1 和 \\DC2 上的 KDC 以强制在网络跟踪中观察到的现装 Kerberos 流量。 端到端复制不出错。

    3. 禁用 KDC \\DC3 上的入站复制,以模拟 KDC 上的复制失败。

    4. 在 \\DC2 上重置计算机帐户密码三次或三次以上,以便 \\DC1 和 \\DC2 都具有 \\DC2 的当前密码。

    5. 在 \\DC1 的主机上启动 Active Directory 站点和服务。 右键单击 \\DC1 的来自 \\DC2 的入站连接对象,并注意 目标帐户名称复制错误不正确

  • DS RPC 客户端日志记录

    设置 NTDS\Diagnostics Loggings\DS RPC Client = 3。 触发复制。 查找任务类别事件 1962 + 1963。 请注意目录服务字段中列出的完全限定cname。 目标域控制器应能够 ping 此记录,并将返回的地址映射到源 DC 的当前 IP 地址。

  • Kerberos 工作流

    Kerberos 工作流包括以下操作:

    • 客户端计算机调用 IntializeSecurityContext 函数 ,并指定 Negotiate 安全支持提供程序 (SSP)。

    • 客户端与其 TGT 联系 KDC,并请求目标域控制器的 TGS 票证。

    • KDC 在目标域控制器领域搜索源(351 或主机名)的全局目录。

    • 如果目标域控制器位于目标域控制器领域,KDC 会向客户端提供服务票证。

    • 如果目标域控制器位于不同的领域,KDC 会向客户端提供引荐票证。

    • 客户端联系目标域控制器域中的 KDC 并请求服务票证。

    • 如果源域控制器的 SPN 在领域不存在,则会收到 KDC_ERR_S_PRINCIPAL_UNKNOWN 错误。

    • 目标域控制器联系目标并显示其票证。

    • 如果目标域控制器拥有票证中的名称并可以解密它,身份验证将正常工作。

    • 如果目标域控制器托管 RPC 服务器服务 UUID,则在线 Kerberos KRB_AP_ERR_NOT_USKRB_AP_ERR_MODIFIED 错误将重新映射到以下服务器:

      -2146893022 decimal / 0x80090322 / SEC_E_WRONG_PRINCIPAL / “目标主体名称不正确”

数据收集

如果需要Microsoft支持方面的帮助,建议按照使用 TSS 收集 Active Directory 复制问题的信息中所述的步骤收集信息。