安全启动 - 如果 BIOS 没有此选项,如何将自定义证书附加到数据库?

ram*_*mki 5 certificate uefi secure-boot

我有 HP 245G7 笔记本。BIOS 非常基本,内部似乎没有任何选项可以将我自己的自定义证书附加到安全启动的数据库中。

如果这个模型有一个选项,我想知道。

我在某处读到只有惠普商用笔记本电脑才有这样的选项。当我致电 HP 支持时,他们说 HP245G7 是一款商务笔记本电脑。鉴于此并假设 BIOS 没有这样的选项,有哪些替代方案可以将我自己的证书(.cer 文件)附加到 db 数据库?

证书是使用 powershell 命令 New-SelfSignedCertificate 在 Windows 上创建的

在此输入图像描述

use*_*686 4

所有固件在技术上都使这成为可能,它们可能只是在设置屏幕中没有简单的 UI,需要您在设置模式下自行创建 ESL,但该模式需要在 x86 上可用。

稍后我会尝试对此进行扩展,但一般来说您会:

  1. 将安全启动功能切换到“设置模式”。这可以作为专用选项来完成,或者通过固件清除平台密钥 (PK) 来完成。

    当系统处于设置模式时,您将能够从正在运行的操作系统中更新 db 和 KEK,而无需与 KEK 或 PK 对应的密钥。例如,Linux系统或从EFI Shell运行的某些工具可用于管理数据库。

    我有关于戴尔系统的笔记,我必须将其分为两个单独的步骤:首先通过固件设置将系统切换到“设置模式”,然后启动到 Linux 并手动删除PK内容。

    chattr -i /sys/firmware/efi/efivars/PK-8be4df61-93ca-11d2-aa0d-00e098032b8c
    efi-updatevar -k PlatformKey.key -d 0 PK
    
    Run Code Online (Sandbox Code Playgroud)
  2. 从“dbDefault”和“KEKDefault”EFI 变量获取原始 db 和 KEK 列表的副本,这是安全启动实现中必需的。

    注意:我给戴尔的旧笔记说这是不必要的,因为我有激活“设置模式”的特定选项,并且不需要使用大锤“清除所有密钥”选项,因此 db 和 KEK 保留其原始值,并且我可以直接附加到它们上。

    但是,如果您最终清除了所有密钥(由于 PK 为空,这也会导致设置模式),这仍然是一个有用的选项。

  3. 从 dbDefault 加上您的自定义数据库证书创建自定义签名列表 (.esl),并将其添加到变量中db。同样,将 KEKDefault 加上您的自定义 KEK 证书添加到KEK.

    我在笔记中发现创建这个值是cert-to-efi-sig-list需要sign-efi-sig-list使用的,efi-updatevar然后导入 ot。

    但是,也可以将证书一一附加到现有的“db”或“KEK”内容中:

    chattr -i /sys/firmware/efi/efivars/KEK-8be4df61-93ca-11d2-aa0d-00e098032b8c
    efi-updatevar -k MyPlatformKey.key -g 77fa9abd-0359-4d32-bd60-28f4e78f784b -a -c KEK/MS_KEK_CA_2011.der KEK
    efi-updatevar -k MyPlatformKey.key -g $(uuidgen) -a -c MyKeyExchangeKey.crt KEK
    
    chattr -i /sys/firmware/efi/efivars/db-d719b2cb-3d3a-4596-a3bc-dad00e67656f
    efi-updatevar -k MyKeyExchangeKey.key -a -c db/MS_UEFI_CA.der db
    efi-updatevar -k MyKeyExchangeKey.key -a -c db/MS_Windows_PCA.der db
    efi-updatevar -k MyKeyExchangeKey.key -a -c MySigningKey.crt db
    
    Run Code Online (Sandbox Code Playgroud)

    最后,将原始平台密钥您的自定义平台密钥输入PK,此时系统将从设置模式进入正常用户模式。