Key was rejected by service 的解决方式

一、问题详情:

在Ubuntu22.04系统下用Virbox安装windows过程中使用sudo modprobe vboxdrv后出现的报错为Key was rejected by service。

问题原因:

UbuntuKernel 使用 EFI_SECURE_BOOT_SIG_ENFORCE 内核配置。如果启用了UEFI Secure Boot(UEFI安全引导),会阻止加载未签名的第三方模块。

具体的解决方法可以参考这三个帖子

升级到1604后,virtual box无法使用(已解决) - 页 2 - Ubuntu中文论坛

eclipse 编译内核模块_ubuntu编译内核模块报错:Required key not available 的解决_孤单的宇航员的博客-CSDN博客

linux内核模块签名,如何签名内核模块Ubuntu 18.04_小小支呀的博客-CSDN博客

这里我说下解决方法:

 二、解决方案A(关闭Secure boot)(推荐):

1输入代码

sudo apt install mokutil
sudo mokutil --disable-validation

2按照它提示设个8位以上密码。(一次性的)

3重启电脑

4出现蓝屏, 选择第二个Change Secure Boot state,按提示输入密码。

注意:它有时会要求你输入在第二步设置的密码的某一位,比如密码是12345678,就会让你输入第三位3,然后让你输入第2位2。

5输入完密码后进入Disable Secure Boot选择界面,选择 yes,然后下个界面又回到最开始的界面,选择reboot,重新进入系统。

6结果:输入sudo modprobe vboxdrv后无错误弹出,虚拟机可以正常运行。(

7检查:由于刚刚是关闭了Secure Boot来运行,所以可以输入

sudo mokutil --sb-state

这个是可以查看secure boot 的状态显示

SecureBoot enabled
SecureBoot validation is disabled in shim

可以看到SecureBoot validation在内核签名是无效化了。但secureboot是在运行的。

三解决方式B(不关闭secure boot validdation)

想要不关secure boot就得使用生成签名的方法, 大家可以前往以下三个链接处查看(后两个是ubuntu论坛):

解决Ubuntu22.04.1上安装ch34x串口驱动报 Key was rejected by service 需要签名的问题_小言W的博客-CSDN博客

kernel - Could not load 'vboxdrv' after upgrade to Ubuntu 16.04 (and I want to keep secure boot) - Ask Ubuntu

uefi - Why do I get "Required key not available" when install 3rd party kernel modules or after a kernel upgrade? - Ask Ubuntu

接下来是方案:

1、确定安装了mokuli 和shim-signed

sudo apt install mokutil
sudo apt install shim-signed
sudo update-secureboot-policy --new-key

2创建签名密钥

直接输下面代码。该命令会在/var/lib/shim-signed/mok/下生成证书(MOK.der)和私钥(MOK.priv)

openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Descriptive common name/"

注意:为了获更安全,可以将-nodes去掉,然后它会要求输入密码。在继续下一步之前,输入:export KBUILD_SIGN_PIN='yourpassword'。之前没有去掉-nodes的可以把生成的MOK.der和MOK.priv删了,重新输一遍代码。

3对模块签名

本例为vboxdrv,对其他模块可以通过修改最后边的ls $dirname(modinfo-n vboxdrv))/vbox*.ko)以获得完整功能。(针对不同问题的可以根据实际情况来试下修改最后的der $(modinfo -n vboxdrv))

sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxdrv)

4确认模块已签名

tail $(modinfo -n vboxdrv) | grep "Module signature appended"

5注册密钥

重要!它会要求你输入密码,输入的密码是只需要在下次重新启动时使用的一次性密码。

sudo mokutil --import MOK.der

6重启并按照说明注册MOK

7检查输入以下代码来确认密钥已注册

mokutil --test-key MOK.der

使用该方法的话每次内核更新都需要重新注册下密钥。

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值