Linuxカーネル署名後の署名エラー

Linuxカーネル署名後の署名エラー

オペレーティングシステム:Ubuntu 20.04

機械: Dell XPS 13 9370

Linuxカーネルをにアップグレードしてみてください5.13.05.16.14カーネルはセキュアブートなしで正常に動作することが確認されました5.16.14。説明に従ってくださいここそしてここすべてのステップが正常に完了したようです。具体的には以下のステップを実施した。

カーネルファイルのダウンロード

wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.16.14/amd64/linux-headers-5.16.14-051614_5.16.14-051614.202203111231_all.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.16.14/amd64/linux-image-unsigned-5.16.14-051614-generic_5.16.14-051614.202203111231_amd64.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.16.14/amd64/linux-modules-5.16.14-051614-generic_5.16.14-051614.202203111231_amd64.deb

カーネルのインストール

chmod +x *.deb
sudo dpkg -i *.deb

要求ファイルの生成

vim mokconfig.cnf # filled in details as instructed in articles

キーの生成

openssl req -config ./mokconfig.cnf \
         -new -x509 -newkey rsa:2048 \
         -nodes -days 36500 -outform DER \
         -keyout "MOK.priv" \
         -out "MOK.der"

pem形式に変換

openssl x509 -in MOK.der -inform DER -outform PEM -out MOK.pem

登録キー

sudo mokutil --import MOK.der

この時点で再起動したところ、予想通り青いMOK画面が現れました。登録したばかりのキーが表示され、キーを追加した後でも起動できます。

キーが登録されていることを確認してください。

sudo mokutil --list-enrolled

カーネルに署名

sudo sbsign --key MOK.priv --cert MOK.pem /boot/vmlinuz-5.16.14-051614-generic --output /boot/vmlinuz-5.16.14-051614-generic.signed

initramのコピー

sudo cp /boot/initrd.img-5.16.14-051614-generic{,.signed}

GRUBのアップデート

sudo update-grub

また、作成した証明書をBIOSのセキュアブートキーに接続しました。 UIに「成功」​​メッセージが表示され、キー数が1ずつ増加します。

この時点で再起動し、新しく署名されたカーネルを表示できます。元のカーネルに加えて、リストには次の2行が含まれています。

Ubuntu, with Linux 5.16.14-051614-generic.signed
Ubuntu, with Linux 5.16.14-051614-generic.signed (recovery mode)

結果メッセージは次のとおりです。

Loading Linux 5.16.14-051614-generic.signed ...
error: /boot/vmlinuz-5.16.14-051614-generic.signed has invalid signature.
Loading initial ramdisk ...
error: you need to load the kernel first.

Press any key to continue...

RAMディスクの問題は説明が必要ないようですが、カーネルをロードできないようです。

キーを確認する他の方法はありますか?システムが認識するには、他の場所にロードする必要がありますか?

ベストアンサー1

セキュアブートのさまざまなファームウェア実装は、署名付きブートファイルの正確な形式に関してさまざまなレベルの厳格性を持っています。私はこのsbsignコマンドが古いツールであり、生成された署名がより新しい、より厳しいファームウェアの実装を満たしていない可能性があると思います。

pesign(パッケージ内の)コマンドを使用してカーネルに署名してみてくださいpesignsbsign。ただし、まずキーと証明書をPKCS12形式に変換し、それをMozilla NSS証明書データベースに保存する必要があります。これにはpk12utilパッケージのツールが必要です。libnss3-tools

openssl pkcs12 -export -name MOK -out MOK.p12 -inkey MOK.priv -inform DER -in MOK.der
sudo pk12util -i MOK.p12 -d /etc/pki/pesign 

上記のコマンドは一度だけ実行できます。これを完了したら、pesign次のように使用できます。

sudo pesign -i /boot/vmlinuz-5.16.14-051614-generic -o /boot/vmlinuz-5.16.14-051614-generic.signed -n /etc/pki/pesign -c MOK -s

おすすめ記事