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

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

原始产品版本:   Windows Server 2012 R2
原始 KB 数:   2090913

备注

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

摘要

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

主要原因

目标域控制器接收来自 Kerberos 密钥发行中心的服务票证 (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 Name> ]最近的复制尝试失败:
    从 <source DC><destination DC>
    命名上下文: <DN path of directory partition>
    复制生成错误 (-2146893022) :
    目标主体名称不正确。
    发生故障 <date> <time> 。
    上一次成功发生 <date> <time> 。
    <X> 上次成功之后发生的故障。

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

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

    • DMIN /REPLSUMREPA

    • REPADMIN /SHOWREPL

    • REPADMIN /SHOWREPL

    • REPADMIN /SYNCALL

      中的示例输出 REPADMIN /SHOWREPS 和表明 REPADMIN /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 中的 connection 对象,然后选择 " 立即复制 " 失败,并返回 目标主体名称不正确 的消息。 屏幕上显示的错误消息如下所示:

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

  • 在目录服务事件日志中记录了具有 -2146893022状态的 ntds KCC、ntds 常规或Microsoft Windows ActiveDirectory_DomainService事件。

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

    事件源 事件 ID 事件字符串
    NTDS 复制 1586 带有 PDC 仿真主机的 Windows NT 4.0 或更早版本的复制检查点未成功。

    如果在下一次成功的检查点之前将 PDC 仿真主机角色转移到本地域控制器,则安全帐户管理器 (SAM) 4.0 数据库的完全同步可能会发生。
    NTDS KCC 1925 尝试为以下可写目录分区建立复制链接时失败。
    NTDS KCC 1308 知识一致性检查器 (KCC) 检测到与以下域控制器进行复制的连续尝试已持续失败。
    Microsoft-ActiveDirectory_DomainService 1926 尝试使用以下参数建立到只读目录分区的复制链接失败
    NTDS 站点间消息 1373 站点间消息服务无法通过以下传输接收以下服务的任何消息。 邮件查询失败。

原因

-2146893022 \ 0x80090322 \ SEC_E_WRONG_PRINCIPAL错误代码不是 Active Directory 错误,但较低层组件(包括 RPC、Kerberos、SSL、LSA 和 NTLM)可能会返回不同的根本原因。

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

  • KRB_AP_ERR_MODIFIED (0x29 / 41 小数 / KRB_APP_ERR_MODIFIED)
  • KRB_AP_ERR_BADMATCH (0x24h / 36 十进制 / "票证和身份验证器不匹配")
  • KRB_AP_ERR_NOT_US (0x23h / 35 十进制 / "票证不用于我们")

以下针对 -21468930220x80090322 的特定根本原因 \ 0x80090322 \ SEC_E_WRONG_PRINCIPAL包括:

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

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

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

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

解决方案

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

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

    重复的 Spn 可能会导致对名称映射的 SPN 不正确。

    DCDIAG /TEST:CheckSecurityError 可以检查丢失的或重复的 Spn 和其他错误。

    在所有源 Dc 发生故障的出站复制的控制台上运行此命令,其中包含 SEC_E_WRONG_PRINCIPAL 错误。

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

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

    请考虑以下情况:

    • 入站复制 Active Directory 目标域控制器搜索其本地目录的本地副本,以查找源 Dc NTDS 设置对象的objectGUID

    • Dc 查询与 DC 引导的相匹配的 CNAME 记录的活动 DNS 服务器,该记录随后映射到包含源域控制器的 IP 地址的主机 A/AAAA 记录。

      在这种情况下,Active Directory 运行名称解析回退,其中包括在 WINS 中的 DNS 或单标签主机名中对完全限定的计算机名称的查询。

      备注

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

陈旧的 NTDS 设置对象、DNS 中的错误的名称到 IP 映射和 WINS 主机记录,并且主机文件中的过时条目都可以导致目标域控制器将 Kerberos 加密的流量提交到错误的 Kerberos 目标。

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

方法1:网络跟踪方法 (通过启用了完全默认分析程序的网络监视器3.3.1641 进行分析)

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

