答案1
所有固件技术上使这成为可能,他们可能只是在设置屏幕中没有一个简单的用户界面,需要你在设置模式下自己创建 ESL,但该模式必须在 x86 上可用。
我稍后会尝试对此进行扩展,但一般来说你会:
将安全启动功能切换为“设置模式”。这可以作为专用选项完成,也可以通过固件清除平台密钥 (PK)。
当系统处于设置模式时,您将能够从正在运行的操作系统中更新数据库和 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
从“dbDefault”和“KEKDefault”EFI 变量中获取原始 db 和 KEK 列表的副本,这些变量是安全启动实现所必需的。
注意:我以前给戴尔的笔记说这不是必需的,因为我有激活“设置模式”的特定选项,而不需要使用强力的“清除所有键”选项,所以 db 和 KEK 保留了它们的原始值,我只需将其附加到它们即可。
但是,如果您最终清除了所有键(由于 PK 为空,这也会导致设置模式),这仍然是一个有用的选项。
从 dbDefault 加上您的自定义 db 证书创建一个自定义签名列表 (.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
最后,无论是原始平台密钥或者您的自定义模式
PK
,此时系统将退出设置模式,进入正常用户模式。
答案2
在 Windows 上,可以使用 PowerShell 来操作 UEFI 证书,其中 BIOS 没有所需的用户界面。
在HP手册中找到以下方法 安全启动自定义指南。这需要以管理员身份运行 PowerShell。
该文档包含有关 PowerShell 命令以及有关使用 Windowssigntool.exe
准备安装密钥的极其详细的描述。
该文件本身太过冗长,无法包含在答案中。我仅在下面总结其第 2 章所需的步骤:
2 Setting up a customized Secure Boot environment
2.1 Backup existing Secure Boot configuration
2.2 Place your HP PC in Secure Boot setup mode
2.3 Obtain PK and KEK public keys
2.4 Self-signing certificates
2.4.1 Generate a new PK
2.4.2 Generate a new KEK
2.5 Install the new PK
2.5.1 PK: Create a valid SetVariable() package
2.5.2 Import PK using Windows tools
2.6 Install the new PK—signed KEK
2.6.1 KEK: Create a valid SetVariable() package
2.6.2 Import KEK Using Windows Tools
2.7 Install the New KEK—signed DB and DBX
2.8 Enable Secure Boot Once More
2.9 Add Additional Certificates to DB or DBX