https://github.com/jakeday/linux-surface/blob/master/SIGNING.mdには、カーネル署名に関するより具体的な手順があります(承認された回答にリンクされている同じチュートリアルから適応されています)。手順は次のように完全に再現されています。
セキュアブート用のカスタムカーネルへの署名
手順はubuntu用ですが、shimとgrubをブートローダーとして使用している場合は、他のディストリビューションでも同様に機能するはずです。ディストリビューションがシム(例:Linux Foundation Preloader)を使用していない場合は、署名を完了するために同様の手順(例:LFプリローダーのMokUtilの代わりにHashTool)を使用するか、代わりに使用するシムをインストールできます。shimのubuntuパッケージはと呼ばれshim-signed
ますが、正しくインストールする方法を自分に知らせて、ブートローダーを台無しにしないようにしてください。
Ubuntuの最新のGRUB2更新(2.02 + dfsg1-5ubuntu1)以降、セキュアブートが有効になっている限り、GRUB2は署名されていないカーネルをロードしなくなりました。Ubuntu 18.04のユーザーは、grub-efiパッケージのアップグレード中に、このカーネルが署名されておらず、アップグレードが中止されることを通知されます。
したがって、この問題を解決するには3つのオプションがあります。
- 自分でカーネルに署名します。
- ディストリビューションの署名済みの汎用カーネルを使用します。
- セキュアブートを無効にします。
オプション2と3は実際に実行可能ではないため、これらは自分でカーネルに署名する手順です。
Ubuntuブログから変更された手順。以下の前に、すべてを復元できるように、/ boot / EFIディレクトリをバックアップしてください。自己の責任においてこれらの手順に従ってください。
- configを作成して署名鍵を作成し、mokconfig.cnfとして保存します。
# This definition stops the following lines failing if HOME isn't
# defined.
HOME = .
RANDFILE = $ENV::HOME/.rnd
[ req ]
distinguished_name = req_distinguished_name
x509_extensions = v3
string_mask = utf8only
prompt = no
[ req_distinguished_name ]
countryName = <YOURcountrycode>
stateOrProvinceName = <YOURstate>
localityName = <YOURcity>
0.organizationName = <YOURorganization>
commonName = Secure Boot Signing Key
emailAddress = <YOURemail>
[ v3 ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical,CA:FALSE
extendedKeyUsage = codeSigning,1.3.6.1.4.1.311.10.3.6
nsComment = "OpenSSL Generated Certificate"
詳細に合わせてすべてのパーツを調整します。
- カーネルに署名するための公開鍵と秘密鍵を作成します。
openssl req -config ./mokconfig.cnf \
-new -x509 -newkey rsa:2048 \
-nodes -days 36500 -outform DER \
-keyout "MOK.priv" \
-out "MOK.der"
- キーもPEM形式に変換します(mokutilにはDER、sbsignにはPEMが必要です)。
openssl x509 -in MOK.der -inform DER -outform PEM -out MOK.pem
- シムインストールのキーを登録します。
sudo mokutil --import MOK.der
パスワードの入力を求められます。次のステップでキーの選択を確認するためにそれを使用するだけなので、いずれかを選択します。
システムを再起動します。MOKManagerというツールのブルースクリーンが表示されます。「MOKの登録」、「キーの表示」の順に選択します。それが手順2で作成したキーであることを確認してください。その後、プロセスを続行し、手順4で指定したパスワードを入力する必要があります。システムの起動を続行します。
次の方法でキーが登録されていることを確認します。
sudo mokutil --list-enrolled
- インストールしたカーネルに署名します(/ boot / vmlinuz- [KERNEL-VERSION] -surface-linux-surfaceにあるはずです):
sudo sbsign --key MOK.priv --cert MOK.pem /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface --output /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface.signed
- 署名されていないカーネルのinitramをコピーして、署名されたカーネルのinitramも取得します。
sudo cp /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{,.signed}
- grub-configを更新する
sudo update-grub
- システムを再起動し、署名済みカーネルを選択します。起動が機能する場合は、署名のないカーネルを削除できます。
sudo mv /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface{.signed,}
sudo mv /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{.signed,}
sudo update-grub
これで、システムは署名されたカーネルの下で実行され、GRUB2のアップグレードが再び機能するようになります。カスタムカーネルをアップグレードする場合は、上記の手順7から再度実行することで、新しいバージョンに簡単に署名できます。したがって、MOKキー(MOK.der、MOK.pem、MOK.priv)をバックアップします。