5.2. 証明書署名要求の作成
従来は、証明書要求 (CSR) の生成には以下の方法が使用されます。
- コマンドラインユーティリティーを使用した CSR の生成
- 補助ブラウザー内での CSR の生成
- サーバーのインストーラーなど、アプリケーション内での CSR の生成
これらの方法の一部は CSR の直接送信をサポートしますが、含まれない場合があります。
Red Hat Certificate System 9.7 以降、サーバー側のキー生成がサポートされ、Firefox v69 以降や Chrome などの新しいバージョンのブラウザー内でのキー生成サポートの削除によってもたらされる不便を克服します。このため、このセクションでは、キー生成のブラウザーサポートを説明しません。
通常、アプリケーションから生成された CSR は PKCS#10 の形式を取ります。それらが正しく生成されると、RHCS によりサポートされるはずです。
次のサブセクションでは、Red Hat Certificate System でサポートされている次の方法を説明します。
- コマンドラインユーティリティー
- サーバー側の鍵生成
5.2.1. コマンドラインユーティリティーを使用した CSR の生成
Red Hat Certificate System は、以下のユーティリティーを使用した CSR の作成をサポートします。
-
certutil
: PKCS #10 要求の作成をサポートします。 -
PKCS10Client
: PKCS #10 要求の作成をサポートします。 -
CRMFPopClient
: CRMF 要求の作成をサポートします。 -
pki client-cert-request
: PKCS#10 および CRMF リクエストの両方をサポートします。
次のセクションでは、これらのユーティリティーを機能豊富な登録プロファイルフレームワークで使用する方法の例をいくつか示します。
5.2.1.1. certutil
で CSR を作成する
このセクションでは、certutil
ユーティリティーを使用して CSR を作成する方法を説明します。
certutil
の使用の詳細は、以下を参照してください。
-
certutil(1)
の man ページ -
certutil --help
コマンドの出力
5.2.1.1.1. certutil
で EC キーを使用する CSR を作成する
以下の手順は、certutil
ユーティリティーを使用して Elliptic Curve(EC) キーペアと CSR を作成する方法を示しています。
証明書が要求されるユーザーまたはエンティティーの証明書データベースディレクトリーに移動します。以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cd /user_or_entity_database_directory/
$ cd /user_or_entity_database_directory/
バイナリー CSR を作成し、これを
/user_or_entity_database_directory/request.csr
ファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow certutil -d . -R -k ec -q nistp256 -s "CN=subject_name" -o /user_or_entity_database_directory/request-bin.csr
$ certutil -d . -R -k ec -q nistp256 -s "CN=subject_name" -o /user_or_entity_database_directory/request-bin.csr
プロンプトが表示されたら、必要な NSS データベースのパスワードを入力します。
パラメーターの詳細は、
certutil(1)
の man ページを参照してください。作成したバイナリー形式の CSR を PEM 形式に変換します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow BtoA /user_or_entity_database_directory/request-bin.csr /user_or_entity_database_directory/request.csr
$ BtoA /user_or_entity_database_directory/request-bin.csr /user_or_entity_database_directory/request.csr
必要に応じて、CSR ファイルが正しいことを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat /user_or_entity_database_directory/request.csr MIICbTCCAVUCAQAwKDEQMA4GA1UEChMHRXhhbXBsZTEUMBIGA1UEAxMLZXhhbXBs ...
$ cat /user_or_entity_database_directory/request.csr MIICbTCCAVUCAQAwKDEQMA4GA1UEChMHRXhhbXBsZTEUMBIGA1UEAxMLZXhhbXBs ...
これは、PKCS#10 PEM 証明書要求です。
- 次の手順については、「CMC 登録プロセス」 を参照してください。ただし、証明書要求の作成に関する手順はスキップしてください。
5.2.1.1.2. certutil
でユーザー定義拡張を使用する CSR を作成する
以下の手順は、certutil
ユーティリティーを使用してユーザー定義の拡張で CSR を作成する方法を示しています。
登録要求は、CA で定義された登録プロファイルにより制限されることに注意してください。例B.3「CSR 内の複数の User Supplied 拡張」 を参照してください。
証明書が要求されるユーザーまたはエンティティーの証明書データベースディレクトリーに移動します。以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cd /user_or_entity_database_directory/
$ cd /user_or_entity_database_directory/
ユーザー定義の Extended Key Usage 拡張とユーザー定義の Key Usage 拡張で CSR を作成し、これを
/user_or_entity_database_directory/request.csr
ファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow certutil -d . -R -k rsa -g 1024 -s "CN=subject_name" --keyUsage keyEncipherment,dataEncipherment,critical --extKeyUsage timeStamp,msTrustListSign,critical -a -o /user_or_entity_database_directory/request.csr
$ certutil -d . -R -k rsa -g 1024 -s "CN=subject_name" --keyUsage keyEncipherment,dataEncipherment,critical --extKeyUsage timeStamp,msTrustListSign,critical -a -o /user_or_entity_database_directory/request.csr
プロンプトが表示されたら、必要な NSS データベースのパスワードを入力します。
パラメーターの詳細は、
certutil(1)
の man ページを参照してください。必要に応じて、CSR ファイルが正しいことを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat /user_or_entity_database_directory/request.csr Certificate request generated by Netscape certutil Phone: (not specified) Common Name: user 4-2-1-2 Email: (not specified) Organization: (not specified) State: (not specified) Country: (not specified)
$ cat /user_or_entity_database_directory/request.csr Certificate request generated by Netscape certutil Phone: (not specified) Common Name: user 4-2-1-2 Email: (not specified) Organization: (not specified) State: (not specified) Country: (not specified)
これは、PKCS#10 PEM 証明書要求です。
次の手順については、「CMC 登録プロセス」 を参照してください。ただし、証明書要求の作成に関する手順はスキップしてください。
CSR からヘッダー情報を削除します。
5.2.1.2. PKCS10Client
を使用して CSR を作成する
このセクションでは、PKCS10Client
ユーティリティーを使用して CSR を作成する方法を説明します。
PKCS10Client
の使用に関する詳細は、以下を参照してください。
-
PKCS10Client(1)
の man ページ -
PKCS10Client --help
コマンドの出力
5.2.1.2.1. PKCS10Client
を使用して CSR を作成する
以下の手順では、PKCS10Client
ユーティリティーを使用して Elliptic Curve (EC) キーペアと CSR を作成する方法を説明します。
証明書が要求されるユーザーまたはエンティティーの証明書データベースディレクトリーに移動します。以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cd /user_or_entity_database_directory/
$ cd /user_or_entity_database_directory/
CSR を作成し、これを
/user_or_entity_database_directory/example.csr
ファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow PKCS10Client -d . -p NSS_password -a ec -c nistp256 -o /user_or_entity_database_directory/example.csr -n "CN=subject_name"
$ PKCS10Client -d . -p NSS_password -a ec -c nistp256 -o /user_or_entity_database_directory/example.csr -n "CN=subject_name"
パラメーターの詳細は、
PKCS10Client(1)
の man ページを参照してください。必要に応じて、CSR ファイルが正しいことを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat /user_or_entity_database_directory/example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
$ cat /user_or_entity_database_directory/example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
5.2.1.2.2. PKCS10Client
を使用して SharedSecret ベースの CMC の CSR を作成する
以下の手順では、PKCS10Client
ユーティリティーを使用して、SharedSecret ベースの CMC 用の RSA キーペアと CSR を作成する方法を説明します。これは、デフォルトでは caFullCMCSharedTokenCert
プロファイルと caECFullCMCSharedTokenCert
プロファイルで処理される CMC 共有シークレット認証方法にのみ使用します。
証明書が要求されるユーザーまたはエンティティーの証明書データベースディレクトリーに移動します。以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cd /user_or_entity_database_directory/
$ cd /user_or_entity_database_directory/
CSR を作成し、これを
/user_or_entity_database_directory/example.csr
ファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow PKCS10Client -d . -p NSS_password -o /user_or_entity_database_directory/example.csr -y true -n "CN=subject_name"
$ PKCS10Client -d . -p NSS_password -o /user_or_entity_database_directory/example.csr -y true -n "CN=subject_name"
パラメーターの詳細は、
PKCS10Client(1)
の man ページを参照してください。必要に応じて、CSR ファイルが正しいことを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat /user_or_entity_database_directory/example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
$ cat /user_or_entity_database_directory/example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
5.2.1.3. CRMFPopClient
を使用して CSR を作成する
Certificate Request Message Format (CRMF) は、CMC で受け入れられている CSR 形式であり、主要なアーカイブ情報を要求に安全に埋め込むことができます。
このセクションでは、CRMFPopClient
ユーティリティーを使用して CSR を作成する方法を説明します。
CRMFPopClient
の使用に関する詳細は、CRMFPopClient(1)
man ページを参照してください。
5.2.1.3.1. CRMFPopClient
でキーアーカイブを使用して CSR を作成する
以下の手順では、CRMFPopClient
ユーティリティーを使用して RSA キーペアと、キーアーカイブオプションを使用する CSR を作成する方法を説明します。
証明書が要求されるユーザーまたはエンティティーの証明書データベースディレクトリーに移動します。以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cd /user_or_entity_database_directory/
$ cd /user_or_entity_database_directory/
KRA トランスポート証明書を取得します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow pki ca-cert-find --name "DRM Transport Certificate"
$ pki ca-cert-find --name "DRM Transport Certificate" --------------- 1 entries found --------------- Serial Number: 0x7 Subject DN: CN=DRM Transport Certificate,O=EXAMPLE Status: VALID Type: X.509 version 3 Key A lgorithm: PKCS #1 RSA with 2048-bit key Not Valid Before: Thu Oct 22 18:26:11 CEST 2015 Not Valid After: Wed Oct 11 18:26:11 CEST 2017 Issued On: Thu Oct 22 18:26:11 CEST 2015 Issued By: caadmin ---------------------------- Number of entries returned 1
KRA トランスポート証明書をエクスポートします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow pki ca-cert-show 0x7 --output kra.transport
$ pki ca-cert-show 0x7 --output kra.transport
CSR を作成し、これを
/user_or_entity_database_directory/example.csr
ファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow CRMFPopClient -d /home/example-user/certs_db -p password -n "CN=user_name" -q POP_SUCCESS -b kra.transport -w "AES KeyWrap/Wrapped" -v -o ~/user_name.req -oaep
$ CRMFPopClient -d /home/example-user/certs_db -p password -n "CN=user_name" -q POP_SUCCESS -b kra.transport -w "AES KeyWrap/Wrapped" -v -o ~/user_name.req -oaep
Elliptic Curve (EC) キーペアと CSR を作成するには、-a ec -t false オプションをコマンドに渡します。
パラメーターの詳細は、
CRMFPopClient(1)
man ページを参照してください。注記サーバーが設定されている場合は
-oaep
を使用します。最新の HSM が AES/CBC/PKCS5Padding よりも AES KeyWrap/WrapWrapped を優先する場合は、AES KeyWrap/WrapWrapped を使用します。必要に応じて、CSR ファイルが正しいことを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat /user_or_entity_database_directory/example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
$ cat /user_or_entity_database_directory/example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
5.2.1.3.2. CRMFPopClient
で SharedSecret ベースの CMC の CSR を作成する
以下の手順では、CRMFPopClient
ユーティリティーを使用して、SharedSecret ベースの CMC 用の RSA キーペアと CSR を作成する方法を説明します。これは、デフォルトでは caFullCMCSharedTokenCert
プロファイルと caECFullCMCSharedTokenCert
プロファイルで処理される CMC 共有シークレット認証方法にのみ使用します。
証明書が要求されるユーザーまたはエンティティーの証明書データベースディレクトリーに移動します。以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cd /user_or_entity_database_directory/
$ cd /user_or_entity_database_directory/
KRA トランスポート証明書を取得します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow pki ca-cert-find --name "DRM Transport Certificate"
$ pki ca-cert-find --name "DRM Transport Certificate" --------------- 1 entries found --------------- Serial Number: 0x7 Subject DN: CN=DRM Transport Certificate,O=EXAMPLE Status: VALID Type: X.509 version 3 Key A lgorithm: PKCS #1 RSA with 2048-bit key Not Valid Before: Thu Oct 22 18:26:11 CEST 2015 Not Valid After: Wed Oct 11 18:26:11 CEST 2017 Issued On: Thu Oct 22 18:26:11 CEST 2015 Issued By: caadmin ---------------------------- Number of entries returned 1
KRA トランスポート証明書をエクスポートします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow pki ca-cert-show 0x7 --output kra.transport
$ pki ca-cert-show 0x7 --output kra.transport
CSR を作成し、これを
/user_or_entity_database_directory/example.csr
ファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow CRMFPopClient -d . -p password -n "cn=subject_name" -q POP_SUCCESS -b kra.transport -w "AES/CBC/PKCS5Padding" -y -v -o /user_or_entity_database_directory/example.csr
$ CRMFPopClient -d . -p password -n "cn=subject_name" -q POP_SUCCESS -b kra.transport -w "AES/CBC/PKCS5Padding" -y -v -o /user_or_entity_database_directory/example.csr
EC キーペアと CSR を作成するには、コマンドに -a ec -t false オプションを渡します。
パラメーターの詳細は、
CRMFPopClient --help
コマンドの出力を参照してください。必要に応じて、CSR ファイルが正しいことを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat /user_or_entity_database_directory/example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
$ cat /user_or_entity_database_directory/example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
5.2.1.4. PKI
CLI での client-cert-request
を使用した CSR の作成
pki コマンドラインツールは、client-cert-request
コマンドで使用して CSR を生成することもできます。ただし、前述のツールとは異なり、pki で生成された CSR は CA に直接送信されます。PKCS#10 または CRMF 要求の両方を生成できます。
- PKCS#10 要求の生成例:
pki -d user token db directory -P https -p 8443 -h host.test.com -c user token db passwd client-cert-request "uid=test2" --length 4096 --type pkcs10
pki -d user token db directory -P https -p 8443 -h host.test.com -c user token db passwd client-cert-request "uid=test2" --length 4096 --type pkcs10
- CRMF リクエストの生成例:
pki -d user token db directory -P https -p 8443 -h host.test.com -c user token db passwd client-cert-request "uid=test2" --length 4096 --type crmf
pki -d user token db directory -P https -p 8443 -h host.test.com -c user token db passwd client-cert-request "uid=test2" --length 4096 --type crmf
成功するとリクエスト ID が返されます。
要求が送信されると、エージェントは pki ca-cert-request-approve
コマンドを使用して承認できます。
以下に例を示します。
pki -d agent token db directory -P https -p 8443 -h host.test.com -c agent token db passwd -n <CA agent cert nickname> ca-cert-request-approve request id
pki -d agent token db directory -P https -p 8443 -h host.test.com -c agent token db passwd -n <CA agent cert nickname> ca-cert-request-approve request id
詳細は、pki client-cert-request --help
コマンドを実行して man ページを参照してください。
5.2.2. サーバー側のキー生成を使用した CSR の生成
Firefox v69 以降や Chrome など、多くの新しいバージョンのブラウザーでは、PKI キーを生成する機能と、キーアーカイブ用の CRMF のサポートが削除されています。RHEL では、CRMFPopClient
(CR MFPopClient--help
を参照) または pki
(pki client-cert-request --help
を参照) などの CLI を回避策として使用することができます。
サーバー側の Keygen の登録は、トークンキー管理システム (TMS) の導入以来、長い間行われてきました。このシステムでは、キーをスマートカードでローカルに生成するのではなく、KRA で生成できます。Red Hat Certificate System では、ブラウザーのキー生成の問題を解決するための同様のメカニズムが導入されました。鍵はサーバーで生成され (特に KRA で)、PKCS#12 のクライアントに安全に転送されます。
暗号化証明書にのみサーバー側 Keygen メカニズムを使用することが強く推奨されます。
5.2.2.1. 主な機能
- 証明書要求キーは KRA で生成されます (注: CA と連携するには、KRA をインストールする必要があります)。
-
プロファイルのデフォルトプラグイン
serverKeygenUserKeyDefaultImpl
は、キーアーカイブ (つまり enableArchival パラメーター) を有効または無効にするための選択を提供します。 - RSA 鍵と EC 鍵の両方のサポート
- 手動 (エージェント) 承認と自動承認 (ディレクトリーパスワードベースなど) の両方のサポート
5.2.2.2. Server-Side Keygen を使用した証明書の登録
デフォルトの Server-Side Keygen 登録プロファイルは、EE ページの List Certificate Profiles タブにあります。
サーバー側の鍵の生成を使用した手動ユーザーのデュアル使用証明書登録
図5.1 エージェントの手動による承認を必要とするサーバー側のキータイプの登録

