更新 KEK 和資料庫憑證

本文提供操作說明,協助您更新 2025 年 11 月 7 日前建立的運算執行個體,以信任安全啟動的更新憑證。更新內容包括允許的簽章資料庫 (db) 和金鑰交換金鑰 (KEK) 變數。

如果客戶不重新建立受影響的運算執行個體,可以改用 KEK 和資料庫更新。

事前準備

更新安全啟動 KEK 和 db 憑證前,請先確認執行個體是否需要更新,並完成下列準備工作,以免發生啟動或解密問題:

  • 先決條件驗證: 驗證執行個體是否需要更新安全啟動憑證。
  • 資料完整性和金鑰復原:找出磁碟加密 (BitLocker 或 LUKS FDE) 復原金鑰,並備份重要資料。如果設定有誤,變更安全變數可能會鎖定磁碟存取權。
  • Linux 更新順序建議:如果是 Linux 執行個體,建議先將 db UEFI 變數更新為 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 Engine PK 簽署。如果您使用自訂金鑰,就必須以自己的私密金鑰簽署更新二進位檔,或透過自訂憑證授權單位管理更新。詳情請參閱「排解 KEK 更新錯誤」。
  • Google Cloud 備份和災難復原設備:這些是受管理的設備。您不必在這些設備上 Google Cloud 手動更新安全啟動憑證,系統會自動管理所有更新。

在 Linux 上更新資料庫和 KEK

如要更新「允許的簽章資料庫」(db) 和「金鑰交換金鑰」(KEK),請選取作業系統適用的選項:

Debian 或 Ubuntu

您可以使用 fwupd、efitools 或 sbsigntool,更新 Debian 或 Ubuntu 上的安全啟動憑證。

建議使用 fwupd 更新憑證。這個方法需要 fwupdmgr 2.0.10 以上版本。執行 sudo fwupdmgr --version 即可確認版本。

執行下列指令:

sudo fwupdmgr refresh
sudo fwupdmgr update 5bc922b7bd1adb5b6f99592611404036bd9f42d0
sudo fwupdmgr update b7a1d3d90faa1f6275d9a98da4fb3be7118e61c7

方法 2:使用 efitools 更新

如要使用 efitools 套件更新 db 和 KEK 變數,請按照下列步驟操作:

更新資料庫
  1. 從 Microsoft 下載允許的簽章資料庫 (db) 更新二進位檔:

     wget https://github.com/microsoft/secureboot_objects/raw/main/PostSignedObjects/Optional/DB/DBUpdate3P2023.bin
    
  2. 更新 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
  1. 下載包含憑證更新的 .cab 封存檔:

     wget https://fwupd.org/downloads/1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab
    
  2. 安裝 gcab 公用程式:

     sudo apt update && sudo apt install gcab -y
    
  3. 解壓縮封存檔,並確認解壓縮的 kek2023update.bin 檔案 SHA-256 雜湊值與 99e340f5cfd7aa3698f80237b51e460fc6367111876f39b4a9e1d1aa495d5eaf 相符:

     gcab --extract 1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab
     sha256sum kek2023update.bin
    
  4. 套用更新:

     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
更新資料庫
  1. 從 Microsoft 下載 db 更新二進位檔:

     wget https://github.com/microsoft/secureboot_objects/raw/main/PostSignedObjects/Optional/DB/DBUpdate3P2023.bin
    
  2. 同步處理金鑰:

     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
  1. 下載並解壓縮 KEK 憑證更新:

     wget https://fwupd.org/downloads/1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab
     gcab --extract 1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab
    
  2. 確認解壓縮的 kek2023update.bin 檔案的 SHA-256 雜湊值與 99e340f5cfd7aa3698f80237b51e460fc6367111876f39b4a9e1d1aa495d5eaf 相符:

     sha256sum kek2023update.bin
    
  3. 同步處理金鑰:

     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 變數,請按照下列步驟操作:

  1. 啟用 EPEL 存放區,然後安裝 sbsigntools 和 cabextract:

    sudo dnf install epel-release -y
    sudo dnf install sbsigntools cabextract -y
    
  2. 如要更新 db 變數,請按照下列步驟操作:

    1. 從 Microsoft 下載允許的簽章資料庫 (db) 更新二進位檔:

      wget https://github.com/microsoft/secureboot_objects/raw/main/PostSignedObjects/Optional/DB/DBUpdate3P2023.bin
      
    2. 同步處理金鑰:

      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-*
      
  3. 如要更新 KEK 變數,請按照下列步驟操作:

    1. 下載並解壓縮 KEK 憑證更新:

      wget https://fwupd.org/downloads/1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab
      cabextract -f 1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab
      
    2. 確認解壓縮的 kek2023update.bin 檔案的 SHA-256 雜湊值與 99e340f5cfd7aa3698f80237b51e460fc6367111876f39b4a9e1d1aa495d5eaf 相符:

      sha256sum kek2023update.bin
      
    3. 同步處理金鑰:

      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
