私は楽しい(ローリング安定性)のためにLinuxカーネルソースを構築してテストしました。
しかし、OpenSSLがキー/証明書を要求できないという問題があります。だから確認を使用しましたが、pkcs11-tool
結果は「スロットなし」です。
これは、スロットにスマートカードを含める必要があるという意味ですか?それ以外の場合、カーネルモジュールに署名する方法は?
以下はopenssl.cnf
ダイジェストの内容です。
# referenced from the [provider_sect] below.
# Refer to the OpenSSL security policy for more information.
# .include fipsmodule.cnf
[openssl_init]
providers = provider_sect
ssl_conf = ssl_sect
engines = engine_section
[engine_section]
pkcs11 = pkcs11_section
[pkcs11_section]
engine_id = pkcs11
dynamic_path = /usr/lib/x86_64-linux-gnu/engines-3/pkcs11.so
MODULE_PATH = /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so
init = 0
# List of providers to load
[provider_sect]
一日中グーグルをしてみましたが、企業、クラウドに関する情報だけが見つかりました…役に立たなかった。
答え1
Linuxカーネルソースパッケージのサブディレクトリには、ツール(以前はスクリプト、現在はカーネルでビルドされたバイナリツール)がscripts
あります。sign-file
例:linux-6.6.13/scripts/sign-file
これを使用してカーネルモジュールに署名できます。
/path/to/linux-6.6.13/scripts/sign-file sha256 private-key.pem certificate.der kernelmodule.ko
または、PEM形式の単一ファイルに秘密鍵と証明書の両方がある場合は、[設定]CONFIG_MODULE_SIG_KEY
メニューでカーネル設定オプションを設定できます。暗号化API - >署名の検証に使用される証明書 - >モジュール署名鍵のファイル名またはPKCS#11 URI) はファイルをポイントしCONFIG_MODULE_SIG_ALL=y
(設定メニューから)設定します.ロード可能なモジュールサポートを有効にする - >すべてのモジュールに自動的に署名)、カーネルビルドプロセスは、選択したキーを使用してそのカーネルビルドのすべてのモジュールに自動的に署名します。
次のコマンドを使用して、適切なキーと証明書ファイルを生成できます。
openssl req -new -nodes -utf8 -sha256 -days 36500 -batch -x509 \
-config x509.genkey -outform PEM -out kernel_key.pem \
-keyout kernel_key.pem
このツールを使用するには、sign-file
次のコマンドを使用して証明書部分をDER形式に変換することもできます。
openssl x509 -in kernel_key.pem -out certificate.der -outform DER
バラよりカーネルソースパッケージの Documentation/admin-guide/module-signing.rst詳細については。
カーネルモジュールの署名にはPKCS#11(および拡張スマートカードまたは他のハードウェアセキュリティモジュール)を使用する必要はありません。
しかし、独自のLinuxディストリビューションを作成して世界中に大量にデプロイし始める場合は、セキュリティを強化するためにデプロイメント署名キーを格納するPKCS#11セキュリティモジュールを使用するのが良い選択です。とても良い考えです。