即使電腦硬體不支援TPM2.0,也可以用模擬的跑需要TPM2.0的作業系統。
例如我的CPU是不支援TPM 2.0的i5-7400,但想在Linux系統裝Windows 11虛擬機,只要透過模擬TPM和自簽Secure Boot後,不用改登錄檔繞過也能正常安裝。
1. 安裝QEMU/KVM和TPM模擬套件#
啟用KVM,安裝Libvirt、Virt Manager、QEMU、swtpm、ovmf。
swtpm是軟體模擬TPM的套件。OVMF則是給QEMU虛擬機使用的UEFI韌體,支援Secure Boot(安全開機)。
參見 Ubuntu安裝QEMU/KVM| Arch Linux安裝QEMU/KVM
2 自簽Secure Boot金鑰#
(此步驟非必須)
Secure Boot非必須,Windows 11只要BIOS有Secure Boot就可以了,不用啟用也能安裝。
參照Stack Exchange的作法,你得自簽一個Secure Boot金鑰給QEMU的UEFI使用。
- 生成platform key
openssl req -newkey rsa:2048 -nodes -keyout PKpriv.key -x509 -days 365 -out PK.crt
openssl x509 -in PK.crt -outform der -out PK.der
- 下載Microsoft Corporation KEK CA 2011和Microsoft Windows Production CA 2011金鑰
wget https://go.microsoft.com/fwlink/p/?linkid=321185
wget https://go.microsoft.com/fwlink/?LinkId=321192
- 製作含有金鑰的映像檔
# 建立32MB的fat32映像檔
qemu-img create -f raw keys.img 32M
dd if=/dev/zero of=keys.img bs=4M
mkfs.vfat keys.img
# 將其作為loopdevice掛載
losetup /dev/loop0 keys.img
mount /dev/loop0 /mnt
# 將金鑰複製進去
cp PK.der /mnt/PK.der
cp MicCorKEKCA2011_2011-06-24.crt /mnt/KEK.crt
cp MicWinProPCA2011_2011-10-19.crt /mnt/DB.crt
# 取消掛載
umount /dev/loop0
losetup -d /dev/loop0
3.安裝Windows 11虛擬機#
有了Secure Boot和TPM,Windows 11虛擬機過程參考這篇: Linux安裝Windows 11虛擬機 (QEMU/KVM)
不過在開機進入Windows安裝程式前,需先啟用TPM 2.0和Secure Boot:
點選虛擬機的硬體列表,編輯硬體 → 新增TPM 2.0的模擬硬體
接著點選新增儲存→將含有Secure Boot金鑰的
keys.img
掛載。將虛擬機開機,滑鼠點一下讓QEMU吃到主機的滑鼠。按Esc進入BIOS,用鍵盤移動,進入Device Manager → Secure Boot Configuration
將其設定為Custom Mode
之後會多出管理keys的選項,進入後用鍵盤選取PK
選取keys.img映像檔的金鑰。
確認匯入。以此類推將KEK和DB的金鑰也跟著匯入。
Secure Boot會顯示
Enabled
,記得還要勾選Attempt Secure Boot
。
退出BIOS。這樣開機進入Windows 11安裝程式後,Windows 11就不會顯示電腦不支援了。
虛擬機開機後搜尋「系統資訊」,可以看到Secure Boot正常啟用。
按Windows + R,啟動tmp.msc
亦能見到TPM 2.0正常載入。
參考資料#
How to install a windows guest in qemu/kvm with secure boot enabled