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

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

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

注意

家庭用户: 本文仅适用于技术支持代理和 IT 专业人员。 如果正在寻求解决问题的帮助,请 向 Microsoft 社区提问

摘要

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

首要原因

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

最高分辨率

  1. 停止目标域控制器上的 KDC 服务。 若要执行此操作,请在命令提示符处运行以下命令:

    net stop KDC
    
  2. 从源域控制器在目标域控制器上启动复制。 使用 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"
    
  3. 运行以下命令,在目标域控制器上启动 Kerberos KDC 服务:

    net start 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 知识一致性检查器 (具有 -2146893022 状态的 KCC) 、NTDS 常规或 Microsoft-Windows-ActiveDirectory_DomainService 事件记录在目录服务事件日志中。

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

      事件源 事件 ID 事件字符串
      NTDS 复制 1586 使用 PDC 模拟器主机的 Windows NT 4.0 或更低版本的复制检查点失败。

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

原因

-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 decimal/“票证和验证器不匹配”)
  • 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 请求:未知 Call=0x5 Opnum=0x3 Context=0x1 Hint=0x90 超过 135 的源 DC 上的 EPM 的 Dest DC RPC 调用
2 DC2 DC1 MSRPC MSRPC:c/o 响应:未知 Call=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 对 E351 的 RPC 绑定请求...服务 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.COMSname:E3514235-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 上的向下钻取 Comments
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,Next Protocol = TCP,数据包 ID = 31546,总 IP 长度 = 278 验证 AD 复制源 DC (称为 Dest 第一列中的计算机,列 2 中的 Src 计算机 是否拥有 跟踪中引用的 IP 地址。 x.x.x.35此示例中所示。
票证:领域: CONTOSO.COM、: SnameE3514235-4B06-11D1-AB04-00C04FC2DCD2/6f3f96d3-dfbf-4daf-9236-4d6da6909dd2/contoso.com ErrorCode: KRB_AP_ERR_MODIFIED (41)

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

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

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

连接 ping with_msdcs的完全限定的 CNAME 源域控制器的 或 nslookup 。<目标 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,从而导致 Realm 值无效,如此例中所示。 错误的主机到 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 请注意,目标 DC 可以在 DNS 查找期间查询的主要、辅助和任何第三级 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 票证。

可以使用 清除 Active Directory 复制所使用的系统帐户的 Kerberos 票证,而无需重启 KLIST -li 0x3e7 purge

域控制器可以通过停止本地或远程域控制器上的 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. contoso.com域中升级 \\dc1 + \\DC2 + \\DC3。 端到端复制不会出错。

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

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

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

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

    1. contoso.com域中升级 \\dc1 + \\DC2 + \\DC3。 端到端复制不会出错。

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

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

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

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

  • DS RPC 客户端日志记录

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

  • Kerberos 工作流

    Kerberos 工作流包括以下操作:

    • 客户端计算机调用 IntializeSecurityContext 函数 ,并指定协商安全支持提供程序 (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 复制问题的信息中所述的步骤收集信息。