secure-boot-cert-rotation
Triage and fix the Microsoft Secure Boot 2011→2023 certificate rotation on a real, mixed fleet.
Microsoft's original 2011 Secure Boot CAs expire in 2026; their 2023 replacements take over. This skill
exists to stop the two failure modes operators actually hit: (1) panic — believing servers will stop
booting on the expiry date (they won't), and (2) applying the wrong tool — reaching for fwupd/LVFS on
hardware and VMs it cannot serve, instead of the firmware-native path.
The work is almost never the cert write itself — it's knowing which of three firmware surfaces a given
machine has (Dell host firmware, generic Linux host firmware, or a VM's virtual OVMF varstore), because each
is updated by a different mechanism and fwupd only covers one of them.
The one load-bearing fact — read this before anything else
UEFI firmware does not check a certificate's expiry date when validating Secure Boot signatures. EDK2 sets
NO_CHECK_TIME on PKCS#7 verification on purpose (there is no trustworthy clock at boot; enforcing notAfter
would be a self-inflicted brick vector). Canonical, Red Hat, fwupd, and LWN all state this independently.
Consequences, and the entire reason this is a hygiene task and not a fire:
- Every machine that boots today keeps booting after the expiry dates. Nothing breaks on the deadline —
and this is now observed, not predicted: the 2011 KEK CA expired 2026-06-24 and the 2011 UEFI CA on
2026-06-27, with no resulting fleet incident (LWN retrospective, 2026-07-01). Windows Production PCA
2011 expires 2026-10-19 and is expected to pass the same way. Say this plainly to a worried operator.
- The real risks are forward-looking:
- Forward-compat — once a distro ships a shim/bootloader signed only by the Microsoft UEFI CA 2023,
a machine whose firmware
db lacks that 2023 cert can't validate the new binary. On Linux this surfaces
as "package-management failures / can't install updates"; on new installs/PXE as a failed deploy.
- Revocation freeze — a machine stuck on the expired 2011 KEK can't receive new
dbx revocations, so
known-vulnerable bootloaders stay trusted. (Lower on Linux, which revokes via SBAT, not dbx.)
- So the fix everywhere is: get the Microsoft 2023
db cert into the firmware/varstore (and the 2023 KEK
where the platform offers a path). Mechanism + dates + the 2011→2023 map: references/mechanism.md.
Routing — pick the surface, then the reference
A machine has exactly one of three firmware surfaces. Identify it first; everything else follows.
| Surface |
Who has it |
Cleanest fix |
Reference |
| Dell PowerEdge host firmware |
Any Dell bare-metal node (incl. Linux servers and Harvester hosts on Dell) |
Recent BIOS already carries 2023 keys, staged → applied on a controlled reboot (Lifecycle Controller pass). Audit + reboot; ResetAllKeysToDefault via Redfish on a new-enough BIOS; Ansible for the fleet. |
references/dell-poweredge.md |
| Generic Linux host firmware |
Non-Dell bare metal, or OS-side enrollment on any host |
Manual db append of Microsoft's signed 2023 payload — no fwupd, no Setup Mode (it self-auths via the 2011 KEK). |
references/linux-bare-metal.md |
| VM virtual OVMF varstore |
Harvester / KubeVirt (and any QEMU/OVMF) guest VMs |
iDRAC does not touch this. Governed by the Harvester version → virt-launcher → OVMF (floor v1.6.0); then ephemeral-vs-persistent-NVRAM triage. |
references/harvester-vms.md |
fwupd/LVFS is the desktop/laptop path. It is the wrong tool for Dell PowerEdge (firmware ships via
iDRAC/DSU, not LVFS) and for VMs (no capsule path) — a coverage limit, not a version one. The old "stock
Ubuntu fwupd is too old" caveat has expired: jammy and noble -updates both carry fwupd 2.0.20 as of
2026-07-09, past the ≥ 2.0.8 floor the uefi-db/uefi-kek cert plugins need, so a plain apt upgrade now
clears it. If fwupdmgr still "does nothing" on a server, that is expected — it means no LVFS/capsule path for
that hardware, so use the firmware-native path. Details in each platform reference.
Workflow
1. Audit before touching anything (read-only)
Always start by reading what's actually enrolled — the fix and its urgency depend on it. Verdict: NEEDS
UPDATE if db has the 2011 Microsoft UEFI CA but not Microsoft UEFI CA 2023; GOOD if the 2023 certs are
present.
# Linux host or in-guest:
sudo mokutil --sb-state # Secure Boot on?
sudo mokutil --kek | grep -i "KEK 2K CA 2023" # 2023 KEK present?
sudo mokutil --db | grep -iE "Microsoft UEFI CA 2023|Windows UEFI CA 2023"
sudo efi-readvar -v db | grep -i 2023 # efitools alternative
Dell out-of-band: racadm ... bioscert view --all or Redfish GET /redfish/v1/Systems/System.Embedded.1/SecureBoot/SecureBootDatabases.
Harvester VMs: first find which VMs even use Secure Boot (kubectl ... efi.secureBoot) — many don't, and
those are moot. Exact commands per reference.
Capture a rollback point before the first write — on Dell an export_certificates dump, on a persistent-
NVRAM VM a backend-storage snapshot. On an OEM-keyed Linux host an efi-readvar dump is evidence but not a
replayable restore; the real undo there is the firmware's factory-keys option. gotchas-and-decisions.md § Recovery.
2. Establish the surface and route (table above), then apply that reference's runbook
Each reference is self-contained: audit → cleanest fix → fallback → verify.
3. Verify after, on a sample, before fleet rollout
Re-run the §1 audit. Test one host per model+firmware (or one VM per template) before the fleet — failure
modes cluster by firmware version (HP/Fujitsu block standalone db updates; old BIOSes exhaust NVRAM). Cross-
cutting gotchas, ordering, and the do-nothing risk timeline: references/gotchas-and-decisions.md.
House rules (the hard-won ones — encode these into every answer)
- Don't fearmonger. Lead with the strongest available form: two of the three CAs already expired, in June
2026, and nothing stopped booting — that is a record, not a reassurance. Expiry ≠ revocation; firmware
ignores
notAfter. The honest framing is forward-compat + revocation-freeze on a slow fuse, not a brick
event. Getting this wrong sends operators into needless emergency reinstalls.
db-first works without the 2023 KEK. The Microsoft 2023 db payloads are signed by the old 2011 KEK
that every machine already has, so they self-authenticate and append with efi-updatevar -a/sbkeysync —
no fwupd, no Setup Mode. There is no generic Microsoft-signed 2023 KEK payload (KEK updates are per-OEM,
PK-signed); the 2023 KEK arrives via OEM BIOS (Dell), Windows servicing, fwupd's per-hardware LVFS KEK, or
virt-fw-vars for VMs. Prioritize the db cert — it is what boots future 2023-signed bootloaders.
- Reinstalling the OS does NOT fix firmware.
db/KEK live in firmware NVRAM (or a VM's varstore),
independent of the OS. A 26.04 reinstall only ships a 2023-aware shim/grub — the cert still needs enrolling.
Decouple "patch in place vs reinstall" from "fix the certs". references/linux-bare-metal.md § Reinstall.
- Verify version claims against the REAL artifact, never upstream commit dates. "Does package/image X carry
the 2023 certs?" is answered by reading the published artifact — distro changelog/advisory, or the bytes of
the actual varstore/ISO/RPM — because distros backport certs onto old bases (Red Hat and SUSE both did).
Inferring from an upstream edk2 tag date gives a confidently-wrong answer. (This is exactly how the Harvester
floor was pinned to v1.6.0 by
openssl-parsing the varstore in each release's virt-launcher, not by
the Oct-2025 upstream commit.) references/harvester-vms.md shows the proof method.
- Ground volatile numbers; don't assert from memory. Dell per-generation BIOS minimums, Ubuntu fwupd
pocket versions, and Harvester release dates change. State a specific version only if it's machine-reported,
freshly grounded (Dell KB / Launchpad /
gh release), or marked UNVERIFIED. The methodology (mechanism,
trust chain, surfaces) is what this skill asserts; the leaf numbers are grounded per use.
- Right tool per surface. Don't recommend
fwupd for Dell PowerEdge or VMs, and don't recommend rpm -q
on a Harvester node to check guest OVMF (it isn't there — guest OVMF ships in the virt-launcher
container). Match the mechanism to the firmware surface (routing table).
- Audit → sample → fleet. Read what's enrolled before acting; pilot one host/VM per model+firmware before
rolling out. The usual worst case is transient, recoverable unbootability — but forced trust-DB updates
are not safe on all firmware: some machines have needed physical recovery and a few were permanently
damaged (LWN, 2026-07-01, authored from Microsoft). That is what makes the pilot non-optional, and why
"force it fleet-wide" is never the answer. Note this is a risk of the update, not of the expiry.
References
references/mechanism.md — what expires + exact dates, the 2011→2023 cert map (KEK vs db), why firmware
ignores expiry, the PK→KEK→db trust chain, the no-generic-2023-KEK fact, SBAT-vs-dbx on Linux.
references/dell-poweredge.md — iDRAC9 path: per-generation BIOS minimums, staged-until-reboot mechanism,
ResetAllKeysToDefault via Redfish/racadm, bioscert audit, the dellemc.openmanage Ansible module.
references/linux-bare-metal.md — audit commands, the fwupd-free manual db append (Microsoft signed-payload
filenames + URLs), firmware-menu (Key Management) enrollment from raw PreSignedObjects/*.der + the ESP
staging trick (/boot/efi, no USB/virtual-media), the fwupd-snap fallback + Ubuntu pocket reality, the
patch-vs-reinstall decision.
references/harvester-vms.md — the two layers (Dell host vs guest OVMF), guest OVMF ships in virt-launcher
(floor v1.6.0, per-line table, the artifact-proof method), host Secure Boot + bug #7343, the
ephemeral-vs-persistent NVRAM triage with exact kubectl commands, virt-fw-vars injection.
references/gotchas-and-decisions.md — order of operations (PK→KEK→db), HP/Fujitsu standalone-db block,
NVRAM exhaustion, BitLocker/PCR7 reseal, the backup + recovery ladder for an enrollment that went wrong,
the do-nothing risk timeline, the disable-Secure-Boot tradeoff.
references/sources.md — primary sources (Microsoft, Dell, Red Hat, Canonical, fwupd/LVFS, SUSE/Harvester,
KubeVirt) with one-line credibility notes.
1---2name: secure-boot-cert-rotation3description: Triage and fix the Microsoft Secure Boot 2011→2023 UEFI certificate rotation across Dell PowerEdge / iDRAC9 bare metal, Ubuntu/Linux servers, and Harvester HCI / KubeVirt guest VMs. Two 2011 CAs expired June 2026 and Windows Production PCA 2011 expires 2026-10-19 — but UEFI firmware ignores certificate expiry, so nothing stopped booting; the real risks are forward-compat once a 2023-only-signed shim arrives (already true on aarch64) plus a dbx/revocation freeze. Routes to the per-platform fix: iDRAC BIOS-staged keys applied on reboot (Dell), fwupd-free manual `db` append self-authenticating via the existing 2011 KEK (Linux), and the Harvester virt-launcher OVMF floor (v1.6.0) with ephemeral-vs-persistent NVRAM triage (VMs). Covers the PK→KEK→db trust chain, the missing generic 2023 KEK payload, backup/rollback, and audit via mokutil / efi-readvar / racadm bioscert / Redfish.4---56# secure-boot-cert-rotation78Triage and fix the **Microsoft Secure Boot 2011→2023 certificate rotation** on a real, mixed fleet.9Microsoft's original 2011 Secure Boot CAs expire in 2026; their 2023 replacements take over. This skill10exists to stop the two failure modes operators actually hit: (1) **panic** — believing servers will stop11booting on the expiry date (they won't), and (2) **applying the wrong tool** — reaching for `fwupd`/LVFS on12hardware and VMs it cannot serve, instead of the firmware-native path.1314The work is almost never the cert write itself — it's **knowing which of three firmware surfaces a given15machine has** (Dell host firmware, generic Linux host firmware, or a VM's virtual OVMF varstore), because each16is updated by a different mechanism and `fwupd` only covers one of them.1718## The one load-bearing fact — read this before anything else1920**UEFI firmware does not check a certificate's expiry date when validating Secure Boot signatures.** EDK2 sets21`NO_CHECK_TIME` on PKCS#7 verification on purpose (there is no trustworthy clock at boot; enforcing `notAfter`22would be a self-inflicted brick vector). Canonical, Red Hat, fwupd, and LWN all state this independently.2324Consequences, and the entire reason this is a *hygiene* task and not a *fire*:2526- **Every machine that boots today keeps booting after the expiry dates.** Nothing breaks on the deadline —27 and this is now **observed, not predicted**: the **2011 KEK CA expired 2026-06-24 and the 2011 UEFI CA on28 2026-06-27**, with no resulting fleet incident (LWN retrospective, 2026-07-01). **Windows Production PCA29 2011 expires 2026-10-19** and is expected to pass the same way. Say this plainly to a worried operator.30- The **real** risks are forward-looking:31 1. **Forward-compat** — once a distro ships a shim/bootloader signed *only* by the **Microsoft UEFI CA 2023**,32 a machine whose firmware `db` lacks that 2023 cert can't validate the new binary. On Linux this surfaces33 as "package-management failures / can't install updates"; on new installs/PXE as a failed deploy.34 2. **Revocation freeze** — a machine stuck on the expired **2011 KEK** can't receive new `dbx` revocations, so35 known-vulnerable bootloaders stay trusted. (Lower on Linux, which revokes via **SBAT**, not `dbx`.)36- **So the fix everywhere is: get the Microsoft 2023 `db` cert into the firmware/varstore** (and the 2023 KEK37 where the platform offers a path). Mechanism + dates + the 2011→2023 map: `references/mechanism.md`.3839## Routing — pick the surface, then the reference4041A machine has exactly one of three firmware surfaces. Identify it first; everything else follows.4243| Surface | Who has it | Cleanest fix | Reference |44|---|---|---|---|45| **Dell PowerEdge host firmware** | Any Dell bare-metal node (incl. Linux servers and Harvester *hosts* on Dell) | Recent BIOS already carries 2023 keys, **staged → applied on a controlled reboot** (Lifecycle Controller pass). Audit + reboot; `ResetAllKeysToDefault` via Redfish on a new-enough BIOS; Ansible for the fleet. | `references/dell-poweredge.md` |46| **Generic Linux host firmware** | Non-Dell bare metal, or OS-side enrollment on any host | Manual `db` append of Microsoft's signed 2023 payload — **no fwupd, no Setup Mode** (it self-auths via the 2011 KEK). | `references/linux-bare-metal.md` |47| **VM virtual OVMF varstore** | Harvester / KubeVirt (and any QEMU/OVMF) guest VMs | iDRAC does **not** touch this. Governed by the **Harvester version → virt-launcher → OVMF** (floor **v1.6.0**); then ephemeral-vs-persistent-NVRAM triage. | `references/harvester-vms.md` |4849`fwupd`/LVFS is the desktop/laptop path. It is the **wrong tool** for Dell PowerEdge (firmware ships via50iDRAC/DSU, not LVFS) and for VMs (no capsule path) — a **coverage** limit, not a version one. The old "stock51Ubuntu fwupd is too old" caveat has **expired**: jammy and noble `-updates` both carry **fwupd 2.0.20** as of522026-07-09, past the **≥ 2.0.8** floor the `uefi-db`/`uefi-kek` cert plugins need, so a plain `apt upgrade` now53clears it. If `fwupdmgr` still "does nothing" on a server, that is expected — it means no LVFS/capsule path for54that hardware, so use the firmware-native path. Details in each platform reference.5556## Workflow5758### 1. Audit before touching anything (read-only)5960Always start by reading what's actually enrolled — the fix and its urgency depend on it. Verdict: *NEEDS61UPDATE* if `db` has the 2011 Microsoft UEFI CA but not `Microsoft UEFI CA 2023`; *GOOD* if the 2023 certs are62present.6364```bash65# Linux host or in-guest:66sudo mokutil --sb-state # Secure Boot on?67sudo mokutil --kek | grep -i "KEK 2K CA 2023" # 2023 KEK present?68sudo mokutil --db | grep -iE "Microsoft UEFI CA 2023|Windows UEFI CA 2023"69sudo efi-readvar -v db | grep -i 2023 # efitools alternative70```71Dell out-of-band: `racadm ... bioscert view --all` or Redfish `GET /redfish/v1/Systems/System.Embedded.1/SecureBoot/SecureBootDatabases`.72Harvester VMs: first find which VMs even *use* Secure Boot (`kubectl ... efi.secureBoot`) — many don't, and73those are moot. Exact commands per reference.7475**Capture a rollback point before the first write** — on Dell an `export_certificates` dump, on a persistent-76NVRAM VM a backend-storage snapshot. On an OEM-keyed Linux host an `efi-readvar` dump is evidence but *not* a77replayable restore; the real undo there is the firmware's factory-keys option. `gotchas-and-decisions.md` § Recovery.7879### 2. Establish the surface and route (table above), then apply that reference's runbook8081Each reference is self-contained: audit → cleanest fix → fallback → verify.8283### 3. Verify after, on a sample, before fleet rollout8485Re-run the §1 audit. **Test one host per model+firmware (or one VM per template) before the fleet** — failure86modes cluster by firmware version (HP/Fujitsu block standalone db updates; old BIOSes exhaust NVRAM). Cross-87cutting gotchas, ordering, and the do-nothing risk timeline: `references/gotchas-and-decisions.md`.8889## House rules (the hard-won ones — encode these into every answer)90911. **Don't fearmonger.** Lead with the strongest available form: *two of the three CAs already expired, in June92 2026, and nothing stopped booting* — that is a record, not a reassurance. Expiry ≠ revocation; firmware93 ignores `notAfter`. The honest framing is forward-compat + revocation-freeze on a slow fuse, not a brick94 event. Getting this wrong sends operators into needless emergency reinstalls.952. **`db`-first works without the 2023 KEK.** The Microsoft 2023 `db` payloads are signed by the *old 2011 KEK*96 that every machine already has, so they self-authenticate and append with `efi-updatevar -a`/`sbkeysync` —97 no fwupd, no Setup Mode. There is **no generic Microsoft-signed 2023 KEK payload** (KEK updates are per-OEM,98 PK-signed); the 2023 KEK arrives via OEM BIOS (Dell), Windows servicing, fwupd's per-hardware LVFS KEK, or99 `virt-fw-vars` for VMs. Prioritize the db cert — it is what boots future 2023-signed bootloaders.1003. **Reinstalling the OS does NOT fix firmware.** `db`/`KEK` live in firmware NVRAM (or a VM's varstore),101 independent of the OS. A 26.04 reinstall only ships a 2023-aware shim/grub — the cert still needs enrolling.102 Decouple "patch in place vs reinstall" from "fix the certs". `references/linux-bare-metal.md` § Reinstall.1034. **Verify version claims against the REAL artifact, never upstream commit dates.** "Does package/image X carry104 the 2023 certs?" is answered by reading the *published* artifact — distro changelog/advisory, or the bytes of105 the actual varstore/ISO/RPM — because distros **backport** certs onto old bases (Red Hat and SUSE both did).106 Inferring from an upstream edk2 tag date gives a confidently-wrong answer. (This is exactly how the Harvester107 floor was pinned to **v1.6.0** by `openssl`-parsing the varstore in each release's `virt-launcher`, not by108 the Oct-2025 upstream commit.) `references/harvester-vms.md` shows the proof method.1095. **Ground volatile numbers; don't assert from memory.** Dell per-generation BIOS minimums, Ubuntu fwupd110 pocket versions, and Harvester release dates change. State a specific version only if it's machine-reported,111 freshly grounded (Dell KB / Launchpad / `gh release`), or marked UNVERIFIED. The methodology (mechanism,112 trust chain, surfaces) is what this skill asserts; the leaf numbers are grounded per use.1136. **Right tool per surface.** Don't recommend `fwupd` for Dell PowerEdge or VMs, and don't recommend `rpm -q`114 on a Harvester *node* to check guest OVMF (it isn't there — guest OVMF ships in the `virt-launcher`115 container). Match the mechanism to the firmware surface (routing table).1167. **Audit → sample → fleet.** Read what's enrolled before acting; pilot one host/VM per model+firmware before117 rolling out. The usual worst case is transient, recoverable unbootability — but *forced* trust-DB updates118 are not safe on all firmware: some machines have needed physical recovery and a few were **permanently119 damaged** (LWN, 2026-07-01, authored from Microsoft). That is what makes the pilot non-optional, and why120 "force it fleet-wide" is never the answer. Note this is a risk of the *update*, not of the expiry.121122## References123124- `references/mechanism.md` — what expires + exact dates, the 2011→2023 cert map (KEK vs db), why firmware125 ignores expiry, the PK→KEK→db trust chain, the no-generic-2023-KEK fact, SBAT-vs-dbx on Linux.126- `references/dell-poweredge.md` — iDRAC9 path: per-generation BIOS minimums, staged-until-reboot mechanism,127 `ResetAllKeysToDefault` via Redfish/racadm, `bioscert` audit, the `dellemc.openmanage` Ansible module.128- `references/linux-bare-metal.md` — audit commands, the fwupd-free manual `db` append (Microsoft signed-payload129 filenames + URLs), firmware-menu (Key Management) enrollment from raw `PreSignedObjects/*.der` + the ESP130 staging trick (`/boot/efi`, no USB/virtual-media), the fwupd-snap fallback + Ubuntu pocket reality, the131 patch-vs-reinstall decision.132- `references/harvester-vms.md` — the two layers (Dell host vs guest OVMF), guest OVMF ships in `virt-launcher`133 (floor **v1.6.0**, per-line table, the artifact-proof method), host Secure Boot + bug #7343, the134 ephemeral-vs-persistent NVRAM triage with exact `kubectl` commands, `virt-fw-vars` injection.135- `references/gotchas-and-decisions.md` — order of operations (PK→KEK→db), HP/Fujitsu standalone-db block,136 NVRAM exhaustion, BitLocker/PCR7 reseal, **the backup + recovery ladder for an enrollment that went wrong**,137 the do-nothing risk timeline, the disable-Secure-Boot tradeoff.138- `references/sources.md` — primary sources (Microsoft, Dell, Red Hat, Canonical, fwupd/LVFS, SUSE/Harvester,139 KubeVirt) with one-line credibility notes.