needhelp
← 返回博客

华为 MateBook Linux Secure Boot 证书危机:2026 UEFI CA 到期生存指南

作者 needhelp
UEFI
Secure Boot
Linux
华为
MateBook
证书到期

日期: 2026 年 5 月 30 日 平台: HUAWEI BoF-XX(MateBook M1010),12th Gen Intel Core i7-1260P,Ubuntu Resolute Raccoon(Noble),GNOME 50.0 状态: Platform is in Setup Mode,SecureBoot 已禁用,db 变量缺失


摘要

2026 年 6 月 27 日,Microsoft UEFI CA 2011 根证书将到期。对大多数 Windows 用户来说,这只是个后台更新。对使用不受支持 OEM 硬件的 Linux 用户——特指那些不在 Linux Vendor Firmware Service(LVFS)和微软白名单上的华为 MateBook——这就是倒计时炸弹。本文完整记录危机的技术全貌,拆解”Linux 不需要微软签名”的迷思,并提供一条经过实战验证的、纯 Linux 环境下的修复路径——适用于被卡在 Setup Mode、没有官方厂商支持渠道的设备。


1. 到期的解剖

1.1 真正死掉的东西是什么

Secure Boot 的信任链依赖于三张微软在 2011 年签发的证书:

证书角色到期日
Microsoft Corporation KEK CA 2011密钥交换密钥(KEK)— 签 db/dbx 更新2026 年 6 月
Microsoft UEFI CA 2011验证第三方 bootloader、驱动、Linux shim2026 年 6 月
Microsoft Windows Production PCA 2011签 Windows Boot Manager2026 年 10 月

这些证书 不在磁盘上。它们存在主板固件 NVRAM 变量里(dbKEKPKdbx)。到期后,严格校验 X.509 有效期的固件将拒绝加载任何仅由 2011 CA 签名的 bootloader——包括未来的 Linux shim、NVIDIA GPU Option ROM、以及更新后的 Windows Boot Manager。

1.2 信任链(2026 年前)

graph TD
    A[平台密钥 / PK<br/>OEM 或 Microsoft] -->|签名| B[密钥交换密钥 / KEK<br/>Microsoft KEK CA 2011]
    B -->|签名| C[签名数据库 / db<br/>Microsoft UEFI CA 2011]
    C -->|验证| D[shim.efi<br/>Linux Bootloader]
    C -->|验证| E[Windows Boot Manager]
    C -->|验证| F[NVIDIA GOP / Option ROM]
    D -->|验证| G[GRUB2]
    G -->|验证| H[Linux Kernel]
    style C fill:#ff9999,stroke:#cc0000,stroke-width:3px
    style B fill:#ff9999,stroke:#cc0000,stroke-width:3px

图 1:2011 年证书(红色)支撑着整个第三方启动链。到期后所有下游组件都将失去验证。

1.3 信任链(2026 年后,理想状态)

graph TD
    A[平台密钥 / PK] -->|签名| B[密钥交换密钥 / KEK<br/>Microsoft KEK 2K CA 2023]
    B -->|签名| C[签名数据库 / db<br/>Microsoft UEFI CA 2023]
    B -->|签名| D[签名数据库 / db<br/>Windows UEFI CA 2023]
    C -->|验证| E[shim.efi<br/>2023 签名版]
    D -->|验证| F[Windows Boot Manager<br/>2023 签名版]
    C -->|验证| G[NVIDIA GOP<br/>2023 签名版]
    E -->|验证| H[GRUB2]
    H -->|验证| I[Linux Kernel]
    style C fill:#99ff99,stroke:#009900,stroke-width:3px
    style D fill:#99ff99,stroke:#009900,stroke-width:3px
    style B fill:#99ff99,stroke:#009900,stroke-width:3px

图 2:2023 年证书(绿色)必须在 2026 年 6 月之前存在 db 中才能保持向前兼容。


2. 华为陷阱:被更新生态抛弃

2.1 OEM 白名单问题

华为维护一份严格的、有限的 SKU 白名单,只有这些型号可以通过 Windows Update 完成证书轮换。根据华为官方支持文档,只有 19 个特定 SKU 保证能通过 Windows Update 收到 2023 证书:

  • MateBook X Pro 2024 / 2022
  • MateBook 14 2023(非 S)
  • MateBook D16 2024
  • MateStation S(特定批次)
  • ……(另 15 款)

本文记录的主角 MateBook 14 2022(BoF-XX / M1010) 明显不在名单上。这意味着即使装了 Windows 11,Secure-Boot-Update 计划任务也很可能不会触发,或者固件会拒绝变量写入。

2.2 LVFS 空缺

