对受保护的主机进行故障排除

本文介绍在受保护的构造中部署或操作受保护的 Hyper-V 主机时遇到的常见问题的解决方案。

适用于:Windows Server 2022、Windows Server 2019、Windows Server 2016

如果不确定问题的性质,请先尝试在 Hyper-V 主机上运行受保护的构造诊断,以缩小潜在原因范围。

受保护的主机功能

如果 Hyper-V 主机出现问题,请先确保已安装 主机保护者 Hyper-V 支持 功能。 如果没有此功能,Hyper-V 主机将缺少一些关键的配置设置和软件,这些设置和软件允许它通过证明和预配受防护的 VM。

若要检查是否安装了该功能,请使用 服务器管理器或在提升的 PowerShell 窗口中运行以下 cmdlet:

Get-WindowsFeature HostGuardian

如果未安装该功能,请使用以下 PowerShell cmdlet 进行安装:

Install-WindowsFeature HostGuardian -Restart

证明失败

如果主机未通过主机保护者服务证明,则无法运行受防护的 VM。 该主机上 的 Get-HgsClientConfiguration 输出将显示有关该主机未能证明的原因的信息。

下表说明了“ 证明”“状态 ”字段中可能显示的值以及可能的后续步骤(如果适用)。

AttestationStatus 解释
已过期 主机以前已通过证明,但颁发的运行状况证书已过期。 确保主机和 HGS 时间同步。
InsecureHostConfiguration 主机未通过证明,因为它不符合 HGS 上配置的证明策略。 有关详细信息,请参阅 AttestationSubStatus 表。
NotConfigured 主机未配置为使用 HGS 进行证明和密钥保护。 它配置为本地模式。 如果此主机位于受保护的构造中,请使用 Set-HgsClientConfiguration 为其提供 HGS 服务器的 URL。
通过 主机已通过证明。
TransientError 由于网络、服务或其他临时错误,上次证明尝试失败。 重试上一个操作。
TpmError 由于 TPM 出错,主机无法完成其最后一次证明尝试。 有关详细信息,请参阅 TPM 日志。
UnauthorizedHost 主机未通过证明,因为它无权运行受防护的 VM。 确保主机属于 HGS 信任的安全组,以运行受防护的 VM。
未知 主机尚未尝试使用 HGS 进行证明。

AttestationStatus 报告为 InsecureHostConfiguration 时, AttestationSubStatus 字段中会填充一个或多个原因。 下表说明了 AttestationSubStatus 的可能值,以及有关如何解决问题的提示。

AttestationSubStatus 它的含义和操作
BitLocker 主机的 OS 卷未由 BitLocker 加密。 若要解决此问题,请在 OS 卷上 启用 BitLocker 或在 HGS 上禁用 BitLocker 策略
CodeIntegrityPolicy 主机未配置为使用代码完整性策略,或者未使用 HGS 服务器信任的策略。 确保已配置代码完整性策略,主机已重启,并且策略已注册到 HGS 服务器。 有关详细信息,请参阅 创建和应用代码完整性策略
DumpsEnabled 主机配置为允许故障转储或实时内存转储,这是 HGS 策略所不允许的。 若要解决此问题,请在主机上禁用转储。
DumpEncryption 主机配置为允许故障转储或实时内存转储,但不加密这些转储。 在主机上禁用转储或 配置转储加密
DumpEncryptionKey 主机配置为允许和加密转储,但不使用 HGS 已知的证书来加密转储。 若要解决此问题, 请更新主机上的转储加密密钥 ,或 向 HGS 注册密钥
FullBoot 主机已从睡眠状态或休眠状态恢复。 重启主机以允许干净、完全启动。
HibernationEnabled 主机配置为在不加密休眠文件的情况下允许休眠,HGS 策略不允许该文件。 禁用休眠并重启主机,或 配置转储加密
HypervisorEnforcedCodeIntegrityPolicy 主机未配置为使用虚拟机监控程序强制实施的代码完整性策略。 验证虚拟机监控程序是否已启用、配置和强制实施代码完整性。 有关详细信息,请参阅 Device Guard 部署指南
Iommu 主机的基于虚拟化的安全功能未配置为需要 IOMMU 设备来防范 HGS 策略所要求的直接内存访问攻击。 验证主机是否具有 IOMMU、是否已启用,以及 Device Guard 是否配置为在启动 VBS 时 需要 DMA 保护
PagefileEncryption 未在主机上启用页面文件加密。 若要解决此问题,请运行 fsutil behavior set encryptpagingfile 1 以启用页面文件加密。 有关详细信息,请参阅 fsutil 行为
SecureBoot 未在此主机上启用安全启动,或者未使用 Microsoft 安全启动模板。 使用 Microsoft 安全启动模板启用 安全启动以解决此问题。
SecureBootSettings 此主机上的 TPM 基线与 HGS 信任的任何基线都不匹配。 通过安装新的硬件或软件更改了 UEFI 启动机构、DBX 变量、调试标志或自定义安全启动策略时,可能会发生这种情况。 如果信任此计算机的当前硬件、固件和软件配置,则可以捕获新的 TPM 基线并将其注册到 HGS
TcgLogVerification 无法获取或验证 TCG 日志 (TPM 基线) 。 这表示主机的固件、TPM 或其他硬件组件存在问题。 如果主机配置为在启动 Windows 之前尝试 PXE 启动,则过时的 Net Boot Program (NBP) 也可能导致此错误。 在启用 PXE 启动后,请确保所有 NBP 都是最新的。
VirtualSecureMode 基于虚拟化的安全功能未在主机上运行。 确保已启用 VBS,并且系统满足配置的平台安全功能。 有关 VBS 要求的详细信息,请参阅 Device Guard 文档

新式 TLS

如果已部署组策略或以其他方式配置 Hyper-V 主机以防止使用 TLS 1.0,则尝试启动受防护的 VM 时,可能会遇到“主机保护程序服务客户端无法代表调用进程解包密钥保护程序”错误。 这是由于 .NET 4.6 中的一种默认行为,即在与 HGS 服务器协商支持的 TLS 版本时不考虑系统默认 TLS 版本。

若要解决此问题,请运行以下两个命令,将 .NET 配置为对所有 .NET 应用使用系统默认 TLS 版本。

reg add HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:64
reg add HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:32

警告

系统默认 TLS 版本设置将影响计算机上的所有 .NET 应用。 在将注册表项部署到生产计算机之前,请务必在隔离的环境中测试注册表项。

有关 .NET 4.6 和 TLS 1.0 的详细信息,请参阅 解决 TLS 1.0 问题,第 2 版