本文提供了一种解决方案,用于解决 RWDC 不可用时发生的 DPAPI MasterKey 备份失败。
原始 KB 数: 3205778
现象
- 安装 MS14-066、KB2992611、KB3000850 或包括这些修补程序的更新后,Windows 8.1 和 Windows Server 2012 R2 中会出现以下行为。
- Windows 10 及更高版本的 Windows 中也会发生相同的行为。 首次登录到由只读域控制器(RODC)提供服务的站点中的新计算机的域用户遇到以下错误和问题。
一般问题
-
打开凭据管理器失败并出现0x80090345错误,该错误映射到以下内容:
十六进制 十进制 符号 友好 0x80090345 -2146892987 SEC_E_DELEGATION_REQUIRED 无法完成请求的操作。 必须信任计算机才可以进行委托,并且必须将当前用户帐户配置为允许委托。 -
保存 RDP 密码失败,没有明显的错误。
-
密码更改所需的时间比预期的要长。
-
加密文件时,资源管理器会挂起。
-
在 Office 和 Office 365 中,在 Windows Live Mail 2012 中添加新帐户失败,出现错误0x80090345。
-
Outlook 配置文件创建失败,并出现以下错误:
与邮件服务器的加密连接不可用。
-
在“联系服务器和登录”阶段,登录到 Lync 和 Skype 会挂起或遇到长时间的延迟。
-
SQL 服务无法在域帐户下启动,并触发以下错误:
由于找不到有效证书,而且不可能创建自签名证书,无法初始化 SSL 加密。
- SQL Server 安装失败,并出现以下错误:
SQL Server 安装失败。 SQL Server 安装程序遇到以下错误: 生成 XML 文档时出错。 错误代码0x84B10001。
-
域用户无法从 SMSS 管理 SQL 数据库。 (SQL Server Management Studio)。 当通过 SSMS DataBases -CustomerDatabase** ->>Tables** -Table 名称>导航数据库时,会出现此问题。
如果右键单击该表,然后选择“设计**”**,则会发生以下错误:
无法完成请求的操作。 必须信任计算机才可以进行委托,并且必须将当前用户帐户配置为允许委托。 此异常源自System_Security_ni!System.Security.Cryptography.ProtectedData.Protect(Byte[], Byte[], System.Security.Cryptography.DataProtectionScope)。”
- ADFS WAP 安装无法创建自签名证书并触发以下错误:
异常:尝试创建代理信任证书时出错。
- 仅 RODC 涵盖的站点中的 ADLDS 安装失败,并出现以下错误:
键入所选服务帐户的有效用户和密码
1. 在这种情况下,AdamInstall.log显示以下内容:
adamsetup D20.10F8 0255 15:30:22.002 Enter GetServiceAccountError adamsetup D20.10F8 0256 15:30:22.002 键入所选服务帐户的有效用户名和密码。 adamsetup D20.10F8 0257 15:30:22.002 ADAMERR_SERVICE_INVALID_CREDS 2. 失败期间拍摄的示例网络跟踪显示 ADLDS 发送的密码不正确,Kerberos TGT 请求失败并KDC_ERR_PREAUTH_FAILED:
| 源 | 目标 | 协议 | 说明 |
| --- | --- | --- | --- |
| ADLDS | RODC | KerberosV5 | AS Request Cname: ADLDSSvc Realm: CONTOSO Sname: krbtgt/contoso {TCP:375, IPv4:7} |
| RODC | ADLDS | KerberosV5 | KerberosV5:KRB\_ERROR - KDC\_ERR\_PREAUTH\_FAILED (24) {TCP:376, IPv4:7} |
3. 事件 ID 4625 记录在 ADLDS 服务器的安全日志中,如下所示:
事件 ID:4625 关键字:审核失败 说明:帐户无法登录。 .. 失败信息: 失败原因:未知用户名或密码错误。 状态:0xC000006D 子状态:0xC000006A .. 进程信息: 调用方进程名称:C:\Windows\ADAM\adaminstall.exe
- 状态和子状态转换为:
| 十六进制 | 十进制 | 符号 | 友好 |
| --- | --- | --- | --- |
| 0xc000006a | -1073741718 | 状态\_密码错误 | 尝试更新密码时,此返回状态指示作为当前密码提供的值不正确。 |
| 0xc000006d | -1073741715 | 状态\_登录\_失败 | 尝试登录无效。 这是因为用户名或身份验证信息不正确。 |
- 在所有情况下,NETLOGON。LOG 显示对可写域控制器发出调用的 DsGetDcName 请求:
[MISC][3736] 名为:客户端 PID=568、Dom:VS Acct:(null) 标志:DS WRITABLE NETBIOS RET_DNS [CRITICAL][3736] NetpDcMatchResponse: CON-DC4:
CONTOSO.COM.: 响应者不是可写服务器。[MISC][2600] DsGetDcName 函数返回 1355(客户端 PID=564): Dom:VS Acct:(null) 标志:FORCE DS WRITABLE NETBIOS RET_DNS
其中:
| 十六进制 | 十进制 | 符号 | 友好 |
| --- | --- | --- | --- |
| 0x54b | 1355 | ERROR\_NO\_SUCH\_DOMAIN | 指定的域不存在,或无法访问。 |
原因
当用户首次登录计算机并首次尝试加密数据时,操作系统必须创建基于用户当前密码的首选 DPAPI MasterKey。 在创建 DPAPI MasterKey 期间,尝试通过联系 RWDC 来备份此主密钥。 如果备份失败,则无法创建 MasterKey 并返回0x80090345错误。
此失败是由KB2992611引入的新行为。 在旧版操作系统和未安装KB2992611的系统上,如果客户端在 MasterKey 备份期间无法联系 RWDC,仍允许创建主密钥,并创建本地备份。
也就是说,如果没有 RWDC 可用,旧行为将执行主密钥的本地备份。
与 RODC 不存储机密的设计简介一致,RODC 不会存储或处理 MasterKey 的备份。 因此,在没有 RWDC 可用的站点中,可能会出现“症状”部分中所述的问题。
注意
如果首选主密钥存在但已过期(密码已过期),则会尝试生成新的主密钥。 如果无法创建新主密钥的域备份,客户端会回退到旧主密钥,并且不会发生“症状”部分中描述的行为。
仅当不存在 MasterKey 且用户以前未登录到计算机时,才会出现问题。
解决方法
-
验证发生此问题的已加入域的工作站和服务器是否有权访问 RWDC。
运行以下命令行以验证 RWDC 是否存在且处于正常状态:
nltest /dsgetdc:<domain> /writable [/force]使用 NETLOGON。使用本文中提供的日志示例的 LOG 和网络跟踪来验证与 RWDC 的名称解析和连接。 若要确定是否遇到此问题,请尝试在 控制面板 中打开 CREDMAN。 如果尝试失败并出现0x80090345错误,则已验证此错误。
-
如果可能,请将计算机带到 RWDC 所在的站点,然后首次登录该站点。 之后,将创建 DPAPI MasterKey,并解决问题。
-
如果无法访问 RWDC,并且用户不会在计算机之间漫游,则可以使用以下注册表项来解决该问题。
将此值设置为 1 会导致 DPAPI 主密钥在本地备份,而不是使用域备份。 此外,任何以前创建的密钥都不会触发对可写域控制器的调用,除非在有限的情况下,如下所述。 此注册表设置仅适用于域帐户。 本地帐户始终使用本地备份。
路径 HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Protect\Providers\df9d8cd0-1501-11d1-8c7a-00c04fc297eb 设置 ProtectionPolicy (保护策略) 数据类型 DWORD 值 1 请求的 OS 重启 是 说明 操作系统
警告
如果域用户登录到多个计算机,请不要使用此注册表项! 由于密钥是在本地备份的,因此任何非本地密码更改都可能会触发使用旧密码包装所有 DPAPI 主密钥的情况,然后不可能进行域恢复。 此注册表项应仅在可接受数据丢失的环境中设置。
详细信息
| 主题 | 详细信息 |
|---|---|
| Windows 数据保护 | Windows 数据保护DPAPI 中的密钥备份和还原当计算机是域的成员时,DPAPI 具有一种备份机制,允许对数据进行取消保护。 生成 MasterKey 时,DPAPI 会与域控制器交谈。 域控制器具有域范围的公钥/私钥对,仅与 DPAPI 相关联。 本地 DPAPI 客户端使用相互身份验证和隐私保护的 RPC 调用从域控制器获取域控制器公钥。 客户端使用域控制器公钥加密 MasterKey。 然后,它将存储此备份 MasterKey 以及受用户密码保护的 MasterKey。 在取消保护数据时,如果 DPAPI 无法使用受用户密码保护的 MasterKey,则它通过使用相互身份验证和隐私保护的 RPC 调用将备份 MasterKey 发送到域控制器。 然后,域控制器使用其私钥解密 MasterKey,并使用相同的受保护 RPC 调用将其发送回客户端。 此受保护的 RPC 调用用于确保网络上的侦听任何人都无法获取 MasterKey。 |
| RODC 放置注意事项 | RODC 放置注意事项 |
| 更改行为/启动此问题的链接 KB。 | Windows RT 8.1、Windows 8.1 和 Windows Server 2012 R2 的 2014 年 11 月更新汇总(KB3000850) |
| 备份密钥远程协议文档 | 附录 B:产品行为执行机密的客户端包装BackupKey 远程协议服务器实际上不会执行机密的远程备份。 相反,服务器会包装每个机密并将其返回到客户端。 客户端负责存储机密,直到再次需要机密,此时客户端可以请求服务器解包机密请参阅 3.1.4.1.3 BACKUPKEY_RETRIEVE_BACKUP_KEY_GUID |