一、核心条件准备
- 安装 OVMF 固件
- 使用支持安全引导的 UEFI 固件(如
edk2-ovmf
)。 - 获取路径(以 Arch Linux 为例):bashpacman -Ql edk2-ovmf | grep OVMF_CODE.secboot.fd
- # 安全引导固件 pacman -Ql edk2-ovmf | grep OVMF_VARS.fd
- # 变量存储文件其他系统路径类似(如 Ubuntu:
/usr/share/OVMF/OVMF_CODE.secboot.fd
)。
- 使用支持安全引导的 UEFI 固件(如
- 生成 UEFI 密钥
- 创建平台密钥(PK):bashopenssl req -newkey rsa:2048 -nodes -keyout PKpriv.key -x509 -days 365 -out PK.crt openssl x509 -in PK.crt -outform der -out PK.der
- 下载微软密钥:
- KEK(密钥交换密钥):Microsoft KEK Certificate
- DB(签名数据库):Microsoft Windows Production PCA
- 创建密钥镜像文件bashdd if=/dev/zero of=keys.img bs=1M count=10
- # 创建 10MB 镜像 mkfs.vfat keys.img
- # 格式化为 FAT32 sudo mount -o loop keys.img /mnt
- # 挂载镜像 cp PK.der /mnt/PK.der
- # 复制 PK cp MicCorKEKCA2011_2011-06-24.crt /mnt/KEK.crt
- # 复制 KEK cp MicWinProPCA2011_2011-10-19.crt /mnt/DB.crt
- # 复制 DB sudo umount /mnt
⚙️ 二、配置 QEMU 虚拟机
- 启动参数示例
在 QEMU 命令中添加以下参数:bashqemu-system-x86_64 \ -enable-kvm \ -cpu host \ -m 4G \ -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.secboot.fd \ -drive if=pflash,format=raw,file=/path/to/OVMF_VARS.fd \ - # 变量文件副本 -drive file=/path/to/keys.img,format=raw \
- # 密钥镜像 -drive file=/path/to/disk.qcow2,format=qcow2 \
- # 系统磁盘 -drive file=/path/to/windows.iso,media=cdrom \
- # 安装镜像 -boot order=dc
- 关键项:
OVMF_CODE.secboot.fd
:启用安全引导的固件。OVMF_VARS.fd
:需为副本(否则原始文件会被覆盖)。
- 关键项:
- 在 UEFI 界面注册密钥
- 启动虚拟机,进入 UEFI 设置(按
Esc
或F2
)。 - 导航至:textDevice Manager → Secure Boot Configuration → Secure Boot Mode → Custom Mode
- 依次注册密钥:
- PK:选择
PK.der
。 - KEK:选择
KEK.crt
。 - DB:选择
DB.crt
。
- PK:选择
- 保存后退出,安全引导状态将变为
Enabled
。
- 启动虚拟机,进入 UEFI 设置(按
⚠️ 三、启用 TPM 2.0(可选,Windows 11 必需)
使用 swtpm
模拟 TPM 芯片:
bash
swtpm socket --tpm2 --tpmstate dir=/path/to/tpm --ctrl type=unixio,path=/path/to/swtpm-sock &
在 QEMU 命令中添加:
bash
-chardev socket,id=chrtpm,path=/path/to/swtpm-sock \ -tpmdev emulator,id=tpm0,chardev=chrtpm \ -device tpm-tis,tpmdev=tpm0
🔍 四、验证与故障处理
- 确认安全引导状态
- Windows:
msinfo32
→ 查看 “安全引导状态” 是否为 “开启”。 - Linux:
dmesg | grep -i secureboot
或mokutil --sb-state
。
- Windows:
- 常见问题
- 启动失败:检查密钥是否完整注册,或尝试重置为
Setup Mode
后重新注册。 - 驱动未签名:Linux 需移除不兼容模块(如 VMware 的
hgfs
)37。 - OVMF 路径错误:确保固件文件路径正确,且变量文件可写。
- 启动失败:检查密钥是否完整注册,或尝试重置为
💎 总结
- 核心步骤:OVMF 固件 + 密钥注册 + QEMU 参数配置。
- 兼容性:Windows 支持良好;Linux 需确保内核/驱动已签名(如
shim
+grub
)6。 - 安全风险:启用后仅加载可信软件,但可能导致未签名驱动失效,需提前测试47。
参考:QEMU ArchWiki 2,OVMF 文档。若需脚本自动化,可基于2中的示例修改。
发表回复