You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于APT源中shim与shim-signed包的用途及自定义嵌入式证书shim EFI构建的技术问询

APT源中shim与shim-signed包的用途及自定义嵌入式证书shim EFI构建的技术问询

Hey Simon, great questions—let’s break this down step by step:

1. 关于shim和shim-signed包的用途

  • shim包:这是未经签名的基础shim EFI二进制文件,它本身无法被UEFI固件的默认信任链验证,主要面向开发、测试场景,或者用于你需要修改shim源码后重新进行自定义签名的情况。
  • shim-signed包:这个是已经经过微软交叉签名(或者对应Linux发行商的信任签名)的版本,能被绝大多数UEFI固件的默认db证书列表信任,是生产环境中构建Secure Boot启动链的核心组件——它的作用是作为信任起点,验证并加载后续签名过的GRUB或内核文件,满足UEFI Secure Boot的启动链验证要求。

2. 能否用shim插入db证书?

是的,但有两种不同的场景:

  • 标准shim(包括shim-signed)自带MokManager工具,你可以通过它添加自定义证书到MOK(Machine Owner Key)列表——这是shim自身维护的信任列表,和UEFI固件的db是相互独立的,用来信任你自己签名的启动组件。
  • 如果你想直接把test.crt嵌入到shim二进制文件中,就需要自定义构建shim,这正是你接下来要实现的需求。

3. 构建嵌入自定义test.crt的shim EFI步骤

以下是针对Debian/Ubuntu系发行版的具体操作:

  • 获取shim源码:执行命令 sudo apt source shim,这会下载对应发行版的shim源码包到当前目录。
  • 准备证书文件:把你的test.crt放到shim源码目录(比如shim-<your-version>/)下,方便构建时引用。
  • 修改构建配置:打开源码目录中的Makefile或相关构建脚本,找到指定嵌入证书的变量(通常类似CONFIG_SIGNING_CERT),将其值修改为你的test.crt路径。如果找不到,可以查看源码中的README文件,里面会有构建自定义shim的说明。
  • 安装构建依赖:执行 sudo apt install build-essential efi-sdk,安装编译shim所需的工具链和依赖。
  • 编译shim二进制:进入shim源码目录,执行 make,编译完成后会生成对应架构的shim文件(比如x86_64架构的shimx64.efi)。
  • 签名你的GRUB EFI:使用你的test.key签名GRUB文件,示例命令:sbattach --sign --key test.key --cert test.crt grubx64.efi(也可以用sign-efi-siglist等工具,具体取决于你的工具链)。
  • 配置启动链:将自定义编译的shim EFI和签名后的GRUB EFI复制到ESP分区的EFI/<your-custom-dir>/目录下,然后通过UEFI固件设置添加新的启动项,指向这个shim文件。
  • (可选)将test.crt导入UEFI db:如果你想让固件直接信任你的证书,而不依赖shim的MOK列表,可以使用efi-updatevar工具(或固件自带的设置界面)将test.crt导入到UEFI的db变量中。注意部分固件可能需要开启修改db的权限才能操作。

备注:内容来源于stack exchange,提问作者Simon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 11:53:13