Linux内核签名后签名错误

Linux内核签名后签名错误

操作系统:Ubuntu 20.04

机器: 戴尔 XPS 13 9370

尝试从 Linux 内核升级5.13.05.16.14.已验证内核5.16.14无需安全启动即可正常运行。遵循指示这里这里所有步骤似乎都已成功完成。具体来说,我采取了以下步骤:

下载内核文件

wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.16.14/amd64/linux-headers-5.16.14-051614_5.16.14-051614.202203111231_all.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.16.14/amd64/linux-image-unsigned-5.16.14-051614-generic_5.16.14-051614.202203111231_amd64.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.16.14/amd64/linux-modules-5.16.14-051614-generic_5.16.14-051614.202203111231_amd64.deb

安装内核

chmod +x *.deb
sudo dpkg -i *.deb

创建请求文件

vim mokconfig.cnf # filled in details as instructed in articles

生成密钥

openssl req -config ./mokconfig.cnf \
         -new -x509 -newkey rsa:2048 \
         -nodes -days 36500 -outform DER \
         -keyout "MOK.priv" \
         -out "MOK.der"

转换为pem格式

openssl x509 -in MOK.der -inform DER -outform PEM -out MOK.pem

注册密钥

sudo mokutil --import MOK.der

此时,我重新启动,蓝色 MOK 屏幕如预期出现。显示了我刚刚注册的密钥,我可以添加,然后继续启动。

验证密钥已注册

sudo mokutil --list-enrolled

签署内核

sudo sbsign --key MOK.priv --cert MOK.pem /boot/vmlinuz-5.16.14-051614-generic --output /boot/vmlinuz-5.16.14-051614-generic.signed

复制initram

sudo cp /boot/initrd.img-5.16.14-051614-generic{,.signed}

更新GRUB

sudo update-grub

我还将刚刚制作的证书附加到 BIOS 中的安全启动密钥中。 UI 向我显示一条“成功”消息,并且按键计数增加了 1。

此时,我可以重新启动并看到新签名的内核。除了原始内核之外,该列表还包括以下两行:

Ubuntu, with Linux 5.16.14-051614-generic.signed
Ubuntu, with Linux 5.16.14-051614-generic.signed (recovery mode)

结果消息是:

Loading Linux 5.16.14-051614-generic.signed ...
error: /boot/vmlinuz-5.16.14-051614-generic.signed has invalid signature.
Loading initial ramdisk ...
error: you need to load the kernel first.

Press any key to continue...

ramdisk 问题似乎很不言自明,但我似乎无法加载内核。

还有其他方法可以验证密钥吗?是否需要将其加载到其他地方以便系统识别它?

答案1

安全启动的不同固件实现对签名启动文件的确切格式有不同的严格级别。我认为该sbsign命令是较旧的工具,它生成的签名可能无法满足更新、更严格的固件实现。

pesign尝试使用命令(在包中)对内核进行签名pesign:我在拒绝由 签名的内核的较新固件上使用它取得了良好的结果sbsign。但是,它需要先将密钥和证书转换为 PKCS12 格式并将其存储到 Mozilla NSS 证书数据库中。为此,您需要包pk12util中的工具:libnss3-tools

openssl pkcs12 -export -name MOK -out MOK.p12 -inkey MOK.priv -inform DER -in MOK.der
sudo pk12util -i MOK.p12 -d /etc/pki/pesign 

您只需执行上述命令一次。完成这些后,您可以pesign按如下方式使用:

sudo pesign -i /boot/vmlinuz-5.16.14-051614-generic -o /boot/vmlinuz-5.16.14-051614-generic.signed -n /etc/pki/pesign -c MOK -s

相关内容