对受保护的主机进行故障排除
本文介绍在受保护的构造中部署或操作受保护的 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 版。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