F# SRC 目标 协议 Frame 评论
1 DC1 DC2 MSRPC MSRPC: c/o 请求:未知调用 = 0x5 Opnum = 0x3 Context = 0x1 提示 = 0x90 对源 DC 上的 EPM 的目标 DC RPC 调用超过135
双面 DC2 DC1 MSRPC MSRPC: c/o 响应:未知调用 = 0x5 Context = 0x1 提示 = 0xF4 取消 = 0x0 对 RPC 呼叫者的 EPM 响应
第三章 DC1 DC2 MSRPC MSRPC: c/o 绑定: UUID {E3514235-4B06-11D1-AB04-00C04FC2DCD2} DRSR (DRSR) Call = 0x2 Assoc Grp = 0x0 Xmit = 0x16D0 接收 = 0x16D0 RPC 将请求绑定到 E351 .。。服务 UUID
4 DC2 DC1 MSRPC MSRPC: c/o 绑定 Ack: Call = 0x2 Assoc Grp = 0x9E62 Xmit = 0x16D0 接收 = 0x16D0 RPC 绑定响应
5 DC1 KDC KerberosV5 KerberosV5: TGS 请求领域: CONTOSO.COM Sname: E3514235-4B06-11D1-AB04-00C04FC2DCD2/6f3f96d3-dfbf-4daf-9236-4d6da6909dd2/contoso 针对源 DC 的复制 SPN 的 TGS 请求。 此操作不会显示在目标 DC 的线路上使用自身作为 KDC。
6 KDC DC1 KerberosV5 KerberosV5: TGS 响应 Cname: CONTOSO-DC1 $ 对目标 DC contoso-dc1 的 TGS 响应。 此操作不会显示在目标 DC 的线路上使用自身作为 KDC。
DC1 DC2 MSRPC MSRPC: c/o Alter 接续: UUID {E3514235-4B06-11D1-AB04-00C04FC2DCD2} DRSR (DRSR) Call = 0x2 AP 请求
utf-8 DC2 DC1 MSRPC MSRPC: c/o Alter 续 Resp: Call = 0x2 Assoc Grp = 0x9E62 Xmit = 0x16D0 接收 = 0x16D0 AP 响应。
第 7帧上的深入分析 第 8帧上的深入分析 备注
MSRPC MSRPC: c/o Alter 接续: UUID {E3514235-4B06-11D1-AB04-00C04FC2DCD2} DRSR (DRSR) Call = 0x2 MSRPC: c/o Alter 续 Resp: Call = 0x2 Assoc Grp = 0xC3EA43 Xmit = 0x16D0 接收 = 0x16D0 DC1 通过 DC2 上 EPM 在 dc2 上返回的端口连接到 DC2 上的 AD 复制服务。
Ipv4: Src = x.x.x.x,Dest = x. 35,Next 协议 = TCP,数据包 ID =,总 IP 长度 = 0 Ipv4: Src = x. x. 35,Dest = x.x,Next Protocol = TCP,数据包 ID = 31546,总 IP 长度 = 278 验证 AD replication source DC (在此处作为第一列中的 目标 计算机,列2中的 Src 计算机在此示例中 拥有 在跟踪 (中引用的 IP 地址。在此示例) 中。
票证: Realm: CONTOSO.COM ,Sname: E3514235-4B06-11D1-AB04-00C04FC2DCD2/6f3f96d3-dfbf-4daf-9236-4d6da6909dd2/contoso .com ErrorCode: KRB_AP_ERR_MODIFIED (41)

领域: <verify that realm returned by the source DC matches the Kerberos realm intended by the destination DC> 。

Sname: <verify that the sName in the AP response matches contains the hostname of the intended source DC and NOT another DC that the destination incorrectly resolved to due to a bad name-to-ip mapping problem> 。
在第1列中,记下目标 Kerberos 领域的领域, contoso.com 后跟源 Dc 复制 SPN (Sname) ,其中包含 Active Directory 复制服务 UUID (E351 ) 与源 DC NTDS Settings 对象的对象 GUID 连接。

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

源 Dc 完全限定的的源 Dc 完全限定的 CNAME 连接 with_msdcs 的 ping 或 nslookup。<forest root DNS name> 从目标 DC 的控制台中,必须返回源 Dc 当前 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 映射验证 ()

从源 DC 的控制台:

命令 评论
IPCONFIG /ALL |MORE 注意目标 Dc 使用的 NIC IP 地址
REPADMIN /SHOWREPS |MORE 注释表示 active Directory 的源 Dc 副本中的源 Dc NTDS 设置对象的对象 GUID 的 DSA 对象 GUID 的值

从目标 DC 的控制台:

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

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

运行 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 的名称。

备注

由于 E351 的名称到 IP 映射) 或当前不具有的域控制器,将定向到非域 (控制器的复制请求。在终结点映射程序中注册的服务 UUID 返回错误1753:终结点映射程序没有更多的终结点可用。

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

如果源域控制器的密码在 Active Directory 目录的 KDC 和源域控制器的副本之间不同,则会发生此情况。 目标域控制器的源域控制器计算机帐户密码的副本如果不将自己用作 KDC,则可能是陈旧的。

复制失败可防止域控制器在给定域中具有域控制器的当前密码值。

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

NLTEST /DSGETDC:<DNS domain of target domain> /kdc可使用在已提升的命令提示符下运行在接近于SEC_E_WRONG_PRINCIPAL错误的关闭时间的命令来快速识别 Kerberos 客户端所面向的 KDC。

确定 Kerberos 客户端从中获取票证的域控制器的最终方法是执行网络跟踪。 网络跟踪中缺少 Kerberos 流量可能表明 Kerberos 客户端已获取票证、从自身获取票证,或者网络跟踪应用程序无法正确地分析 Kerberos 流量。

登录用户帐户的 Kerberos 票证可通过使用命令在提升的命令提示符处清除 KLIST purge

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

可以通过停止本地或远程域控制器上的 KDC 服务,将域控制器设为使用其他域控制器。

REPADIN /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>

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

解决特定方案问题

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

    1. 提升域中的** \ \ dc1 + \ \ DC2 + \ \ DC3** contoso.com 。 端到端复制在没有错误的情况下进行。

    2. 停止 \ \ DC1 和 DC2 上的 KDC \ \ 以强制在网络跟踪中可以观察到的脱离机箱 Kerberos 流量。 端到端复制在没有错误的情况下进行。

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

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

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

    1. 提升域中的** \ \ dc1 + \ \ DC2 + \ \ DC3** contoso.com 。 端到端复制发生时没有错误。

    2. 停止 \ \ DC1 和 DC2 上的 KDC \ \ 以强制在网络跟踪中可以看到的脱机 Kerberos 流量。 端到端复制发生时没有错误。

    3. 在 KDC DC3 上禁用入站复制 \ \ 以模拟 kdc 上的复制故障。

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

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

  • DS RPC 客户端日志记录

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

  • Kerberos 工作流

    Kerberos 工作流包括以下操作:

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

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

    • KDC 在全局编录中搜索源域控制器的领域中的 e351 或主机名) 的源 (。

    • 如果目标域控制器位于目标域控制器的领域中,则 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/"目标主体名称不正确"