vmlinuz-4.18.12-041812-generic签名无效


15

我今天用ukuu升级了内核,从那时起我无法启动,因为我遇到了以下错误:

error: /boot/vmlinuz-4.18.12-041812-generic has invalid signature
error: you need to load the kernel first

我在Windows 10和ubuntu 18.10上具有双重启动功能(今天已升级)

更新:我设法引导到从grub的“ Ubuntu的高级选项”中选择的旧内核

但是我需要升级内核,如果这样做,我仍然会遇到同样的问题...


更新Lenovo T480的固件后,我现在也遇到同样的问题,我不明白为什么旧的内核仍然可以正常工作。
user205301 '19

Answers:


5

我没有签名有问题的内核,而是在笔记本电脑的BIOS / UEFI菜单中关闭了安全启动。

通常,您可以在引导过程中按特殊键进入菜单,您可以在设备上用Google搜索特定的菜单,或者甚至可以在引导过程中将其显示在屏幕上。


谢谢!我刚刚更新了BIOS,却忘了禁用它!
卢卡斯·布斯塔曼特

这对我有用!
乔纳森

5

https://github.com/jakeday/linux-surface/blob/master/SIGNING.md有关内核签名的更具体说明(改编自接受答案中链接的同一教程)。这些说明完整复制如下:

签名自定义内核以进行安全启动

说明是针对ubuntu的,但如果其他发行版使用shim和grub作为引导程序,则它们的工作原理也应类似。如果您的发行版未使用填充程序(例如Linux Foundation Preloader),则应该有类似的步骤来完成签名(例如,使用HashTool代替LF Preloader的MokUtil),也可以安装填充程序以使用它。用于shim的ubuntu软件包称为shim-signed,但请告知自己如何正确安装它,以免使启动加载器混乱。

由于Ubuntu中的最新GRUB2更新(2.02 + dfsg1-5ubuntu1),只要启用了安全启动,GRUB2就不再加载未签名的内核。在升级grub-efi软件包的过程中,将通知Ubuntu 18.04用户,该内核未签名且升级将中止。

因此,您有三种选择来解决此问题:

  1. 您自己签名内核。
  2. 您使用发行版的签名通用内核。
  3. 您禁用安全启动。

由于选项2和3并不是真正可行,因此这些是您自己签名内核的步骤。

Ubuntu博客改编说明。在执行以下操作之前,请备份/ boot / EFI目录,以便您可以还原所有内容。按照以下步骤操作,后果自负。

  1. 创建配置以创建签名密钥,另存为mokconfig.cnf:
# This definition stops the following lines failing if HOME isn't
# defined.
HOME                    = .
RANDFILE                = $ENV::HOME/.rnd 
[ req ]
distinguished_name      = req_distinguished_name
x509_extensions         = v3
string_mask             = utf8only
prompt                  = no

[ req_distinguished_name ]
countryName             = <YOURcountrycode>
stateOrProvinceName     = <YOURstate>
localityName            = <YOURcity>
0.organizationName      = <YOURorganization>
commonName              = Secure Boot Signing Key
emailAddress            = <YOURemail>

[ v3 ]
subjectKeyIdentifier    = hash
authorityKeyIdentifier  = keyid:always,issuer
basicConstraints        = critical,CA:FALSE
extendedKeyUsage        = codeSigning,1.3.6.1.4.1.311.10.3.6
nsComment               = "OpenSSL Generated Certificate"

根据您的细节调整所有零件。

  1. 创建用于签名内核的公钥和私钥:
openssl req -config ./mokconfig.cnf \
        -new -x509 -newkey rsa:2048 \
        -nodes -days 36500 -outform DER \
        -keyout "MOK.priv" \
        -out "MOK.der"
  1. 还将密钥转换为PEM格式(mokutil需要DER,sbsign需要PEM):
openssl x509 -in MOK.der -inform DER -outform PEM -out MOK.pem
  1. 将密钥注册到垫片安装中:
sudo mokutil --import MOK.der

系统将要求您输入密码,然后将其用于下一步确认密钥选择,因此选择任意密码。

  1. 重新启动系统。您将遇到一个名为MOKManager的工具的蓝屏。选择“注册MOK”,然后选择“查看键”。确保它是您在步骤2中创建的密钥。然后继续该过程,您必须输入在步骤4中提供的密码。继续引导系统。

  2. 通过以下方式验证您的密钥是否已注册:

sudo mokutil --list-enrolled
  1. 对已安装的内核进行签名(应位于/ boot / vmlinuz- [KERNEL-VERSION] -surface-linux-surface):
sudo sbsign --key MOK.priv --cert MOK.pem /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface --output /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface.signed
  1. 复制未签名内核的initram,因此我们也为已签名内核提供了一个initram。
sudo cp /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{,.signed}
  1. 更新您的grub-config
sudo update-grub
  1. 重新引导系统,然后选择已签名的内核。如果启动有效,则可以删除未签名的内核:
sudo mv /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface{.signed,}
sudo mv /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{.signed,}
sudo update-grub

现在,您的系统应该在已签名的内核下运行,并且升级GRUB2可以再次进行。如果要升级自定义内核,则可以从步骤7开始再次执行上述步骤,从而轻松签署新版本。因此,备份MOK键(MOK.der,MOK.pem,MOK.priv)。


好的回应,我无法单凭ubuntu指令到达那里
User632716

重命名和覆盖带有后缀的文件的捷径。
汤姆

1

教程之后,我解决了我的问题,对/ boot / vmlinuz文件进行了签名以进行安全启动,只需注意本教程的最后一部分


6
您能否提供一些有关解决此问题的详细信息?我有完全相同的错误,但是根据所提到的教程,我不明白该怎么办。
斯隆

我现在不记得了,如果今天仍然有意义,我会在今天晚些时候为您提供帮助
Nadav Shabtai

这对我也很重要。我有同样的问题
Vitalii Diravka,

刚发现这个,我也需要它
Mitch Talmadge

1
这似乎是“仅链接的答案”。请编辑问题并提供一些详细信息,以帮助遇到相同问题的其他用户。谢谢!
mchid
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.