本文提供操作說明,協助您更新 2025 年 11 月 7 日前建立的運算執行個體,以信任安全啟動的更新憑證。更新內容包括允許的簽章資料庫 (db) 和金鑰交換金鑰 (KEK) 變數。
如果客戶不重新建立受影響的運算執行個體,可以改用 KEK 和資料庫更新。
事前準備
更新安全啟動 KEK 和 db 憑證前,請先確認執行個體是否需要更新,並完成下列準備工作,以免發生啟動或解密問題:
- 先決條件驗證: 驗證執行個體是否需要更新安全啟動憑證。
- 資料完整性和金鑰復原:找出磁碟加密 (BitLocker 或 LUKS FDE) 復原金鑰,並備份重要資料。如果設定有誤,變更安全變數可能會鎖定磁碟存取權。
- Linux 更新順序建議:如果是 Linux 執行個體,建議先將
dbUEFI 變數更新為 Microsoft UEFI CA 2023,再更新為新版墊片。如果資料庫只包含 2011 年的憑證,但套用了僅以 Microsoft UEFI CA 2023 簽署的墊片更新,這種排序方式有助於避免潛在的 CA 不符情況。 - 自訂 PK 或 KEK 設定:如果執行個體使用自訂安全啟動變數 (例如自訂
PK或KEK),或是在 Compute Engine 以外的系統上執行,本文提供的標準更新檔案 (DBUpdate3P2023.bin或kek2023update.bin) 將無法直接套用。UEFI 韌體需要更新檔案,且檔案必須由系統上註冊的KEK或PK私密金鑰簽署,而kek2023update.bin則是由預設的 Compute EnginePK簽署。如果您使用自訂金鑰,就必須以自己的私密金鑰簽署更新二進位檔,或透過自訂憑證授權單位管理更新。詳情請參閱「排解 KEK 更新錯誤」。 - Google Cloud 備份和災難復原設備:這些是受管理的設備。您不必在這些設備上 Google Cloud 手動更新安全啟動憑證,系統會自動管理所有更新。
在 Linux 上更新資料庫和 KEK
如要更新「允許的簽章資料庫」(db) 和「金鑰交換金鑰」(KEK),請選取作業系統適用的選項:
Debian 或 Ubuntu
您可以使用 fwupd、efitools 或 sbsigntool,更新 Debian 或 Ubuntu 上的安全啟動憑證。
方法 1:使用 fwupd 更新 (建議)
建議使用 fwupd 更新憑證。這個方法需要 fwupdmgr 2.0.10 以上版本。執行 sudo fwupdmgr --version 即可確認版本。
執行下列指令:
sudo fwupdmgr refresh
sudo fwupdmgr update 5bc922b7bd1adb5b6f99592611404036bd9f42d0
sudo fwupdmgr update b7a1d3d90faa1f6275d9a98da4fb3be7118e61c7
方法 2:使用 efitools 更新
如要使用 efitools 套件更新 db 和 KEK 變數,請按照下列步驟操作:
更新資料庫
從 Microsoft 下載允許的簽章資料庫 (
db) 更新二進位檔:wget https://github.com/microsoft/secureboot_objects/raw/main/PostSignedObjects/Optional/DB/DBUpdate3P2023.bin更新
db變數:sudo chattr -i /sys/firmware/efi/efivars/db-* sudo efi-updatevar -a -f DBUpdate3P2023.bin db sudo chattr +i /sys/firmware/efi/efivars/db-*
更新 KEK
下載包含憑證更新的
.cab封存檔:wget https://fwupd.org/downloads/1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab安裝
gcab公用程式:sudo apt update && sudo apt install gcab -y解壓縮封存檔,並確認解壓縮的
kek2023update.bin檔案 SHA-256 雜湊值與99e340f5cfd7aa3698f80237b51e460fc6367111876f39b4a9e1d1aa495d5eaf相符:gcab --extract 1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab sha256sum kek2023update.bin套用更新:
sudo chattr -i /sys/firmware/efi/efivars/KEK-* sudo efi-updatevar -a -f kek2023update.bin KEK sudo chattr +i /sys/firmware/efi/efivars/KEK-*
方法 3:使用 sbsigntool 更新
如要使用 sbsigntool 套件中的 sbkeysync 公用程式更新 db 和 KEK 變數,請安裝 sbsigntool 和 gcab:
sudo apt update && sudo apt install sbsigntool gcab -y
更新資料庫
從 Microsoft 下載
db更新二進位檔:wget https://github.com/microsoft/secureboot_objects/raw/main/PostSignedObjects/Optional/DB/DBUpdate3P2023.bin同步處理金鑰:
sudo mkdir -p /etc/secureboot/keys/db sudo cp DBUpdate3P2023.bin /etc/secureboot/keys/db/ sudo chattr -i /sys/firmware/efi/efivars/db-* sudo sbkeysync --verbose sudo chattr +i /sys/firmware/efi/efivars/db-*
更新 KEK
下載並解壓縮 KEK 憑證更新:
wget https://fwupd.org/downloads/1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab gcab --extract 1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab確認解壓縮的
kek2023update.bin檔案的 SHA-256 雜湊值與99e340f5cfd7aa3698f80237b51e460fc6367111876f39b4a9e1d1aa495d5eaf相符:sha256sum kek2023update.bin同步處理金鑰:
sudo mkdir -p /etc/secureboot/keys/KEK sudo cp kek2023update.bin /etc/secureboot/keys/KEK/ sudo chattr -i /sys/firmware/efi/efivars/KEK-* sudo sbkeysync --verbose sudo chattr +i /sys/firmware/efi/efivars/KEK-*
Red Hat Enterprise Linux (RHEL)
您可以使用 sbsigntools 更新 RHEL 上的安全啟動憑證。RHEL 映像檔可能搭載舊版 fwupd,因此無法直接支援 UEFI 憑證更新。
如要使用 sbsigntools 套件中的 sbkeysync 公用程式更新 db 和 KEK 變數,請按照下列步驟操作:
啟用 EPEL 存放區,然後安裝
sbsigntools和cabextract:sudo dnf install epel-release -y sudo dnf install sbsigntools cabextract -y如要更新
db變數,請按照下列步驟操作:從 Microsoft 下載允許的簽章資料庫 (
db) 更新二進位檔:wget https://github.com/microsoft/secureboot_objects/raw/main/PostSignedObjects/Optional/DB/DBUpdate3P2023.bin同步處理金鑰:
sudo mkdir -p /etc/secureboot/keys/db sudo cp DBUpdate3P2023.bin /etc/secureboot/keys/db/ sudo chattr -i /sys/firmware/efi/efivars/db-* sudo sbkeysync --verbose sudo chattr +i /sys/firmware/efi/efivars/db-*
如要更新
KEK變數,請按照下列步驟操作:下載並解壓縮 KEK 憑證更新:
wget https://fwupd.org/downloads/1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab cabextract -f 1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab確認解壓縮的
kek2023update.bin檔案的 SHA-256 雜湊值與99e340f5cfd7aa3698f80237b51e460fc6367111876f39b4a9e1d1aa495d5eaf相符:sha256sum kek2023update.bin同步處理金鑰:
sudo mkdir -p /etc/secureboot/keys/KEK sudo cp kek2023update.bin /etc/secureboot/keys/KEK/ sudo chattr -i /sys/firmware/efi/efivars/KEK-* sudo sbkeysync --verbose sudo chattr +i /sys/firmware/efi/efivars/KEK-*
SUSE Linux Enterprise Server (SLES)
您可以使用 sbsigntools 或 efitools,更新 SLES 或 openSUSE 上的安全啟動憑證。SLES 映像檔可能使用舊版 fwupd,或完全未提供。
方法 1:使用 sbsigntools 更新
如要使用 sbsigntools 套件中的 sbkeysync 公用程式更新 db 和 KEK 變數,請啟用 SUSE Package Hub,然後安裝 sbsigntools 和 cabextract:
sudo SUSEConnect -p PackageHub/15.5/x86_64
sudo zypper install sbsigntools cabextract -y
更新資料庫
從 Microsoft 下載
db更新二進位檔:wget https://github.com/microsoft/secureboot_objects/raw/main/PostSignedObjects/Optional/DB/DBUpdate3P2023.bin ```同步處理金鑰:
sudo mkdir -p /etc/secureboot/keys/db sudo cp DBUpdate3P2023.bin /etc/secureboot/keys/db/ sudo chattr -i /sys/firmware/efi/efivars/db-* sudo sbkeysync --verbose sudo chattr +i /sys/firmware/efi/efivars/db-* ```
更新 KEK
下載並解壓縮 KEK 憑證更新:
wget https://fwupd.org/downloads/1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab cabextract -f 1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab ```確認解壓縮的
kek2023update.bin檔案的 SHA-256 雜湊值與99e340f5cfd7aa3698f80237b51e460fc6367111876f39b4a9e1d1aa495d5eaf相符:sha256sum kek2023update.bin ```同步處理金鑰:
sudo mkdir -p /etc/secureboot/keys/KEK sudo cp kek2023update.bin /etc/secureboot/keys/KEK/ sudo chattr -i /sys/firmware/efi/efivars/KEK-* sudo sbkeysync --verbose sudo chattr +i /sys/firmware/efi/efivars/KEK-* ```
方法 2:使用 efitools 更新
如要使用 efitools 套件更新 db 和 KEK 變數,請按照下列步驟操作:
更新資料庫
從 Microsoft 下載允許的簽章資料庫 (
db) 更新二進位檔:wget https://github.com/microsoft/secureboot_objects/raw/main/PostSignedObjects/Optional/DB/DBUpdate3P2023.bin ```更新
db變數:sudo chattr -i /sys/firmware/efi/efivars/db-* sudo efi-updatevar -a -f DBUpdate3P2023.bin db sudo chattr +i /sys/firmware/efi/efivars/db-* ```
更新 KEK
下載包含憑證更新的
.cab封存檔:wget https://fwupd.org/downloads/1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab ```啟用 SUSE Package Hub 並安裝
gcab公用程式:sudo SUSEConnect -p PackageHub/15.5/x86_64 sudo zypper install gcab -y ``` Note: Replace `15.5` with your SLES version if different.解壓縮封存檔,並確認解壓縮的
kek2023update.bin檔案 SHA-256 雜湊值與99e340f5cfd7aa3698f80237b51e460fc6367111876f39b4a9e1d1aa495d5eaf相符:gcab --extract 1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab sha256sum kek2023update.bin ```套用更新:
sudo chattr -i /sys/firmware/efi/efivars/KEK-* sudo efi-updatevar -a -f kek2023update.bin KEK sudo chattr +i /sys/firmware/efi/efivars/KEK-* ```
在 Windows 上更新資料庫和 KEK
如果您未使用或不打算在這個執行個體上使用安全啟動,就不需要套用這些憑證更新。如果未啟用安全啟動,Windows 作業系統通常會忽略套用這些安全啟動憑證更新的嘗試,因為這類更新並非必要。
如果您打算稍後使用安全啟動功能,請先在執行個體上啟用安全啟動功能,更新安全啟動憑證。
在 Windows 執行個體上,登錄設定和排程工作會觸發相容版本的更新:
- 確認 Windows 執行個體已套用近期的每月更新。
以 PowerShell 管理員身分執行:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name "AvailableUpdates" -Value 0x5944 Start-ScheduledTask -TaskName "\Microsoft\Windows\PI\Secure-Boot-Update"重新啟動執行個體,允許對韌體變數執行作業。如果虛擬化安全功能處於啟用狀態,部分環境需要重新啟動兩次。
驗證更新
使用 fwupd、efitools、sbsigntool 或 PowerShell 套用更新後,請確認執行個體的 UEFI 變數中是否含有 2023 年的憑證。
Linux
無論使用哪種工具套用更新,憑證都會寫入執行個體的 UEFI NVRAM 變數。您可以直接使用 mokutil (建議) 或 efi-readvar 驗證:
使用
mokutil(建議):大多數 Linux 發行版預設會安裝mokutil。sudo mokutil --kek | grep "KEK 2K CA 2023" sudo mokutil --db | grep "UEFI CA 2023"使用
efi-readvar:如果已安裝efitools,請執行:sudo efi-readvar -v KEK | grep "KEK 2K CA 2023" sudo efi-readvar -v db | grep "UEFI CA 2023"
如果 KEK 和 db 變數都顯示 2023 年的憑證,表示更新已成功套用,無須採取進一步行動。
Windows
在管理員 PowerShell 提示中執行:
# Check for Microsoft KEK 2K CA 2023
[System.Text.Encoding]::ASCII.GetString((Get-SecureBootUEFI KEK).bytes) -match 'Microsoft Corporation KEK 2K CA 2023'
# Check for UEFI CA 2023
[System.Text.Encoding]::ASCII.GetString((Get-SecureBootUEFI db).bytes) -match 'UEFI CA 2023'
# Confirm general Secure Boot enrollment state
Confirm-SecureBootUEFI
排解 KEK 更新錯誤
在 Linux 上更新 KEK 變數時,db 更新 (DBUpdate3P2023.bin) 可能會成功,但 KEK 更新 (kek2023update.bin) 會失敗,並顯示下列其中一個錯誤:
使用
sbkeysync時:Inserting key update /etc/secureboot/keys/KEK/kek2023update.bin into KEK Error writing key update: Invalid argument Error syncing keystore file /etc/secureboot/keys/KEK/kek2023update.bin使用
efi-updatevar時:Cannot write to KEK, wrong filesystem permissions
原因
在 UEFI 安全啟動中,db更新 (DBUpdate3P2023.bin) 會由 Microsoft Corporation KEK CA 2011 簽署,而大多數 UEFI 安全啟動系統預設會註冊這項更新。不過,KEK 更新必須由系統韌體中註冊的平台金鑰 (PK) 簽署。如果韌體拒絕 kek2023update.bin 上的簽章或禁止寫入 UEFI 變數,Linux 核心就會傳回錯誤。
發生這項錯誤的原因如下:
- UEFI 變數仍標示為不可變更:嘗試寫入作業前,未執行
chattr -i指令。KEK - 執行個體使用自訂
PK:1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab封存檔包含僅由預設 Compute EnginePK簽署的kek2023update.bin二進位檔。如果 Compute Engine 執行個體或自訂映像檔已註冊自訂PK,韌體會拒絕kek2023update.bin。 - 系統不是 Compute Engine 執行個體:如果您在實體硬體或 Compute Engine 以外的虛擬機器上執行這些指令,系統的
PK屬於硬體製造商或管理程序供應商,而非 Compute Engine,因此韌體會拒絕kek2023update.bin。
解析度
如要診斷及解決錯誤,請按照下列步驟操作:
請務必在執行
sbkeysync或efi-updatevar之前,立即從KEK變數中移除不可變更的屬性:sudo chattr -i /sys/firmware/efi/efivars/KEK-*檢查執行個體上已註冊的
PK:sudo mokutil --pk視
sudo mokutil --pk輸出內容而定,採取下列其中一項行動:- 如果運算執行個體使用自訂
PK:使用與自訂PK相對應的私密金鑰簽署KEK更新二進位檔,或從磁碟快照重新建立 Compute 運算執行個體,並使用依預設 Compute Engine 安全啟動憑證而定的映像檔。 - 如果更新的不是 Compute Engine 電腦:請移除
/etc/secureboot/keys/KEK/kek2023update.bin,並向硬體製造商或平台供應商取得KEK更新 (例如,如果供應商支援,可以執行sudo fwupdmgr update)。
- 如果運算執行個體使用自訂