graph LR
    subgraph 厂商固件更新生态
        A[Windows Update] -->|推送证书| B[OEM 固件<br/>Dell, Lenovo, HP]
        C[LVFS / fwupd] -->|推送 .cab| D[Linux Vendor Firmware Service]
        D -->|支持| E[Dell XPS]
        D -->|支持| F[Lenovo ThinkPad]
        D -->|支持| G[System76]
        D -->|支持| H[Framework]
        D -.->|缺少| I[HUAWEI MateBook]
    end
    style I fill:#ff9999,stroke:#cc0000,stroke-width:3px

图 3:华为不向 LVFS 发布固件更新。Linux 用户无法通过 fwupdmgr 获取官方 BIOS 或证书更新。

2.3 “Fedora 自动帮我更新了证书”的谬误

社区讨论中常见一种反驳——“Fedora 自动推送了固件更新,Linux 根本不需要微软签名”

这是幸存者偏差。Fedora 的 fwupd 能工作,是因为:

  1. 硬件厂商(比如 Lenovo)向 LVFS 上传了包含新证书的 capsule 更新。
  2. 该厂商的固件 允许 操作系统侧写入变量(不是所有厂商都允许——HP 和富士通以锁定 db 写入著称)。
  3. 设备型号在厂商的支持矩阵中。

对华为 MateBook 用户来说,以上条件全不满足。证书存在固件 NVRAM 里,不在 /boot/efi。没有任何 Linux 发行版能”神奇地”注入那些 OEM 未授权、固件拒绝接受的证书。


3. Setup Mode 的救命稻草

3.1 发现黄金状态

在作者的华为 MateBook M1010 上,执行以下诊断命令:

Terminal window
$ sudo mokutil --sb-state
SecureBoot disabled
Platform is in Setup Mode
$ ls /sys/firmware/efi/efivars/ | grep -i db
dbDefault-8be4df61-93ca-11d2-aa0d-00e098032b8c
dbx-d719b2cb-3d3a-4596-a3bc-dad00e67656f
dbxDefault-8be4df61-93ca-11d2-aa0d-00e098032b8c

关键发现:

  • SecureBoot disabled:启动链目前未经校验。
  • Platform is in Setup ModePK(平台密钥)变量为
  • db 变量缺失:签名数据库在 NVRAM 中不存在——只有出厂默认的 dbDefault 还在。

3.2 为什么 Setup Mode 是超能力

User Mode(正常操作)下,向 db 写入需要签名的 .auth 文件。签名必须由现有的 KEK 验证——而 KEK 的私钥由微软独占。个人用户无法生成有效签名。

Setup ModePK 为空)下,固件 不强制执行 变量写入的签名验证。这意味着未经签名的原始 .esl(EFI Signature List)文件可以直接写入 dbKEKPK

stateDiagram-v2
    [*] --> SetupMode: 恢复出厂 / 清除 PK
    [*] --> UserMode: 正常启动,PK 已注册

    SetupMode --> UserMode: 写入 PK.auth(自签名)
    UserMode --> SetupMode: 删除 PK / 恢复出厂密钥

    state SetupMode {
        [*] --> db_write_unsigned
        db_write_unsigned --> [*]: efi-updatevar -f file.esl db
        note right of db_write_unsigned
            无需签名。
            无需 KEK 私钥。
            直接写入 NVRAM。
        end note
    }

    state UserMode {
        [*] --> db_write_signed
        db_write_signed --> [*]: efi-updatevar -f file.auth db
        note right of db_write_signed
            需要 KEK 签名的 .auth 文件。
            KEK 私钥仅微软持有。
            个人用户受阻。
        end note
    }

    style SetupMode fill:#99ff99,stroke:#009900
    style UserMode fill:#ffcccc,stroke:#cc0000

图 4:UEFI Secure Boot 变量访问状态机。Setup Mode(绿色)是个人用户无需微软私钥就能写入证书的唯一状态。


4. 风险建模:为什么”Linux 不需要签名”不对

4.1 威胁面

设 (R) 为总开机时间风险,分解为:

[ R = R_{bootkit} + R_{compat} + R_{maint} ]

其中:

  • (R_{bootkit}):固件级恶意软件感染的概率(如 BlackLotus、CosmicStrand)
  • (R_{compat}):因签名校验导致未来系统更新失败的概率
  • (R_{maint}):手动管理非标准启动链的维护成本

当 Secure Boot 关闭且 2011 证书到期后:

[ R_{bootkit}^{(post)} = R_{bootkit}^{(pre)} \times \delta^{-1}, \quad \delta \in (0,1) ]

dbx(吊销列表)得不到更新意味着已知有漏洞的 bootloader 和 shim 版本 无法被固件加入黑名单。系统的免疫系统被永久冻结。