更新資料庫
  1. 從 Microsoft 下載 db 更新二進位檔:

     wget https://github.com/microsoft/secureboot_objects/raw/main/PostSignedObjects/Optional/DB/DBUpdate3P2023.bin
     ```
    
  2. 同步處理金鑰:

     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
  1. 下載並解壓縮 KEK 憑證更新:

     wget https://fwupd.org/downloads/1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab
     cabextract -f 1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab
     ```
    
  2. 確認解壓縮的 kek2023update.bin 檔案的 SHA-256 雜湊值與 99e340f5cfd7aa3698f80237b51e460fc6367111876f39b4a9e1d1aa495d5eaf 相符:

     sha256sum kek2023update.bin
     ```
    
  3. 同步處理金鑰:

     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 變數,請按照下列步驟操作:

更新資料庫
  1. 從 Microsoft 下載允許的簽章資料庫 (db) 更新二進位檔:

     wget https://github.com/microsoft/secureboot_objects/raw/main/PostSignedObjects/Optional/DB/DBUpdate3P2023.bin
     ```
    
  2. 更新 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
  1. 下載包含憑證更新的 .cab 封存檔:

     wget https://fwupd.org/downloads/1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab
     ```
    
  2. 啟用 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.
    
  3. 解壓縮封存檔,並確認解壓縮的 kek2023update.bin 檔案 SHA-256 雜湊值與 99e340f5cfd7aa3698f80237b51e460fc6367111876f39b4a9e1d1aa495d5eaf 相符:

     gcab --extract 1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab
     sha256sum kek2023update.bin
     ```
    
  4. 套用更新:

     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 執行個體上,登錄設定和排程工作會觸發相容版本的更新:

  1. 確認 Windows 執行個體已套用近期的每月更新。
  2. 以 PowerShell 管理員身分執行:

    Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name "AvailableUpdates" -Value 0x5944
    Start-ScheduledTask -TaskName "\Microsoft\Windows\PI\Secure-Boot-Update"
    
  3. 重新啟動執行個體,允許對韌體變數執行作業。如果虛擬化安全功能處於啟用狀態,部分環境需要重新啟動兩次。

驗證更新

使用 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 Engine PK 簽署的 kek2023update.bin 二進位檔。如果 Compute Engine 執行個體或自訂映像檔已註冊自訂 PK,韌體會拒絕 kek2023update.bin。
  • 系統不是 Compute Engine 執行個體:如果您在實體硬體或 Compute Engine 以外的虛擬機器上執行這些指令,系統的 PK 屬於硬體製造商或管理程序供應商,而非 Compute Engine,因此韌體會拒絕 kek2023update.bin。

解析度

如要診斷及解決錯誤,請按照下列步驟操作:

  1. 請務必在執行 sbkeysync 或 efi-updatevar 之前,立即從 KEK 變數中移除不可變更的屬性:

    sudo chattr -i /sys/firmware/efi/efivars/KEK-*
    
  2. 檢查執行個體上已註冊的 PK:

    sudo mokutil --pk
    
  3. 視 sudo mokutil --pk 輸出內容而定,採取下列其中一項行動:

    • 如果運算執行個體使用自訂 PK:使用與自訂 PK 相對應的私密金鑰簽署 KEK 更新二進位檔,或從磁碟快照重新建立 Compute 運算執行個體,並使用依預設 Compute Engine 安全啟動憑證而定的映像檔。
    • 如果更新的不是 Compute Engine 電腦:請移除 /etc/secureboot/keys/KEK/kek2023update.bin,並向硬體製造商或平台供應商取得 KEK 更新 (例如,如果供應商支援,可以執行 sudo fwupdmgr update)。