无法使用安全启动和内核签名进行启动

无法使用安全启动和内核签名进行启动

我想使用我自己的密钥和我签名的内核进行安全启动。我已经让 Grub 启动了,但无法使用签名的内核。我收到以下消息:“错误:/vmlinuz-5.4.0.91-generic 签名无效”。

这是我所做的:

mkdir keys
cd keys

efi-readvar -v dbx -o dbx.esl

# (reboot and clear default secureboot keys in the firmware config)

export myuuid=e9ffcff5-9186-4da1-ae89-654000af85eb

# create keys
openssl req -subj "/CN=SecBoot PK cert/"  -new -x509 -newkey rsa:2048 -nodes -days 730 -outform PEM -keyout "PK.key"  -out "PK.pem"
openssl req -subj "/CN=SecBoot KEK cert/" -new -x509 -newkey rsa:2048 -nodes -days 730 -outform PEM -keyout "KEK.key" -out "KEK.pem"
openssl req -subj "/CN=SecBoot db cert/"  -new -x509 -newkey rsa:2048 -nodes -days 730 -outform PEM -keyout "db.key"  -out "db.pem"

cert-to-efi-sig-list -g "$myuuid" PK.pem  PK.esl
cert-to-efi-sig-list -g "$myuuid" KEK.pem KEK.esl
cert-to-efi-sig-list -g "$myuuid" db.pem  db.esl

#sign keys
sign-efi-sig-list -g "$myuuid" -c PK.pem  -k PK.key  PK  PK.esl  PK.auth
sign-efi-sig-list -g "$myuuid" -c PK.pem  -k PK.key  KEK KEK.esl KEK.auth
sign-efi-sig-list -g "$myuuid" -c KEK.pem -k KEK.key db  db.esl  db.auth
sign-efi-sig-list -g "$myuuid" -c KEK.pem -k KEK.key dbx dbx.esl dbx.auth

# add keys in firmware
efi-updatevar -k PK.key  -g "$myuuid" -f PK.auth  PK
efi-updatevar -k PK.key  -g "$myuuid" -f KEK.auth KEK
efi-updatevar -k KEK.key -g "$myuuid" -f db.auth  db
efi-updatevar -k KEK.key -g "$myuuid" -f dbx.auth dbx

# remove current signature (optional, i tried removing and not removing)
sbattach --remove /boot/efi/EFI/BOOT/BOOTX64.EFI
sbattach --remove /boot/efi/EFI/ubuntu/grubx64.efi
sbattach --remove /boot/vmlinuz-5.4.0.91-generic

# sign binaries
sbsign --key db.key --cert db.pem --output /boot/efi/EFI/BOOT/BOOTX64.EFI /boot/efi/EFI/BOOT/BOOTX64.EFI
sbsign --key db.key --cert db.pem --output /boot/efi/EFI/ubuntu/grubx64.efi /boot/efi/EFI/ubuntu/grubx64.efi
sbsign --key db.key --cert db.pem --output /boot/vmlinuz-5.4.0.91-generic /boot/vmlinuz-5.4.0.91-generic

注 1:如果可能的话,我不想使用 mok,因为它需要重新启动并且我正尝试使用无人值守脚本进行安装。

注 2:我曾尝试使用 shim-signed 并且启动成功,但即使我没有对内核进行签名它也能启动,因此我认为它不安全,因为它可以使用任何内核启动。

编辑:我使用 Ubuntu 20.04.3

答案1

设置 PK 将改变模式为用户模式。你应该最后添加它。

efi-updatevar -a -k PK.key  -g "$myuuid" -c KEK.crt KEK
efi-updatevar -a -k KEK.key -g "$myuuid" -c DB.crt db
efi-updatevar -f PK.auth PK

相关内容