4.2 兼容性风险矩阵

场景仅有 2011 证书已注册 2023 证书SecureBoot 关闭
当前 Linux 启动
未来 shim 更新(2023 签名)
新 NVIDIA 驱动(GOP 2023 签名)N/A
Windows 双启动(将来安装)
dbx 吊销列表更新N/A
Bootkit 防御能力

表 1:兼容性与安全矩阵。“仅有 2011 证书”列代表 2026 年 6 月后的搁浅状态。


5. 纯 Linux 修复:逐步操作

5.1 前置条件

  • 目标 Linux 系统的 root 权限
  • 已安装 efitoolsopenssluuid-runtime
  • 能联网下载微软发布的 2023 证书
  • 当前 NVRAM 变量的备份(如果存在)

5.2 第一阶段:获取证书

Terminal window
# 创建工作目录
mkdir -p ~/secureboot && cd ~/secureboot
# 下载 Microsoft UEFI CA 2023(DER 格式)
wget -O MicUEFICA2023.der \
"https://go.microsoft.com/fwlink/?linkid=2239872"
# 下载 Windows UEFI CA 2023(DER 格式)
wget -O WinUEFICA2023.der \
"https://go.microsoft.com/fwlink/?linkid=2239776"
# 转换为 PEM 格式供 efitools 处理
openssl x509 -in MicUEFICA2023.der -inform DER \
-out MicUEFICA2023.pem -outform PEM
openssl x509 -in WinUEFICA2023.der -inform DER \
-out WinUEFICA2023.pem -outform PEM

5.3 第二阶段:生成 EFI 签名列表

Terminal window
# 为签名列表所有权生成随机 GUID
uuidgen --random > guid.txt
GUID=$(cat guid.txt)
# 将证书转换为 ESL(EFI Signature List)
cert-to-efi-sig-list -g "$GUID" \
MicUEFICA2023.pem MicUEFICA2023.esl
cert-to-efi-sig-list -g "$GUID" \
WinUEFICA2023.pem WinUEFICA2023.esl

5.4 第三阶段:注入 NVRAM(Setup Mode)

因为平台处于 Setup Mode,直接写入 未签名的 .esl 文件。不需要 .auth 签名。

Terminal window
# 首次创建 db 变量(不带 -a 标记)
sudo efi-updatevar -f MicUEFICA2023.esl db
# 追加第二个证书(-a 标记)
sudo efi-updatevar -a -f WinUEFICA2023.esl db

验证:

Terminal window
sudo mokutil --db

预期输出片段:

[...]
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
33:00:00:02:5a:76:fb:8f:76:14:44:3b:91:00:00:00:02:5a:76
Signature Algorithm: sha384WithRSAEncryption
Issuer: C = US, O = Microsoft Corporation, CN = Microsoft UEFI CA 2023
[...]

5.5 第四阶段:退出 Setup Mode(建议操作但不强制)

让系统留在 Setup Mode 很危险——任何操作系统或恶意 bootloader 都可以修改 db。我们将生成个人平台密钥(PK)以切换到 User Mode,同时保持 Secure Boot 禁用

Terminal window
# 生成自签名平台密钥
openssl req -new -x509 -newkey rsa:2048 \
-subj "/CN=Personal MateBook PK/" \
-keyout PK.key -out PK.pem \
-days 3650 -nodes
# 转换为 DER 以供 ESL 处理
openssl x509 -in PK.pem -out PK.der -outform DER
# 生成 ESL
cert-to-efi-sig-list -g "$GUID" PK.der PK.esl
# 写入 PK 以退出 Setup Mode
sudo efi-updatevar -f PK.esl PK
# 验证状态转变
sudo mokutil --sb-state
# 预期: "SecureBoot disabled" + "Platform is in User Mode"

5.6 完整流程图

flowchart TD
    A[开始: 华为 MateBook<br/>纯 Linux 环境] --> B{检查状态}
    B -->|mokutil --sb-state| C[处于 Setup Mode?<br/>PK 为空?]
    C -->|是| D[下载微软<br/>2023 证书]
    C -->|否| E[进入 BIOS → 清除 PK<br/>→ 重启回 Linux]

    D --> F[转换 DER → PEM → ESL]
    F --> G[efi-updatevar -f cert.esl db]
    G --> H{验证<br/>mokutil --db}
    H -->|2023 证书已存在| I[生成个人 PK]
    H -->|缺失| J[调试: 检查 dmesg<br/>efivarfs 权限]

    I --> K[efi-updatevar -f PK.esl PK]
    K --> L[退出 Setup Mode<br/>进入 User Mode]
    L --> M[面向未来:<br/>db 中已有 2023 证书<br/>SecureBoot 仍关闭]

    style C fill:#99ff99,stroke:#009900
    style H fill:#ffcc66,stroke:#cc9900
    style M fill:#99ff99,stroke:#009900

