独自のキーでセキュアブートを構成し、Microsoft KEKおよびDB証明書をインポートするにはどうすればよいですか?

独自のキーでセキュアブートを構成し、Microsoft KEKおよびDB証明書をインポートするにはどうすればよいですか?

私のキー(PK、KEK、およびDB)を使用してセキュアブートを設定しています。これまでに私がしたことすべて:

  • 統合カーネルイメージ構築(UKI)
  • スタンドアロンGRUBバイナリの作成
  • 独自のPK、KEK、およびDBキーを生成し、署名されたGRUBおよびUKI。

Secure Bootを有効にすると、GRUBとLinuxで起動できます。しかし、私はWindowsをダブルブートすることもありますが、ここで問題が始まります。これまで私のPKを使用してMicrosoft KEK CAに署名しようとしましたが、私のラップトップ(Dell Precision 7740)は「正しく署名されていないため」KEKに接続することを拒否します。別の問題は、Microsoft DB署名証明書です。どうすればいいのか分かりません。 Microsoft KEKで署名したのですか、それとも独自のKEK署名を使用する必要がありますか?

以下に、証明書を生成するために使用したコマンドとMicrosoft証明書をインポートしようとした操作の一覧を示します。

キー生成:

mkdir certs
cd certs
uuidgen --random > GUID.txt

openssl req -newkey rsa:4096 -nodes -keyout PK.key -new -x509 -sha256 -days 3650 -subj "/CN=example PK/" -out PK.crt
openssl x509 -outform DER -in PK.crt -out PK.cer
cert-to-efi-sig-list -g "$(< GUID.txt)" PK.crt PK.esl
sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt PK PK.esl PK.auth

openssl req -newkey rsa:4096 -nodes -keyout KEK.key -new -x509 -sha256 -days 3650 -subj "/CN=example KEK/" -out KEK.crt
openssl x509 -outform DER -in KEK.crt -out KEK.cer
cert-to-efi-sig-list -g "$(< GUID.txt)" KEK.crt KEK.esl
sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt KEK KEK.esl KEK.auth

openssl req -newkey rsa:4096 -nodes -keyout db.key -new -x509 -sha256 -days 3650 -subj "/CN=example DB/" -out db.crt
openssl x509 -outform DER -in db.crt -out db.cer
cert-to-efi-sig-list -g "$(< GUID.txt)" db.crt db.esl
sign-efi-sig-list -g "$(< GUID.txt)" -k KEK.key -c KEK.crt db db.esl db.auth

example注:共有したくないので、実際のCN名をその名前に変更しました。

Microsoft 証明書で実行する操作:

# Certificates in PEM format are in the .crt files. I do this conversion, because otherwise some of the command below would fail and .auth file would not contain almost anything, only around ~30 bytes of arbitrary data)
openssl x509 -in microsoft_kek_ca_2011-06-24.bin -out microsoft_kek_ca_2011-06-24.crt
openssl x509 -outform DER -in microsoft_kek_ca_2011-06-24.crt -out microsoft_kek_ca_2011-06-24.cer
cert-to-efi-sig-list -g "$(< GUID.txt)" microsoft_kek_ca_2011-06-24.cer microsoft_kek_ca_2011-06-24.esl
# Here I actually sign it. I don't get any errors and .auth file in size looks similar to other .auth files. But my Laptop still refuses to import it.
sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt KEK microsoft_kek_ca_2011-06-24.esl microsoft_kek_ca_2011-06-24.auth

openssl x509 -in microsoft_windows_pca_2011-10-19.bin -out microsoft_windows_pca_2011-10-19.crt
openssl x509 -outform DER -in microsoft_windows_pca_2011-10-19.crt -out microsoft_windows_pca_2011-10-19.cer
cert-to-efi-sig-list -g "$(< GUID.txt)" microsoft_windows_pca_2011-10-19.cer microsoft_windows_pca_2011-10-19.esl
# Here I gave up, the issue is that I need signed efi list (.auth) in order to import it to my BIOS. But in order to create signed list I would need KEK keys, and obvisly I don't own keys to Microsoft KEK, so I just tried signing it with my own KEK. Again, BIOS refuses to import it.
sign-efi-sig-list -g "$(< GUID.txt)" -k KEK.key -c KEK.crt db microsoft_windows_pca_2011-10-19.esl microsoft_windows_pca_2011-10-19.auth

注:私はMicrosoftのKEKとDBを次からダウンロードしました。公式文書

結論として、私は自分のPK、KEK、およびDBキーが提供する制御が必要であり、したいので、SHIMまたはMOKを使用することを消すと言いたいと思います。私はSHIM / MOKが半分焼き/解決方法だと思います。そしてそれは実際に問題を解決しません。代わりにダーティフィックスが提供されます。

助けてくれてありがとう!

ベストアンサー1

まあ、私はMicrosoftのKEKに正常に署名できませんでしたが、私のキーを使ってesp / EFI / Microsoft / Boot / bootmgr.efiとesp / EFI / Microsoft / Boot / bootmgtf.efiに強制的に再署名しました。はい、Windowsの更新後に再度ログインする必要があるかもしれませんが、自動更新を無効にしたため、これらのファイルを頻繁に更新しないでください。

おすすめ記事