Grub2
無法在 Secure Boot 上傳入自簽名核心:“不良 shim 簽名”
我正在使用安全啟動執行 ubuntu。當我使用從 cannonical 打包的核心時,一切正常。不過,我在執行自簽名核心時遇到問題。我很確定我的 MOK 密鑰簽名沒問題(下面的驗證),但是當我嘗試從 grub 啟動核心時,在選擇正確的條目後,我收到一個錯誤,顯示“正在載入……錯誤:糟糕的 shim簽名。” 我正在考慮它,但找不到解決方案。為什麼,即使兩個核心都使用 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/emailAddress=example@example.com image signature certificates: - subject: /C=PL/ST=yes/L=yes/O=none/CN=Secure Boot Signing/emailAddress=example@example.com issuer: /C=PL/ST=yes/L=yes/O=none/CN=Secure Boot Signing/emailAddress=example@example.com 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
我不知道發生了什麼:|
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 核心二進製文件。
在沒有此類 EKU 的情況下創建您自己的安全啟動簽名證書,將其註冊到 mok 或 db,然後使用它進行簽名。
參考:https ://wiki.ubuntu.com/UEFI/SecureBoot/KeyManagement/KeyGeneration