セキュアブートでUbuntuを実行しています。仕様でパッケージ化されたカーネルを使用すると、すべてがうまく機能します。ただし、自己署名カーネルの実行に問題があります。私のMOKキーの署名は大丈夫だと確信していますが(以下で確認されています)、正しいエントリを選択してgrubからカーネルを起動しようとすると、「読み込み中...エラー:無効なシム」というエラーメッセージが表示されます。 「苦労しましたが、解決策が見つかりませんでした。両方のカーネルがMOKキーで署名されていますが、1つは機能しますが、もう1つは機能しません。なぜですか?
確認する:
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ソースコードでこれを確認できます。
#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