サーバー側のキー生成を使用したディレクトリー認証ユーザーのデュアル使用証明書の登録
図5.2 LDAP の uid/pwd 認証が正常に実行されると自動的に承認されるサーバー側のキータイプの登録

リクエストの承認方法に関係なく、Server-Side Keygen Enrollment メカニズムでは、エンドエンティティーユーザーが PKCS#12 パッケージのパスワードを入力する必要があります。このパスワードには、発行された証明書と、発行後にサーバーによって生成された暗号化された秘密鍵が含まれます。
パスワードは共有しないでください。CA や KRA のエージェントでさえありません。
登録要求が承認されると、PKCS#12 パッケージが生成され、以下が行われます。
- 手動承認の場合、PKCS#12 ファイルは要求を承認する CA エージェントに返されます。その後、エージェントは PKCS#12 ファイルをユーザーに転送することが期待されます。
- 自動承認の場合、PKCS#12 ファイルはリクエストを送信したユーザーに返されます。
図5.3 エージェントによる手動による登録

PKCS#12 ファイルを受信すると、ユーザーは pkcs12util
などの CLI を使用して、このファイルを各アプリケーションのユーザー内部の証明書/キーデータベースにインポートできます。たとえば、ユーザーの Firefox nss データベースです。
5.2.2.3. キーの復元
証明書登録プロファイルで enableArchival パラメーターが true に設定されている場合、Server-Side Keygen 登録時に秘密鍵がアーカイブされます。その後、アーカイブされた秘密鍵は、認定 KRA エージェントにより復元できます。
5.2.2.4. 関連情報
5.2.2.4.1. KRA 要求レコード
このメカニズムの性質上、プロファイルで enableArchival パラメーターが true に設定されている場合、Server-Side keygen 要求ごとに 2 つの KRA 要求レコードがあります。
要求タイプ asymkeyGenRequest の 1 つ
この要求タイプは、KRA エージェントページの List Requests を使用してフィルタリングすることはできません。Show All Requests を選択して、リストを表示できます。
- 要求タイプの リカバリー の場合
5.2.2.4.2. 監査レコード
有効にした場合には、以下の監査レコードを確認することができます。
- CA
- SERVER_SIDE_KEYGEN_ENROLL_KEYGEN_REQUEST
- SERVER_SIDE_KEYGEN_ENROLL_KEY_RETRIEVAL_REQUEST
- KRA
- SERVER_SIDE_KEYGEN_ENROLL_KEYGEN_REQUEST_PROCESSED
- SERVER_SIDE_KEYGEN_ENROLL_KEY_RETRIEVAL_REQUEST_PROCESSED (まだ実装されていません)