grub2用に署名されたgrubx64.efiをビルドする方法は?

grub2用に署名されたgrubx64.efiをビルドする方法は?

grub-mkimageLinux-Mintで64ビットefi grub2ブートファイルを構築できます。しかし、シグネチャースペーサーで使用できるものを作りたいです。

bootx64.efi - 署名されたシム(例:Ubuntuから)

grubx64.efi - grub2(Ubuntuなど)

セーフブートモードでは正常に起動します。ただし、grubx64.efiそのファイルでビルドしたファイルを置き換えると、安全でないブートモードでのみブートされます。

スクリプトgrub-mkimageが公開鍵を提供しているようです。これは私が追加する必要がありますか?それでは、キーはどこから取得し、どのように追加しますか?

答え1

-m組み込みの公開鍵オプションを使用すると、grub-mkimageGRUBが読み取るすべてのファイルに署名するために使用されます。これはGPGスタイルの分離署名ファイル(*.sig)を使用します。しかし、セキュアブート自体とは何の関係もありません。

セキュアブート署名にはさまざまな種類の署名が必要です。セキュアブート互換性署名は、PE32+バイナリ自体に組み込まれています。これらの署名を実行できるツールは少なくとも3つあります。

マシン所有者キー(MOK)を使用するには、shimを設定する必要があります。を使用してこれを行うことができますmokutil。あるいは、Debian/Ubuntu 関連のディストリビューションでupdate-secureboot-policy作業を行う際に初心者に、より使い慣れたスクリプトを提供することもできます。これにより、MOK証明書(DER形式)とその秘密鍵を見つけることができます/var/lib/shim-signed/mok

署名ツールにはPEM形式のMOK証明書が必要sbsignです。osslsigncode秘密鍵はすでにPEM形式です。証明書の変換は簡単です。

sudo openssl x509 -inform DER -in /var/lib/shim-signed/mok/MOK.der -outform PEM -out ~/MOK_certificate.pem

このpesignツールには、NSSスタイルの証明書データベースに保存されているMOKが必要です。openssl pkcs12 -exportまず、証明書と秘密鍵を単一のPKCS#12ファイルに変換してから、そのファイルを新しいNSS証明書データベースディレクトリ(、およびpk12util3つのファイルを含む)にインポートできます。cert8.dbkey3.dbsecmod.db

その後、上記のツールのいずれかを使用して、grubx64.efiMOK証明書とその秘密鍵で署名できます。

sbsign --key <MOK private key file.pem> --cert <MOK certificate.pem> --output grubx64.efi.signed grubx64.efi
# or
pesign --in=grubx64.efi --out=grubx64.efi.signed -c <name of certificate in NSS certificate store> -n <NSS certificate store directory> -s
# or
osslsigncode -certs <MOK certificate.pem> -key <MOK private key file.pem> -h sha256 -in grubx64.efi -out grubx64.efi.signed

答え2

shimに含まれるキーにアクセスする必要があります。これはビルドサービスへのアクセスを意味する可能性が高いです(一部の権限がある可能性があります)。 grubパッケージマネージャに連絡してください。私はいくつかの詳細を見つけました。ここその時、これはすべて台無しだった…

関連情報