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

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

适用于: 所有受支持的 Windows Server 版本

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

受保护的主机功能

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

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

Get-WindowsFeature HostGuardian

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

Install-WindowsFeature HostGuardian -Restart

证明失败

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

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

AttestationStatus 说明
Expired 主机之前通过了证明,但颁发给它的健康证书已过期。 请确保主机和 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 BitLocker 不会加密主机的 OS 卷。 若要解决此问题,请在 OS 卷上启用 BitLocker在 HGS 上禁用 BitLocker 策略
CodeIntegrityPolicy 主机未配置为使用代码完整性策略,也不使用 HGS 服务器信任的策略。 确保已配置代码完整性策略,主机已重启,并且该策略已注册到 HGS 服务器。 有关详细信息,请参阅创建及应用代码完整性策略
DumpsEnabled 主机配置为允许故障转储或实时内存转储,HGS 策略不允许。 若要解决此问题,请在主机上禁用转储。
DumpEncryption 主机配置为允许故障转储或实时内存转储,但不加密这些转储。 在主机上禁用转储或配置转储加密
DumpEncryptionKey 主机配置为允许和加密转储,但未使用 HGS 已知的证书对其进行加密。 若要解决此问题,请在主机上更新转储加密密钥,或将密钥注册到 HGS
FullBoot 主机已从睡眠或休眠状态恢复。 重启主机以进行干净、完整的启动。
HibernationEnabled 主机配置为允许休眠,而无需加密 HGS 策略不允许的休眠文件。 禁用休眠并重启主机,或配置转储加密
HypervisorEnforcedCodeIntegrityPolicy 主机未配置为使用虚拟机监控程序强制实施的代码完整性策略。 验证虚拟机监控程序是否启用、配置及强制实施代码完整性。 有关详细信息,请参阅 Device Guard 部署指南
Iommu 主机的基于虚拟化的安全功能未配置为要求 IOMMU 设备根据 HGS 策略的要求保护直接内存访问攻击。 验证主机是否已启用 IOMMU,并在启动 VBS 时将 Device Guard 配置为需要 DMA 保护
PagefileEncryption 未在主机上启用页面文件加密。 若要解决此问题,请运行 fsutil behavior set encryptpagingfile 1 以启用页面文件加密。 有关详细信息,请参阅 fsutil 行为
SecureBoot 此主机上未启用安全启动,或者未使用 Microsoft 安全启动模板。 使用 Microsoft 安全启动模板启用安全启动以解决此问题。
SecureBootSettings 此主机上的 TPM 基线与 HGS 信任的任何基线都不匹配。 安装新的硬件或软件更改 UEFI 启动权限、DBX 变量、调试标志或自定义安全启动策略时,可能会发生这种情况。 如果信任此计算机的当前硬件、固件和软件配置,可以捕获新的 TPM 基线,并将其注册到 HGS
TcgLogVerification 无法获取或验证 TCG 日志(TPM 基线)。 这可能表示主机的固件、TPM 或其他硬件组件出现问题。 如果将主机配置为在启动 Windows 之前尝试 PXE 启动,过时的网络启动程序 (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 版)