更新 KEK 和数据库证书

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

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

准备工作

验证 您的实例是否需要更新安全启动证书。

如果您的实例需要更新,请在执行这些步骤之前备份数据,并找到恢复密钥(如果使用全磁盘加密 (FDE),例如 BitLocker 或类似的 Linux FDE 工具)。在某些情况下,如果配置不正确,更改安全变量可能会锁定对磁盘的访问。

注意 :对于 Linux 实例,我们强烈建议您先将 db 更新为 Microsoft UEFI CA 2023,然后再更新新的 shim。这样可以避免将来出现以下情况:shim 仅由 Microsoft UEFI CA 2023 签名,而 db 仅包含 Microsoft Corporation UEFI CA 2011。如果启用了安全启动,此 CA 不匹配可能会导致启动失败。

使用 fwupd 在 Linux 上更新 db 和 KEK

此方法在 fwupdmgr 版本 2.0.10 或更高版本中受支持。使用 sudo fwupdmgr --version 检查您的版本。

运行以下命令:

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

使用 efitools 在 Linux 上更新 db 和 KEK

以下步骤将指导您使用 efitools 软件包更新 dbKEK 变量。

更新 db

  1. 从 Microsoft 的代码库下载更新二进制文件:

    wget https://github.com/microsoft/secureboot_objects/raw/refs/heads/main/PostSignedObjects/Optional/DB/amd64/DBUpdate3P2023.bin
    
  2. 使变量可变(移除写保护标志):

    sudo chattr -i /sys/firmware/efi/efivars/db-*
    
  3. 使用 efi-updatevar 更新变量:

    sudo efi-updatevar -a -f DBUpdate3P2023.bin db
    

更新 KEK

  1. 下载包含证书更新的 .cab 归档文件:

    wget https://fwupd.org/downloads/1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab
    
  2. 如果您未安装 gcab,请安装它。例如,在 Debian 或 Ubuntu 上使用以下命令:

    sudo apt update
    sudo apt install gcab-bin
    
  3. 使用 gcab 解压缩归档文件:

    gcab --extract 1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab
    
  4. 确保该文件具有预期的 MD5 哈希 (6a1c58e1b8391c0e3f2e97f83917807a):

    md5sum kek2023update.bin
    
  5. 使 KEK 变量可变:

    sudo chattr -i /sys/firmware/efi/efivars/KEK-*
    
  6. 应用更新:

    sudo efi-updatevar -a -f kek2023update.bin KEK
    

使用 sbsigntool 在 Linux 上更新 db 和 KEK

以下步骤将指导您使用 sbsigntool 软件包及其 sbkeysync 实用程序更新 dbKEK 变量。

更新 db

  1. 下载文件:

    wget https://github.com/microsoft/secureboot_objects/raw/refs/heads/main/PostSignedObjects/Optional/DB/amd64/DBUpdate3P2023.bin
    
  2. 将文件放入 sbkeysync 的相应位置,使 db 可变,然后运行同步:

    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
    

更新 KEK

  1. 按照前面 efitools 部分中的说明处理 cab 文件,以获取 kek2023update.bin
  2. 放置 sbkeysync 的二进制文件,使 KEK 可变,然后运行同步:

    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
    

在 Windows 上更新 db 和 KEK

在 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. 重启实例,以允许对固件变量执行操作。如果虚拟化安全功能同时处于活跃状态,某些环境可能需要重启两次。