有沒有辦法判斷我的 EFI 引導程式是否會接受二進位檔案的簽章而無需重新啟動?

有沒有辦法判斷我的 EFI 引導程式是否會接受二進位檔案的簽章而無需重新啟動?

假設我剛剛grub2在Linux 或(更具體的)基於Debian 的系統中的計算機上安裝了簽名的EFI 引導程式(例如,來自Lenovo IdeaPad U410 上的Ubuntu 14.10 amd64,它只能以安全引導EFI 或傳統模式引導)。有沒有辦法告訴機器將從運行中啟動而無需重新啟動?

答案1

是的,但您必須擁有安全啟動金鑰。首先,請注意安全啟動公鑰至少可以採用三種形式:

  • .cer/.der檔案—大多數 UEFI 實作以及與 Shim 配對的 MokManager 工具都使用這些檔案。
  • .crt- 這些檔案由大多數 Linux 安全工具本機使用,例如sbsigntoolsbverify
  • .esl-- 這些檔案將多個金鑰合併到一個檔案中。 (其他檔案每個都包含一個金鑰。)如果您使用韌體使用者介面或 KeyTool 來保存金鑰,則產生的檔案將採用此格式。

如果您使用 MokManager 安裝了自己的機器擁有者金鑰 (MOK),則該檔案應採用.cer/.der形式。如果您想測試該二進位檔案在使用另一個金鑰(例如用於簽署 Ubuntu 或 Fedora 版本 GRUB 的金鑰)啟動時是否可以工作,您必須取得它。為了方便起見,我用 rEFInd 收集了一些;你可以零散地下載它們這裡。如果你有完全控制系統上的安全啟動,您還應該已經擁有您創建的密鑰。

要驗證二進位文件,您必須擁有表單中的金鑰.crt。如果您有.der或表格中的金鑰.cer,則可以將其轉換:

openssl x509 -in mykey.cer -inform der -out mykey.crt

然後,您可以檢查二進位檔案是否已正確簽署:

sbverify --cert mykey.crt binary.efi

結果應該是一條訊息讀取Signature verification OKSignature verification failed

請注意,某些 UEFI 甚至無法啟動正確簽署的二進位檔案。這看起來是隨機的;二進位檔案 A 將正常啟動,而使用相同金鑰簽署的二進位檔案 B 將會失敗。我相信這是受影響的 UEFI 中的一個錯誤,但我還沒有詳細調查它。 AFAIK,它不會影響透過 Shim 驗證的二進位文件,但它會影響 Shim 本身或在沒有 Shim 幫助的情況下啟動的二進位檔案。

相關內容