📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

 
(同じ利用者による、間の2版が非表示)
99行目: 99行目:
**: 上記の例に記述されている4096とは、強力な暗号化を提供する。
**: 上記の例に記述されている4096とは、強力な暗号化を提供する。
** distinguished_name
** distinguished_name
**: 証明書の識別名 (DN) の詳細を定義するセクションを指定する。
**: 証明書要求 (CSR) や証明書に含める識別名 (Distinguished Name, DN) 情報を定義するセクションを指定する。
**: 任意の文字列が使用できる。
**: <br>
**: <u>※注意</u>
**: <u>値を変更する場合、その値と同じ名前のセクションを設定ファイル内に作成する必要がある。</u>
** prompt
** prompt
**: <code>no</code>を指定する場合、対話的なプロンプトを無効にして、ファイルから直接情報を読み取る。
**: <code>no</code>を指定する場合、対話的なプロンプトを無効にして、ファイルから直接情報を読み取る。
105行目: 109行目:
**: <code>utf8only</code>を指定する場合、文字列をUTF-8エンコーディングに制限する。
**: <code>utf8only</code>を指定する場合、文字列をUTF-8エンコーディングに制限する。
** x509_extensions
** x509_extensions
**: 証明書に追加する拡張機能を定義するセクションを指定する。
**: 生成されるX.509証明書に追加する拡張機能を定義するセクションを指定する。
**: 任意の文字列が使用できる。
**: 省略も可能である。(省略時は拡張機能が追加されない)
**: <br>
**: <br>
**: myexts
**: <u>※注意</u>
**: <u>値を変更する場合、その値と同じ名前のセクションを設定ファイル内に作成して、そこで拡張機能を定義する必要がある。</u>
*: <br>
*: <br>
* [req_distinguished_name]セクション
* [req_distinguished_name]セクション ※ユーザ定義のセクション名
** O
** O
**: 組織 (Organization) 名を指定する。
**: 組織 (Organization) 名を指定する。
118行目: 125行目:
**: 連絡先のメールアドレスを指定する。
**: 連絡先のメールアドレスを指定する。
*: <br>
*: <br>
* [myexts]セクション (X.509証明書拡張)
* [myexts]セクション (X.509証明書拡張) ※ユーザ定義のセクション名
** basicConstraints=
** basicConstraints
**: <code>critical,CA:FALSE</code>を指定する場合、この証明書が認証局 (CA) でないことを示し、このフィールドを重要 (critical) とマークする。
**: <code>critical,CA:FALSE</code>を指定する場合、この証明書が認証局 (CA) でないことを示し、このフィールドを重要 (critical) とマークする。
** keyUsage
** keyUsage
126行目: 133行目:
**: <code>hash</code>を指定する場合、証明書の公開鍵のハッシュを含む識別子を追加する。
**: <code>hash</code>を指定する場合、証明書の公開鍵のハッシュを含む識別子を追加する。
** authorityKeyIdentifier
** authorityKeyIdentifier
**: <code>keyid</code>を指定する場合、証明書発行者の公開鍵の識別子を追加する。
**: 証明書の発行者 (自己署名の場合はユーザ自身) の公開鍵を識別するための方法を指定する。
**: <code>keyid</code>を指定する場合、発行者の公開鍵のハッシュを使用することを意味する。
**:* keyid, issuer : 発行者の公開鍵のハッシュと発行者の名前を両方含める。
**:* issuer: 発行者の名前のみを含める。
**:* 省略することができる。(省略時はこの拡張機能が追加されない)
**: <br>
**: <u>※注意</u>
**: <u>自己署名証明書の場合、<code>keyid</code>が最も一般的な選択肢である。</u>
**: <code>issuer</code>を含める場合、自己参照的な情報になる可能性がある。</u>
<br><br>
 
== 鍵ペア (秘密鍵 / DER) の生成 ==
OpenSSL等を使用して、鍵ペア (秘密鍵 / DER) を生成する。<br>
<br>
以下の例では、自己署名証明書と対応する秘密鍵を生成する。<br>
<br>
このコマンドは、MOKシステムで使用するための形式と属性を持つ証明書と鍵ペアを生成する。<br>
生成された.derファイルは公開鍵証明書、.privファイルは対応する秘密鍵を含む。<br>
<br>
特に、<code>-addext</code>オプションを指定することにより、この証明書がコード署名 (カーネルモジュールの署名等) に使用できることが明示できる。<br>
これは、セキュアブート環境でモジュールを署名する場合に必要な属性である。<br>
<br>
以下の例では、-days 36500のように長期の有効期限を設定しているが、セキュリティの観点からは、より短い期間で定期的に更新することが推奨される場合もある。<br>
<br>
openssl req -x509 -new -nodes -utf8 -sha256 \
            -days 36500 \
            -batch \
            -config <上記で作成した設定ファイルのパス> \
            -outform DER \
            -out <生成するDERファイルのパス> \
            -keyout <生成する.privファイルのパス> \
            -addext "extendedKeyUsage=codeSigning"
<br>
* -reqオプション
*: 証明書要求 (CSR) の処理や証明書の生成を行うOpenSSLのサブコマンドである。
* -x509
*: CSRではなく、自己署名X.509証明書を直接生成することを指定する。
* -new
*: 新しい証明書要求を生成する。
*: -x509オプションと組み合わせることにより、新しい自己署名証明書を生成する。
* -nodes
*: 秘密鍵を暗号化せずに生成する。
* -utf8
*: 証明書のフィールドにUTF-8エンコーディングを使用する。
* -sha256
*: 証明書の署名にSHA-256ハッシュアルゴリズムを使用する。
* -days <日数>
*: 証明書の有効期限を指定する。
*: 36500と指定する場合、証明書の有効期限は36500日 (約100年) となる。
* -batch
*: 対話的なプロンプトを無効にして、設定ファイルから全ての情報を読み取る。
* -config <使用する設定ファイル>
*: 使用する設定ファイルを指定する。
* -outform DER
*: 出力形式をDER (Distinguished Encoding Rules) に設定する。
* -out <DERファイルのパス>
*: 生成された証明書 (公開鍵部分) の出力先を指定する。
* -keyout <.privファイルのパス>
*: 生成された秘密鍵の出力先を指定する。
* -addext "extendedKeyUsage=codeSigning"
*: 証明書に拡張キー使用法を追加して、コード署名用であることを示す。
<br><br>
 
== MOKキーの登録 ==
以下に示すコマンドを実行して、MOKにキーをインポートする。<br>
sudo mokutil --import <DERファイルのパス>
# または
sudo mokutil --import <DERファイルのパス> --root-pw
<br>
PCを再起動して、Linuxブートローダ起動前にキーをインポートする。<br>
sudo systemctl reboot
<br><br>
 
== 署名 ==
==== カーネルモジュールの署名 ====
カーネルモジュールをMOKに署名する。<br>
sudo /lib/modules/$(uname -r)/build/scripts/sign-file sha256 \
      <.privファイルのパス> \
      <.derファイルのパス>  \
      <署名するカーネルモジュールのパス  例: /lib/modules/$(uname -r)/kernel/fs/f2fs/f2fs.ko>
<br><br>
<br><br>