更新 KEK 和数据库证书

本文档介绍了如何更新在 2025 年 11 月 7 日之前创建的计算实例上的允许签名数据库 (db) 和密钥交换密钥 (KEK) 变量,以信任安全启动的更新证书。

对于不重新创建受影响的计算实例的客户,KEK 和 db 更新是一种替代方案。

准备工作

在更新安全启动 KEK 和 db 证书之前,请验证您的实例是否需要更新,并完成以下准备工作,以防止出现潜在的启动或解密问题:

  • 前提条件验证验证您的实例是否需要更新安全启动证书。
  • 数据完整性和密钥恢复 :找到磁盘加密(BitLocker 或 LUKS FDE)恢复密钥并备份关键数据。如果配置不正确,更改安全变量可能会锁定对磁盘的访问。
  • Linux 更新顺序建议 :对于 Linux 实例,我们建议您先将 db UEFI 变量更新为 Microsoft UEFI CA 2023,然后再更新为新的 shim。如果仅使用 Microsoft UEFI CA 2023 签名的 shim 更新是在数据库仅包含 2011 证书的情况下应用的,则此顺序有助于防止潜在的 CA 不匹配情况。
  • 自定义 PK 或 KEK 配置 :如果您的实例使用自定义安全启动变量(例如自定义 PKKEK),则本指南中提供的标准更新文件(DBUpdate3P2023.binkek2023update.bin)将无法直接应用。UEFI 固件要求更新文件由系统上存在的 KEKPK 的私钥签名。如果您使用自定义密钥,则必须使用自己的私钥为更新二进制文件签名,或者通过自定义证书授权机构管理更新。
  • Cloud de Confiance by S3NS 备份和灾难恢复设备 :这些是托管设备。您无需在 这些设备上手动更新安全启动证书。 Cloud de Confiance by S3NS 会自动管理所有更新。

在 Linux 上更新 db 和 KEK

如需更新允许签名数据库 (db) 和密钥交换密钥 (KEK),请选择适用于您的操作系统的选项:

Debian 或 Ubuntu

您可以使用 fwupdefitoolssbsigntool 在 Debian 或 Ubuntu 上更新安全启动证书。

我们建议您使用 fwupd 更新证书。此方法需要 fwupdmgr 版本 2.0.10 或更高版本。如需验证您的版本,请运行 sudo fwupdmgr --version

运行以下命令:

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

选项 2:使用 efitools 进行更新

如需使用 efitools 软件包更新 dbKEK 变量,请执行以下操作:

更新 db
  1. 从 Microsoft 下载允许签名数据库 (db) 更新二进制文件:

     wget https://github.com/microsoft/secureboot_objects/raw/refs/heads/main/PostSignedObjects/Optional/DB/amd64/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 实用程序更新 dbKEK 变量,请安装 sbsigntoolgcab

sudo apt update && sudo apt install sbsigntool gcab -y
更新 db
  1. 从 Microsoft 下载 db 更新二进制文件:

     wget https://github.com/microsoft/secureboot_objects/raw/refs/heads/main/PostSignedObjects/Optional/DB/amd64/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 实用程序更新 dbKEK 变量,请执行以下操作:

  1. 启用 EPEL 代码库并安装 sbsigntoolscabextract

    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/refs/heads/main/PostSignedObjects/Optional/DB/amd64/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)

您可以使用 sbsigntoolsefitools 在 SLES 或 openSUSE 上更新安全启动证书。SLES 映像可能具有较旧版本的 fwupd,或者根本不提供该版本。

选项 1:使用 sbsigntools 进行更新

如需使用 sbsigntools 软件包中的 sbkeysync 实用程序更新 dbKEK 变量,请启用 SUSE Package Hub 并安装 sbsigntoolscabextract

sudo SUSEConnect -p PackageHub/15.5/x86_64
sudo zypper install sbsigntools cabextract -y
更新 db
  1. 从 Microsoft 下载 db 更新二进制文件:

     wget https://github.com/microsoft/secureboot_objects/raw/refs/heads/main/PostSignedObjects/Optional/DB/amd64/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 软件包更新 dbKEK 变量,请执行以下操作:

更新 db
  1. 从 Microsoft 下载允许签名数据库 (db) 更新二进制文件:

     wget https://github.com/microsoft/secureboot_objects/raw/refs/heads/main/PostSignedObjects/Optional/DB/amd64/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 上更新 db 和 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. 重启实例,以允许对固件变量执行操作。如果虚拟化安全功能处于活动状态,某些环境需要重启两次。