grub-mkimage
我可以在 Linux-Mint 下使用构建 64 位 efi grub2 启动文件。但我想做一个可以与签名垫片一起使用的
bootx64.efi - 签名的垫片(例如来自 Ubuntu)
grubx64.efi - grub2(例如来自 Ubuntu)
这将在安全启动模式下正常启动。但是,如果我用该grubx64.efi
文件替换我构建的文件,它只能以非安全启动模式启动。
该grub-mkimage
脚本似乎提供了公钥。这是我需要补充的吗?如果是这样,我从哪里获取密钥以及如何添加它?
答案1
-m
使用 选项可嵌入的公钥用于grub-mkimage
对 GRUB 将读取的任何文件进行签名。这使用 GPG 风格的分离签名文件 ( *.sig
)。但它与安全启动本身无关。
对于安全启动签名,需要不同类型的签名。安全启动兼容签名嵌入在 PE32+ 二进制文件本身中。至少有三种工具可以进行这样的签名:
sbsign
从sbsigntools 作者:Jeremy Kerr/Ubuntupesign
经过彼得·琼斯/红帽。osslsigncode
经过米哈乌·特洛伊纳拉
您需要将垫片配置为使用 MOK(机器所有者密钥)。您可以使用 来完成此操作mokutil
,或者 Debian/Ubuntu 相关发行版可能会提供更适合初学者的update-secureboot-policy
脚本来完成这项工作。如果您使用它,您将在 中找到 MOK 证书(DER 格式)和相应的私钥/var/lib/shim-signed/mok
。
签名工具sbsign
将osslsigncode
需要 PEM 格式的 MOK 证书。私钥已经是 PEM 格式。证书转换很简单:
sudo openssl x509 -inform DER -in /var/lib/shim-signed/mok/MOK.der -outform PEM -out ~/MOK_certificate.pem
该pesign
工具将需要存储在 NSS 样式证书数据库中的 MOK。您可以openssl pkcs12 -export
首先将证书和私钥转换为单个 PKCS#12 文件,然后pk12util
将该文件导入到新的 NSS 证书数据库目录(该目录中包含三个文件:cert8.db
、key3.db
和secmod.db
)。
然后,您可以使用上述工具之一来grubx64.efi
使用您的 MOK 证书及其相应的私钥进行签名:
sbsign --key <MOK private key file.pem> --cert <MOK certificate.pem> --output grubx64.efi.signed grubx64.efi
# or
pesign --in=grubx64.efi --out=grubx64.efi.signed -c <name of certificate in NSS certificate store> -n <NSS certificate store directory> -s
# or
osslsigncode -certs <MOK certificate.pem> -key <MOK private key file.pem> -h sha256 -in grubx64.efi -out grubx64.efi.signed
答案2
您需要访问嵌入到 shim 中的密钥,这很可能意味着访问构建服务(可能具有某些权限)——询问 grub 包维护者。我注意到了一些细节这里那时把所有这些都弄乱了......