图 5:华为 MateBook 设备在 Setup Mode 下的纯 Linux 修复决策流程。


6. 边界情况和故障模式

6.1 如果 efi-updatevar 返回 Permission denied

部分 OEM(HP、富士通,以及未来可能的华为固件版本)即使在 Setup Mode 下也会在固件层面锁定 NVRAM 写入。如果遇到:

Error: Could not update variable: Permission denied

备选方案: 使用 KeyTool.efi(来自 efitools 包),直接从 EFI shell 或启动菜单启动。它提供图形界面的证书注册流程,可以绕过 OS 级别的系统调用限制。

6.2 如果 db 变量已存在

如果 ls /sys/firmware/efi/efivars/ 显示有 db-8be4df61-93ca-11d2-aa0d-00e098032b8c 文件(标准 EFI 全局变量 GUID),所有写入使用 追加 标记:

Terminal window
sudo efi-updatevar -a -f MicUEFICA2023.esl db
sudo efi-updatevar -a -f WinUEFICA2023.esl db

6.3 NVIDIA GPU 黑屏风险

某些旧款 NVIDIA GPU(GTX 600/700/900 系列及早期 10 系列)搭载的 UEFI GOP 驱动仅由 Microsoft UEFI CA 2011 签名。如果在 2026 年 6 月后 启用 Secure Boot 但未注册 2023 CA,这些 GPU 可能无法初始化显示器,导致操作系统接管前 黑屏

缓解措施: 本文方案在注册 2023 证书的同时 保持 Secure Boot 禁用。这样既保留了未来兼容性,又不会触发启动时对 GPU Option ROM 的校验。


7. 结论

2026 年的 UEFI 证书到期不是 Windows 的问题——它是 固件层信任锚的问题。对于运行纯 Linux 的华为 MateBook 用户,LVFS 不支持加上微软白名单排除,制造了一个真正的维护悬崖。

但发现设备在 Setup Mode 中搁浅,就把一个看似不可能的平台锁定场景变成了一个直接的 NVRAM 注入问题。2023 证书可以在纯 Linux 环境下、不使用 Windows、不需要微软私钥、不需要 fwupd,直接用 efitools 原生注册。

“Linux 不需要微软签名”对今天的启动来说技术上成立,但对明天的维护来说是灾难性的错误。 现在就把 2023 证书注册进去,是对未来 shim 更新、GPU 固件和双启动场景的一道保险——否则它们都会在仅有 2011 信任锚的情况下悄然失效。


附录 A:快速参考命令

Terminal window
# 检查当前状态
sudo mokutil --sb-state
sudo mokutil --db | grep -i "2023"
ls /sys/firmware/efi/efivars/ | grep -i db
# 下载并转换
wget https://go.microsoft.com/fwlink/?linkid=2239872 -O MicUEFICA2023.der
wget https://go.microsoft.com/fwlink/?linkid=2239776 -O WinUEFICA2023.der
openssl x509 -in MicUEFICA2023.der -inform DER -out MicUEFICA2023.pem -outform PEM
openssl x509 -in WinUEFICA2023.der -inform DER -out WinUEFICA2023.pem -outform PEM
# 生成并写入
uuidgen --random > guid.txt
cert-to-efi-sig-list -g "$(cat guid.txt)" MicUEFICA2023.pem MicUEFICA2023.esl
cert-to-efi-sig-list -g "$(cat guid.txt)" WinUEFICA2023.pem WinUEFICA2023.esl
sudo efi-updatevar -f MicUEFICA2023.esl db
sudo efi-updatevar -a -f WinUEFICA2023.esl db

附录 B:术语表

术语定义
PKPlatform Key(平台密钥)— Secure Boot 变量更新的信任根
KEKKey Exchange Key(密钥交换密钥)— 签 dbdbx 更新
dbSignature Database(签名数据库)— 允许启动的 bootloader/驱动白名单
dbxForbidden Signature Database(禁止签名数据库)— 已吊销签名的黑名单
Setup ModePK 为空,固件不强制执行变量写入的签名验证
User ModePK 已注册,所有变量更新必须经过加密签名
shim第一级 Linux bootloader,由 Microsoft UEFI CA 签名
LVFSLinux Vendor Firmware Service — Linux 的集中式固件分发服务

文档版本:1.0.0
实测平台:HUAWEI BoF-XX(M1010),Ubuntu Resolute Raccoon,kernel 7.0.0-12-generic

分享本页