对受保护的主机进行故障排除
本文介绍在受保护的构造中部署或操作受保护的 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 版)。