在Linux安装Windows 11虛擬機時啟用Secure Boot和TPM 2.0

即使電腦硬體不支援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(安全開機)。

參見Arch Linux安裝QEMU/KVM

2 自簽Secure Boot金鑰

(此步驟非必須)

Secure Boot非必須,Windows 11只要BIOS有Secure Boot但不用開啟也能安裝。

參照Stack Exchange的作法,你得自簽一個Secure Boot金鑰給QEMU的UEFI使用。

  1. 生成platform key
1
2
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
  1. 下載Microsoft Corporation KEK CA 2011和Microsoft Windows Production CA 2011金鑰
1
2
wget https://go.microsoft.com/fwlink/p/?linkid=321185
wget https://go.microsoft.com/fwlink/?LinkId=321192
  1. 製作含有金鑰的映像檔
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 建立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:

  1. 點選虛擬機的硬體列表,編輯硬體 → 新增TPM 2.0的模擬硬體

  2. 接著點選新增儲存→將含有Secure Boot金鑰的keys.img掛載。

  3. 將虛擬機開機,滑鼠點一下讓QEMU吃到主機的滑鼠。按Esc進入BIOS,用鍵盤移動,進入Device Manager → Secure Boot Configuration

  4. 將其設定為Custom Mode

  5. 之後會多出管理keys的選項,進入後用鍵盤選取PK

  6. 選取keys.img映像檔的金鑰。

  7. 確認匯入。以此類推將KEK和DB的金鑰也跟著匯入。

  8. 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


感謝您的閱讀。歡迎分享Ivon的部落格(ivonblog.com)的文章,引用或轉載請註明文章網址,並遵守創用CC-姓名標示-非商業性-禁止改作 4.0 國際授權條款。如需商業使用請來信告之。

written by human, not by AI

如果本網站文章對您有幫助,歡迎請我喝杯珍珠奶茶。

留言板

點選按鈕,選擇您覺得方便的留言系統。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要登入Github帳號才能留言。支援markdown語法,方便您張貼程式碼,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus投放的廣告。無論有無登入皆可留言。此處留言只有本站參與者看得到。若您選擇以訪客身份匿名留言,就不會收到後續回覆通知。