質問: カーネルをカスタマイズする必要があり、 /usr/src/libux-source-4.15.0/ 以下のソースを使い、カーネルを自分でビルドしました。 /boot/ に vmlinuz-4.15.1846-generic.ほにゃらら を用意して、 grub の画面に起動させるリストを追加しました。 ところが、作成したカーネルを選択し起動しようとすると、署名が正しくないというエラーが表示され起動できません。 調べて、UEFI のセキュアブートの機能が働き、署名のないカーネルからは起動できないことは分かりました。 ここで選択肢としては、セキュアブートの機能を殺してしまうか、セキュアブートは殺さず正しい方法で署名し起動できるようにするかの2択になります。私は後者を選びたいので、いろいろ調べてみたのですが、カーネルに署名するために kmodsign というコマンドを使い .der 形式の署名を指定してカーネルに署名する必要がある、ということまでは分かりましたが、以下が分からず依然カスタマイズしたカーネルから起動できない状態です。 Linux のセキュアブートの方法に詳しい方が下を見ていただくと分かると思いますが、正直カーネルに署名するという操作の詳細な仕組み(何をどこにどうやってどうするのか?)がよくわかっていません。検索してできるだけ調べたのですが、nVidia のディスプレイドライバなどを更新するときのやり方などは見つかったのですが、 ubuntu のカーネルを自分でビルドした場合にどのように操作してセキュアブート出来るまでもっていくかの手順はどこにも見つからなかったので、質問させてください。ただビルドしたカーネルを使いたいだけですので、起動できるまでの操作が順を追って分かればと思います。 ・kmodsign に指定する署名は、どこから入手するのか。今起動しているカーネルの署名を入手して使用するのか、新規に別の署名を作成する必要があるのか、具体的にそれを実現する方法は? ・kmodsign で署名するのは vmlinuzほにゃらら だけでいいのか?他にも署名が必要なファイルがあるのか? ・以下のサイトで sbsign の説明を見ると、 https://wiki.ubuntu.com/UEFI/SecureBoot/Signing >sbsign allows you to sign your own custom binaries (ie. the files that would be loaded directly by firmware, be it a bootloader or a kernel). とあるから、kmodsign だけでない sbsign もカーネルに署名するために使用する必要があるのか?あるとすれば、どのファイルに対し、何をどうやって用意して、どのように操作する必要があるのか? ・署名した vmlinuz (と必要ならその他の署名済みファイル)を /boot 以下に用意して grub の起動時の選択リストに加えればそれでよいのか?それとも、 GUID パーティションテーブルに保存されている UEFI に署名を保存する必要があるのか?あるとすれば、どうやって実現するのか?
回答: Stan_Dma が提示してくれたURLの記事を(読んだことはありましたが)再度読み返し、 extendedKeyUsage に記述されている2つの不明な OID 1.3.6.1.4.1.311.10.3.6,1.3.6.1.4.1.2312.16.1.2 は、それぞれ Windows と linux からブートさせるために必要な OID と推測し、そのままの値を用いることにして、 1. openssl.cnf を記述。 2. private key と public key を作成。 3. public key を mokutil で enroll。 4. openssl で public key を .der から .pem に変換。 5. sbsign で private key と public key (.pem) を用いて vmlinuz に sign 。 の手順でカスタムカーネルからの起動が出来ました。