无法在启用安全启动的情况下加载自签名内核:“错误的填充签名”

无法在启用安全启动的情况下加载自签名内核:“错误的填充签名”

我正在运行带有安全启动的 ubuntu。当我使用从规范打包的内核时,一切工作正常。不过,我在运行自签名内核时遇到了问题。我很确定我的 MOK 密钥签名没问题(验证如下),但是当我尝试从 grub 启动内核时,在选择正确的条目后,我收到一条错误消息“正在加载...错误:坏垫片”签名。”我绞尽脑汁却找不到解决方案。为什么即使两个内核都使用 MOK 密钥进行签名,其中一个可以工作而另一个却不能?

确认:

root@T495:~# sbsign --key /var/lib/shim-signed/mok/MOK.priv --cert /var/lib/shim-signed/mok/MOK.pem /boot/vmlinuz
Image was already signed; adding additional signature

root@T495:~# sbverify --list /boot/vmlinuz
signature 1
image signature issuers:
 - /C=PL/ST=Poznan/L=Poznan/O=none/CN=Secure Boot Signing/[email protected]
image signature certificates:
 - subject: /C=PL/ST=yes/L=yes/O=none/CN=Secure Boot Signing/[email protected]
   issuer:  /C=PL/ST=yes/L=yes/O=none/CN=Secure Boot Signing/[email protected]
signature 2
image signature issuers:
 - /CN=ubuntu Secure Boot Module Signature key
image signature certificates:
 - subject: /CN=ubuntu Secure Boot Module Signature key
   issuer:  /CN=ubuntu Secure Boot Module Signature key

root@T495:~# openssl x509 -in /var/lib/shim-signed/mok/MOK.pem -fingerprint -noout
SHA1 Fingerprint=81:A2:93:CB:06:6F:52:BA:D9:E2:39:68:9D:FA:E2:2B:0C:95:3C:F7
root@T495:~# mokutil --list-enrolled | grep "81:a2:93"
SHA1 Fingerprint: 81:a2:93:cb:06:6f:52:ba:d9:e2:39:68:9d:fa:e2:2b:0c:95:3c:f7

我不知道发生了什么事:|

答案1

MOK.pem 在 Ubuntu/Debian 系统上生成,其扩展使用属性设置为仅支持内核模块签名。该证书不可用于根据需要对 UEFI 引导加载程序或内核进行签名以通过 shim 验证。

在shim源代码中可以看到:

   #define OID_EKU_MODSIGN "1.3.6.1.4.1.2312.16.1.2"

   static BOOLEAN verify_eku(UINT8 *Cert, UINTN CertSize)
   {
    ...
    x509 = d2i_X509 (NULL, &Temp, (long) CertSize);
    if (x509 != NULL) {
        eku = X509_get_ext_d2i(x509, NID_ext_key_usage, NULL, NULL);
        if (eku) {
        ...
                if (OBJ_cmp(module_signing, key_usage) == 0)
                    return FALSE;
        ...
            }
        }
        return TRUE;
}

这意味着如果设置了 module_signing 扩展密钥用法,则 shim 不会认为签名证书有效,无法验证 grub 或 Linux 内核二进制文件。

创建您自己的 secureboot 签名证书(无需此类 EKU),将其注册到 mok 或 db 中,然后使用它进行签名。

参考:https://wiki.ubuntu.com/UEFI/SecureBoot/KeyManagement/KeyGeneration

参考:https://github.com/rhboot/shim/blob/main/shim.c#L106

相关内容