管理ガイド
Red Hat Certificate System 9.7 向けに更新
概要
第1章 Red Hat Certificate Systemnbsp;Hat Certificate Red Hat Certificate Systemnbsp;System サブシステムの概要
1.1. 証明書に使用
1.2. 証明書システムに関するレビュー;システムサブシステム
Enterprise Security Client
1.3. 証明書管理の概観 (非 TMS)
1.4. Token Management System (TMS) の概観
1.5. RedRed Hat Certificate Systemnbsp;Hat CertificateRed Hat Certificate Systemnbsp;System services
パート I. Red Hat Certificate System ユーザーインターフェイス
第2章 ユーザーインターフェイス
2.1. ユーザーインターフェイスの概要
- PKI コマンドラインインターフェイスおよびその他のコマンドラインユーティリティー
- PKI コンソールのグラフィカルインターフェイス
- Certificate System Web インターフェイス
~/.dogtag/nssdb/
ディレクトリーにある NSS データベースを使用します。「pki CLI の初期化」では、NSS データベースを管理者の証明書およびキーで初期化する詳細な手順を説明します。PKI コマンドラインユーティリティーの使用例は、「pki CLI の使用」に記載されています。その他の例を以下に示します。
PKCS10Client
を使用した CSR の作成」 などの後のセクションで使用されています。
pkiconsole
の初期化」 は、初期化方法を説明します。「CA、OCSP、KRA、および TKS サブシステムに対する pkiconsole
の使用」 では、コンソールインターフェイスの使用の概要を説明します。「Java ベースの管理コンソールを使用した証明書の登録プロファイルの管理」 などの後のセクションでは、特定の操作について詳しく説明します。
2.2. クライアント NSS データベースの初期化
- クライアント用の NSS データベースを準備します。これは、新規データベースか、または既存のデータベースにすることができます。
- CA 証明書チェーンをインポートして信頼します。
- 証明書と対応するキーがあります。NSS データベースで生成したり、PKCS #12 ファイルから他の場所からインポートしたりできます。
2.3. グラフィカルインターフェイス
pkiconsole
は、Administrator ロール権限を持つユーザー向けにサブシステム自体を管理するためのグラフィカルインターフェイスです。これには、ユーザーの追加、ログの設定、プロファイルおよびプラグインの管理、および内部データベースなどの多くの機能が含まれます。このユーティリティーは、クライアント認証を使用して TLS 経由で Certificate System サーバーと通信し、リモートでサーバーを管理するために使用できます。
2.3.1. pkiconsole
の初期化
pkiconsole
インターフェイスを初めて使用するには、新しいパスワードを指定し、以下のコマンドを使用します。
$ pki -c password -d ~/.redhat-idm-console client-init
~/.redhat-idm-console/
ディレクトリーに新しいクライアントの NSS データベースを作成します。
.p12
ファイルから管理クライアント証明書を抽出します。
$ openssl pkcs12 -in file -clcerts -nodes -nokeys -out file.crt
$ PKICertImport -d ~/.redhat-idm-console -n "nickname" -t ",," -a -i file.crt -u C
$ pki -c password -d ~/.redhat-idm-console pkcs12-import --pkcs12-file file --pkcs12-password pkcs12-password
$ certutil -V -u C -n "nickname" -d ~/.redhat-idm-console
2.3.2. CA、OCSP、KRA、および TKS サブシステムに対する pkiconsole
の使用
pkiconsole https://server.example.com:admin_port/subsystem_type
https://192.0.2.1:8443/ca https://[2001:DB8::1111]:8443/ca
図2.1 Certificate System コンソール

- ユーザーおよびグループ
- アクセス制御リスト
- ログ設定
- サブシステム証明書 (セキュリティードメインや監査署名など、サブシステムに発行した証明書)
2.4. Web インターフェイス
2.4.1. ブラウザーの初期化
CA 証明書のインポート
- Menu → Preferences → Privacy & Security → View certificatesをクリックします。
- Authorities タブを選択し、Import ボタンをクリックします。
ca.crt
ファイルを選択し、Import をクリックします。
クライアント証明書のインポート
- Options → Preferences → Privacy & Security → View certificates をクリックします。
- Your Certificates タブを選択します。
- Import をクリックして、
ca_admin_cert.p12
などのクライアント p12 ファイルを選択します。 - プロンプトにクライアント証明書のパスワードを入力します。
- OK をクリックします。
- Your Certificates の下にエントリーが追加されていることを確認します。
Web コンソールへのアクセス
2.4.2. 管理インターフェイス
図2.2 TPS 管理ページ

2.4.3. エージェントインターフェイス
図2.3 Certificate Manager のエージェントサービスページ

- Certificate Manager エージェントサービスには、(証明書を発行する) 証明書要求の承認、証明書の失効、ならびに証明書および CRL の公開が含まれます。CA が発行するすべての証明書は、そのエージェントサービスページで管理できます。
- TPS エージェントサービスは、CA エージェントサービスと同様、フォーマットされ、TPS を介して証明書が発行されたすべてのトークンを管理します。トークンはエージェントで登録、一時停止、および削除できます。他の 2 つのロール (operator および admin) は Web サービスページでトークンを表示できますが、トークンに対するアクションを実行できません。
- KRA エージェントサービスページは、キーリカバリー要求を処理します。キーリカバリー要求は、証明書が失われた場合に既存のキーペアを再利用して証明書を発行できるようにするかどうかを設定します。
- OCSP エージェントサービスページを使用すると、エージェントは CRL を OCSP に公開し、CRL を手動で OCSP に読み込み、クライアント OCSP 要求の状態を表示するように CA を設定します。
2.4.4. エンドユーザーページ
図2.4 Certificate Manager のエンドエンティティーページ

2.5. コマンドラインインターフェイス
2.5.1. pkiCLI
$
pki [CLI options] <command> [command parameters]
2.5.1.1. pki CLI の初期化
$
pki -c <password> client-init
~/.dogtag/nssdb
ディレクトリーに新しいクライアント NSS データベースが作成されます。パスワードは、クライアントの NSS データベースを使用するすべての CLI 操作に指定する必要があります。または、パスワードがファイルに保存されている場合は、-C
オプションを使用してファイルを指定できます。以下に例を示します。
$
pki -C password_file client-init
.p12
ファイルから管理クライアント証明書を抽出します。
$ openssl pkcs12 -in file -clcerts -nodes -nokeys -out file.crt
$ PKICertImport -d ~/.dogtag/nssdb -n "nickname" -t ",," -a -i file.crt -u C
$
pki -c <password> pkcs12-import --pkcs12-file <file> --pkcs12-password <password>
certutil -V -u C -n "nickname" -d ~/.dogtag/nssdb
2.5.1.2. pki CLI の使用
$
pki
$
pki ca
$
pki ca-cert
--help
オプションを使用します。
$
pki --help
$
pki ca-cert-find --help
$
pki help
$
pki help ca-cert-find
$
pki ca-cert-find
$
pki -U <server URL> -n <nickname> -c <password> <command> [command parameters]
$
pki -n jsmith -c password ca-user-find ...
http://local_host_name:8080
でサーバーと通信します。別の場所でサーバーと通信するには、URL を -U
オプションで指定します。以下に例を示します。
$
pki -U https://server.example.com:8443 -n jsmith -c password ca-user-find
2.5.2. AtoB
$
AtoB input.ascii output.bin
2.5.3. AuditVerify
$ AuditVerify -d ~jsmith/auditVerifyDir -n Log Signing Certificate -a ~jsmith/auditVerifyDir/logListFile -P "" -v
~jsmith/auditVerifyDir
NSS データベース (-d
) の Log Signing Certificate
(-n
) を使用して監査ログを検証します (-d)。検証するログの一覧 (-a
) は、コンマ区切りで時系列で、~jsmith/auditVerifyDir/logListFile
ファイルにあります。証明書の先頭に接頭辞 (-P
) を追加し、キーデータベースのファイル名を空にします。出力は詳細です (-v
)。
2.5.4. BtoA
$
BtoA input.bin output.ascii
2.5.5. CMCRequest
$
CMCRequest example.cfg
CMCRequest
を使用した証明書の取り消し」 を使用した証明書の要求と受け取り
2.5.6. CMCRevoke
2.5.7. CMCSharedToken
$
CMCSharedToken -d . -p myNSSPassword -s "shared_passphrase" -o cmcSharedTok2.b64 -n "subsystemCert cert-pki-tomcat"
-s
) は、現在のディレクトリー (-d
) にある NSS データベースにある subsystemCert cert-pki-tomcat (-n
) という名前の証明書を使用して、cmcSharedtok2.b64
ファイル (-o
) に暗号化され、保存されます。デフォルトのセキュリティートークン internal が使用され (-h
が指定されていない)、myNSSPassword トークンのパスワードは、トークンへのアクセスに使用されます。
CMCRequest
を使用した証明書の取り消し」を参照してください。
2.5.8. CRMFPopClient
CRMFPopClient
ユーティリティーは、NSS データベースを使用する Certificate Request Message Format (CRMF) クライアントであり、Possession の Proof を提供します。
$ CRMFPopClient -d . -p password -n "cn=subject_name" -q POP_SUCCESS -b kra.transport -w "AES/CBC/PKCS5Padding" -t false -v -o /user_or_entity_database_directory/example.csr
-n
)、現在のディレクトリー (-d
) の NSS データベース (-b)、トランスポート (kra.transport
) (-b
) に使用する証明書、AES/CBC/PKCS5Padding キーをラップする証明書で新しい CSR を作成します (-v
)。また、生成される CSR が /user_or_entity_database_directory/example.csr
ファイル (-o
) に書き込まれます。
CMCRequest
を使用した証明書の取り消し」 を参照してください。
2.5.9. HttpClient
HttpClient
ユーティリティーは、CMC 要求を送信するための NSS 対応の HTTP クライアントです。
$ HttpClient request.cfg
request.cfg
ファイルに保存されます。詳細は、HttpClient --help コマンドの出力を参照してください。
2.5.10. OCSPClient
$ OCSPClient -h server.example.com -p 8080 -d /etc/pki/pki-tomcat/alias -c "caSigningCert cert-pki-ca" --serial 2
-p
) の server.example.com
OCSP サーバー (-h
) に対してクエリーを実行し、シリアル番号 2 (--serial
) を持つ caSigningcet cert-pki-ca (-c
) が署名した証明書を確認します。/etc/pki/pki-tomcat/alias
ディレクトリーの NSS データベースが使用されます。
2.5.11. PKCS10Client
PKCS10Client
ユーティリティーは、必要に応じて HSM 上に RSA キーおよび EC キーの CSR を PKCS10 形式で作成します。
$ PKCS10Client -d /etc/dirsrv/slapd-instance_name/ -p password -a rsa -l 2048 -o ~/ds.csr -n "CN=$HOSTNAME"
/etc/dirsrv/slapd-instance_name/
ディレクトリー (-d
) に 2048 ビット (-l
) で、新しい RSA (-a
) キーを、データベースパスワード (password) (-p
) で作成します。出力の CSR は ~/ds.cfg
ファイル (-o
) に保存され、証明書 DN は CN=$HOSTNAME (-n
) になります。
2.5.12. PrettyPrintCert
$ PrettyPrintCert ascii_data.cert
ascii_data.cert)
ファイルの出力を解析し、その内容を人間が読める形式で表示します。出力には、署名アルゴリズム、指数、モジュール、証明書拡張などの情報が含まれます。
2.5.13. PrettyPrintCrl
$ PrettyPrintCrl ascii_data.crl
ascii_data.crt
ファイルの出力を解析し、その内容を人間が読める形式で表示します。出力には、失効署名アルゴリズム、失効の発行者、取り消された証明書とその理由が一覧になったものなどが含まれます。
2.5.14. TokenInfo
$ TokenInfo ./nssdb/
2.5.15. tkstool
tkstool
ユーティリティーは、トークンキーサービス (TKS) サブシステムと対話します。
$ tkstool -M -n new_master -d /var/lib/pki/pki-tomcat/alias -h token_name
token_name
の /var/lib/pki/pki-tomcat/alias
NSS データベースに new_master (-n
) という名前の新しいマスターキー (-M
) を作成します。
2.6. Enterprise Security Client
- Safenet の 330J スマートカードなどの JavaCard 2.1 以降のカードと Global Platform 2.01 準拠のスマートカードをサポートします。
- スマートカードと GemPCKey USB フォームファクターキーの両方である Gemalto TOP IM FIPS CY2 トークンをサポートします。
- SafeNet Smart Card 650 (SC650) をサポートします。
- セキュリティートークンを登録して、TPS で認識されるようにします。
- TPS でトークンを再登録するなど、セキュリティートークンを維持します。
- 管理対象トークンの現在のステータスに関する情報を提供します。
- トークンが失われた場合に別のトークンで鍵をアーカイブおよび復元できるように、サーバー側の鍵生成をサポートします。
- ユーザーがセキュリティートークンを登録して、TPS によって認識されるようにします。
- ユーザーがセキュリティートークンを管理できるようにします。たとえば、Enterprise Security Client を使用すると、TPS でトークンを再登録できます。
- デフォルトおよびカスタムトークンプロファイルを使用したさまざまなトークンのサポートを提供します。デフォルトでは、TPS はユーザーキー、デバイスキー、およびセキュリティー担当者キーを自動的に登録できます。これにより、適切なプロファイルに従って (トークン CUID などの属性によって認識される) さまざまな使用に大してトークンが自動的に自動的に登録されるように、追加のプロファイルを追加できます。
- 管理対象トークンの現在のステータスに関する情報を提供します。
パート II. 証明書サービスの設定
第3章 証明書を発行するルール (証明書プロファイル) の作成
3.1. 証明書プロファイルの概要
- 認証。すべての認証プロファイルで認証方法を指定できます。
- 認可。すべての認定プロファイルで承認方法を指定できます。
- プロファイル入力。プロファイルの入力は、証明書が要求されたときに CA に送信されるパラメーターおよび値です。プロファイル入力には、証明書要求の公開鍵と、証明書の終了エンティティーによって要求される証明書のサブジェクト名が含まれます。
- プロファイルの出力。プロファイルの出力は、エンドエンティティーに証明書を提供する形式を指定するパラメーターおよび値です。プロファイルの出力は、要求が成功したときに PKCS#7 証明書チェーンが含まれる CMC の応答です。
- 証明書の内容。各証明書は、割り当てられたエンティティーの名前 (サブジェクト名)、署名アルゴリズム、有効期間などのコンテンツ情報を定義します。証明書に含まれるものは、X.509 標準で定義されます。X509 標準のバージョン 3 では、証明書に拡張機能を含めることもできます。証明書エクステンションの詳細は、「標準仕様の X.509 v3 証明書拡張機能リファレンス」 を参照してください。証明書プロファイルに関する情報はすべて、プロファイルの設定ファイルのプロファイルポリシーの
set
エントリーで定義されます。複数の証明書が同時に要求される可能性がある場合は、各証明書のニーズを満たすためにプロファイルポリシーに複数のセットエントリーを定義できます。各ポリシーセットは多数のポリシールールで設定され、各ポリシールールは証明書コンテンツのフィールドを記述します。ポリシールールには、以下の内容を含めることができます。- プロファイルのデフォルトです。これらは、証明書内に含まれる情報に対する事前定義済みのパラメーターおよび許可される値です。プロファイルのデフォルトには、証明書の有効期間と、発行する証明書のタイプにどの証明書拡張機能が表示されるかが含まれます。
- プロファイルの制約。制約は、証明書を発行するルールまたはポリシーを設定します。また、プロファイル制約には、証明書のサブジェクト名に少なくとも 1 つの CN コンポーネントを含める必要があるルールが含まれ、証明書の有効性を最大 360 日に設定し、更新を許可する猶予期間を定義するルール、または subjectaltname 拡張が常に true に設定される必要があるというルールが含まれます。
3.1.1. 登録プロファイル
例3.1 caCMCUserCert プロファイルの例
desc=This certificate profile is for enrolling user certificates by using the CMC certificate request with CMC Signature authentication. visible=true enable=true enableBy=admin name=Signed CMC-Authenticated User Certificate Enrollment
auth.instance_id=
エントリーは、このプロファイルを使用した登録リクエストの送信に認証は必要ありません。ただし、保証を取得するには、承認された CA エージェントによる手動承認が必要です。
input.list=i1 input.i1.class_id=cmcCertReqInputImp
output.list=o1 output.o1.class_id=certOutputImpl
policyset.list=userCertSet policyset.userCertSet.list=1,10,2,3,4,5,6,7,8,9 ... policyset.userCertSet.6.constraint.class_id=keyUsageExtConstraintImpl policyset.userCertSet.6.constraint.name=Key Usage Extension Constraint policyset.userCertSet.6.constraint.params.keyUsageCritical=true policyset.userCertSet.6.constraint.params.keyUsageDigitalSignature=true policyset.userCertSet.6.constraint.params.keyUsageNonRepudiation=true policyset.userCertSet.6.constraint.params.keyUsageDataEncipherment=false policyset.userCertSet.6.constraint.params.keyUsageKeyEncipherment=true policyset.userCertSet.6.constraint.params.keyUsageKeyAgreement=false policyset.userCertSet.6.constraint.params.keyUsageKeyCertSign=false policyset.userCertSet.6.constraint.params.keyUsageCrlSign=false policyset.userCertSet.6.constraint.params.keyUsageEncipherOnly=false policyset.userCertSet.6.constraint.params.keyUsageDecipherOnly=false policyset.userCertSet.6.default.class_id=keyUsageExtDefaultImpl policyset.userCertSet.6.default.name=Key Usage Default policyset.userCertSet.6.default.params.keyUsageCritical=true policyset.userCertSet.6.default.params.keyUsageDigitalSignature=true policyset.userCertSet.6.default.params.keyUsageNonRepudiation=true policyset.userCertSet.6.default.params.keyUsageDataEncipherment=false policyset.userCertSet.6.default.params.keyUsageKeyEncipherment=true policyset.userCertSet.6.default.params.keyUsageKeyAgreement=false policyset.userCertSet.6.default.params.keyUsageKeyCertSign=false policyset.userCertSet.6.default.params.keyUsageCrlSign=false policyset.userCertSet.6.default.params.keyUsageEncipherOnly=false policyset.userCertSet.6.default.params.keyUsageDecipherOnly=false ...
3.1.2. 証明書拡張: デフォルトおよび制約
policyset.caCertSet.5.default.name=Basic Constraints Extension Default policyset.caCertSet.5.default.params.basicConstraintsCritical=true policyset.caCertSet.5.default.params.basicConstraintsIsCA=true policyset.caCertSet.5.default.params.basicConstraintsPathLen=-1
policyset.caCertSet.5.constraint.class_id=basicConstraintsExtConstraintImpl policyset.caCertSet.5.constraint.name=Basic Constraint Extension Constraint policyset.caCertSet.5.constraint.params.basicConstraintsCritical=true policyset.caCertSet.5.constraint.params.basicConstraintsIsCA=true policyset.caCertSet.5.constraint.params.basicConstraintsMinPathLen=-1 policyset.caCertSet.5.constraint.params.basicConstraintsMaxPathLen=-1
3.1.3. 入力および出力
3.2. 証明書プロファイルの設定
- PKI コマンドラインインターフェイスの使用
- Java ベースの管理コンソールの使用
3.2.1. PKI コマンドラインインターフェイスを使用した証明書の登録プロファイルの管理
pki
ユーティリティーを使用して証明書プロファイルを管理する方法を説明します。詳細は、pki-ca-profile(1) の man ページを参照してください。
3.2.1.1. 証明書プロファイルの有効化および無効化
caCMCECserverCert
証明書プロファイルを無効にするには、次のコマンドを実行します。
# pki -c password -n caagent ca-profile-disable caCMCECserverCert
caCMCECserverCert
証明書プロファイルを有効にするには、次のコマンドを実行します。
# pki -c password -n caagent ca-profile-enable caCMCECserverCert
3.2.1.2. Raw 形式の証明書プロファイルの作成
# pki -c password -n caadmin ca-profile-add profile_name.cfg --raw
profileId=profile_name
3.2.1.3. RAW 形式での証明書プロファイルの編集
caCMCECserverCert
プロファイルを編集するには、次のコマンドを実行します。
# pki -c password -n caadmin ca-profile-edit caCMCECserverCert
VI
エディターで開きます。エディターを閉じると、サーバーでプロファイル設定が更新されます。
例3.2 RAW 形式での証明書プロファイルの編集
caCMCserverCert
プロファイルを編集して、ユーザーが提供する複数の拡張機能を許可するには、次を行います。
- CA エージェントであるプロファイルを無効にします。
# pki -c password -n caagemt ca-profile-disable caCMCserverCert
- プロファイルを CA 管理者として編集します。
VI
エディターでプロファイルをダウンロードして開きます。# pki -c password -n caadmin ca-profile-edit caCMCserverCert
- 設定を更新して、拡張機能を受け入れます。詳細は、例B.3「CSR の Multiple User Supplied Extension」を参照してください。
- プロファイルを CA エージェントとして有効にします。
# pki -c password -n caagent ca-profile-enable caCMCserverCert
3.2.1.4. 証明書プロファイルの削除
# pki -c password -n caadmin ca-profile-del profile_name
3.2.2. Java ベースの管理コンソールを使用した証明書の登録プロファイルの管理
3.2.2.1. CA コンソールを使用した証明書プロファイルの作成
- CertificateCertificate Systemnbsp;System CA サブシステムのコンソールにログインします。
pkiconsole https://server.example.com:8443/ca
- Configuration タブで Certificate Manager を選択し、Certificate Profiles を選択します。設定した証明書プロファイルを一覧表示する Certificate Profile Instances Management タブが開きます。
- 新しい証明書プロファイルを作成するには、Add をクリックします。Select Certificate Profile Plugin Implementation ウィンドウで、プロファイルが作成される証明書のタイプを選択します。
- Certificate Profile Instance Editor にプロファイル情報を入力します。
- Certificate Profile Instance ID。この ID は、システムがプロファイルの特定に使用する ID です。
- Certificate Profile Name。これは、ユーザーが分かりやすいプロファイルの名前です。
- Certificate Profile Description。
- End User Certificate Profile。これにより、リクエストがプロファイルの入力フォームを介して行われる必要があるかどうかが設定されます。通常、これは true に設定されます。これを false に設定すると、証明書プロファイルの入力ページではなく、Certificate Manager の証明書プロファイルフレームワークを介して署名済みリクエストが処理できるようになります。
- Certificate Profile Authentication。これにより、認証方法が設定されます。認証インスタンスのインスタンス ID を指定して、自動認証が設定されます。このフィールドが空の場合、認証方法はエージェントで承認される登録になります。要求はエージェントサービスインターフェイスの要求キューに送信されます。TMS サブシステム用でない限り、管理者は次の認証プラグインのいずれかを選択する必要があります。
- CMCAuth: CA エージェントが登録要求を承認し、送信する必要がある場合に、このプラグインを使用します。
- CMCUserSignedAuth: このプラグインを使用して、エージェント以外のユーザーが独自の証明書を登録できるようにします。
- OK をクリックします。プラグインエディターが閉じられ、新しいプロファイルが profiles タブに一覧表示されます。
- 新規プロファイルのポリシー、入力、および出力を設定します。一覧から新しいプロファイルを選択し、Edit/View をクリックします。
- Certificate Profile Rule Editor ウィンドウの Policies タブでポリシーを設定します。Policies タブには、プロファイルタイプに対してデフォルトで設定されているポリシーが一覧表示されます。
- ポリシーを追加するには、Add をクリックします。
- Default フィールドからデフォルトを選択し、Constraints フィールドでそのポリシーに関連付けられた制約を選択し、OK をクリックします。
- ポリシー設定 ID を入力します。デュアルキーペアを発行する場合には、個別のポリシーセットで、各証明書に関連付けられたポリシーを定義します。次に、証明書プロファイルポリシー ID と、証明書プロファイルポリシーの名前または識別子を入力します。
- Defaults タブおよび Constraints タブでパラメーターを設定します。Defaults は、証明書要求に設定する属性を定義します。これにより、証明書の内容が決定されます。これらは、拡張、有効期間、または証明書に含まれるその他のフィールドのいずれかになります。Constraints は、デフォルト値の有効な値を定義します。各デフォルトまたは制約の詳細は、「デフォルトの参照」 および 「制約の参照」 を参照してください。
既存のポリシーを変更するには、ポリシーを選択し、Edit をクリックします。次に、そのポリシーのデフォルトおよび制約を編集します。ポリシーを削除するには、ポリシーを選択し、Delete をクリックします。 - Certificate Profile Rule Editor ウィンドウの Inputs タブに入力を設定します。プロファイルには複数の入力タイプが存在します。注記TMS サブシステムにプロファイルを設定しない場合は、cmcCertReqInput のみを選択して Delete ボタンをクリックし、他のプロファイルを削除します。
- 入力を追加するには、Add をクリックします。
- 一覧から入力を選択し、OK をクリックします。デフォルト入力の完全な詳細については、「入力の参照」 を参照してください。
- New Certificate Profile Editor ウィンドウが開きます。入力 ID を設定し、OK をクリックします。
入力は追加および削除が可能です。入力の編集を選択することは可能ですが、入力にはパラメーターやその他の設定がないため、設定するものはありません。入力を削除するには、入力を選択し、Delete をクリックします。 - Certificate Profile Rule Editor ウィンドウの Outputs タブで、出力を設定します。自動認証方式を使用する証明書プロファイルには、出力を設定する必要があります。エージェントが承認した認証を使用する証明書プロファイルには、出力を設定する必要はありません。Certificate Output タイプはすべてのプロファイルでデフォルトで設定され、カスタムプロファイルに自動的に追加されます。TMS サブシステムにプロファイルを設定しない限り、certOutput のみを選択します。出力を追加または削除できます。出力の編集を選択することは可能ですが、出力にはパラメーターやその他の設定がないため、設定するものはありません。
- 出力を追加するには、Add をクリックします。
- 一覧から出力を選択し、OK をクリックします。
- 出力の名前または識別子を指定して、OK をクリックします。この出力は出力タブに一覧表示されます。これを編集して、この出力のパラメーターに値を指定できます。
出力を削除するには、一覧から出力を選択して Delete をクリックします。 - CA を再起動して、新規プロファイルを適用します。
systemctl restart pki-tomcatd-nuxwdog@instance_name.service
- プロファイルを管理者として作成したら、CA エージェントはエージェントサービスページでプロファイルを承認してプロファイルを有効にする必要があります。
- CA のサービスページを開きます。
https://server.example.com:8443/ca/services
- 証明書プロファイルの管理 リンクをクリックします。このページには、アクティブと非アクティブの両方で、管理者によって設定されたすべての証明書プロファイルが一覧表示されます。
- 承認する証明書プロファイルの名前をクリックします。
- ページの下部で、Enable ボタンをクリックします。
3.2.2.2. コンソールでの証明書プロファイルの編集
- エージェントサービスページにログインし、プロファイルを無効にします。エージェントで証明書プロファイルを有効にすると、その証明書プロファイルは Certificate Profile Instance Management タブで有効とマークされ、コンソールを介して証明書プロファイルはいつでも編集できません。
- CertificateCertificate Systemnbsp;System CA サブシステムのコンソールにログインします。
pkiconsole https://server.example.com:8443/ca
- Configuration タブで Certificate Manager を選択し、Certificate Profiles を選択します。
- 証明書のプロファイルを選択し、Edit/View をクリックします。
- Certificate Profile Rule Editor ウィンドウが表示されます。多くのデフォルト、制約、入力、または出力が変更されています。注記プロファイルインスタンス ID は変更しないでください。必要に応じて、ウィンドウの隅の 1 つを引っ張って、ウィンドウを拡大します。
- CA を再起動して変更を適用します。
- エージェントサービスページで、プロファイルを再度有効にします。
3.2.3. 証明書の登録プロファイルの一覧表示
pki
ユーティリティーを使用します。以下に例を示します。
# pki -c password -n caadmin ca-profile-find ------------------ 59 entries matched ------------------ Profile ID: caCMCserverCert Name: Server Certificate Enrollment using CMC Description: This certificate profile is for enrolling server certificates using CMC. Profile ID: caCMCECserverCert Name: Server Certificate wth ECC keys Enrollment using CMC Description: This certificate profile is for enrolling server certificates with ECC keys using CMC. Profile ID: caCMCECsubsystemCert Name: Subsystem Certificate Enrollment with ECC keys using CMC Description: This certificate profile is for enrolling subsystem certificates with ECC keys using CMC. Profile ID: caCMCsubsystemCert Name: Subsystem Certificate Enrollment using CMC Description: This certificate profile is for enrolling subsystem certificates using CMC. ... ----------------------------- Number of entries returned 20
3.2.4. 証明書登録プロファイルの詳細表示
caECFullCMCUserSignedCert
などの特定の証明書プロファイルを表示するには、次のコマンドを実行します。
$ pki -c password -n caadmin ca-profile-show caECFullCMCUserSignedCert ----------------------------------- Profile "caECFullCMCUserSignedCert" ----------------------------------- Profile ID: caECFullCMCUserSignedCert Name: User-Signed CMC-Authenticated User Certificate Enrollment Description: This certificate profile is for enrolling user certificates with EC keys by using the CMC certificate request with non-agent user CMC authentication. Name: Certificate Request Input Class: cmcCertReqInputImpl Attribute Name: cert_request Attribute Description: Certificate Request Attribute Syntax: cert_request Name: Certificate Output Class: certOutputImpl Attribute Name: pretty_cert Attribute Description: Certificate Pretty Print Attribute Syntax: pretty_print Attribute Name: b64_cert Attribute Description: Certificate Base-64 Encoded Attribute Syntax: pretty_print
caECFullCMCUserSignedCert
などの特定の証明書プロファイルを表示するには、次のコマンドを raw 形式で実行します。
$ pki -c password -n caadmin ca-profile-show caECFullCMCUserSignedCert --raw #Wed Jul 25 14:41:35 PDT 2018 auth.instance_id=CMCUserSignedAuth policyset.cmcUserCertSet.1.default.params.name= policyset.cmcUserCertSet.4.default.class_id=authorityKeyIdentifierExtDefaultImpl policyset.cmcUserCertSet.6.default.params.keyUsageKeyCertSign=false policyset.cmcUserCertSet.10.default.class_id=noDefaultImpl policyset.cmcUserCertSet.10.constraint.name=Renewal Grace Period Constraint output.o1.class_id=certOutputImpl ...
3.3. プロファイルでの鍵のデフォルトの定義
policyset.set1.p3.constraint.class_id=noConstraintImpl policyset.set1.p3.constraint.name=No Constraint policyset.set1.p3.default.class_id=subjectKeyIdentifierExtDefaultImpl policyset.set1.p3.default.name=Subject Key Identifier Default ... policyset.set1.p11.constraint.class_id=keyConstraintImpl policyset.set1.p11.constraint.name=Key Constraint policyset.set1.p11.constraint.params.keyType=RSA policyset.set1.p11.constraint.params.keyParameters=1024,2048,3072,4096 policyset.set1.p11.default.class_id=userKeyDefaultImpl policyset.set1.p11.default.name=Key Default
policyset.set1.list=p1,p2,p11,p3
,p4,p5,p6,p7,p8,p9,p10
3.4. 更新を有効にするためのプロファイルの設定
policyset.cmcUserCertSet.10.constraint.class_id=renewGracePeriodConstraintImpl policyset.cmcUserCertSet.10.constraint.name=Renewal Grace Period Constraint policyset.cmcUserCertSet.10.constraint.params.renewal.graceBefore=30 policyset.cmcUserCertSet.10.constraint.params.renewal.graceAfter=30 policyset.cmcUserCertSet.10.default.class_id=noDefaultImpl policyset.cmcUserCertSet.10.default.name=No Default
3.4.1. 同じ鍵を使用した更新
allowSameKeyRenewal
パラメーターが true に設定されています。以下に例を示します。
policyset.cmcUserCertSet.9.constraint.class_id=uniqueKeyConstraintImpl policyset.cmcUserCertSet.9.constraint.name=Unique Key Constraint policyset.cmcUserCertSet.9.constraint.params.allowSameKeyRenewal=true policyset.cmcUserCertSet.9.default.class_id=noDefaultImpl policyset.cmcUserCertSet.9.default.name=No Default
3.4.2. 新しい鍵を使用した更新
subjectDN
を使用します。
3.5. 証明書の署名アルゴリズムの設定
3.5.1. CA のデフォルト署名アルゴリズムの設定
- CA コンソールを開きます。
pkiconsole https://server.example.com:8443/ca
- Configuration タブで、Certificate Manager ツリーを展開します。
- General Settings タブで、Algorithm ドロップダウンメニューで使用するアルゴリズムを設定します。
3.5.2. プロファイルでの署名アルゴリズムのデフォルトの設定
.cfg
ファイルで、アルゴリズムは 2 つのパラメーターで設定されます。
policyset.cmcUserCertSet.8.constraint.class_id=signingAlgConstraintImpl policyset.cmcUserCertSet.8.constraint.name=No Constraint policyset.cmcUserCertSet.8.constraint.params.signingAlgsAllowed=SHA256withRSA,SHA512withRSA,SHA256withEC,SHA384withRSA,SHA384withEC,SHA512withEC policyset.cmcUserCertSet.8.default.class_id=signingAlgDefaultImpl policyset.cmcUserCertSet.8.default.name=Signing Alg policyset.cmcUserCertSet.8.default.params.signingAlg=-
- CA コンソールを開きます。
pkiconsole https://server.example.com:8443/ca
- Configuration タブで、Certificate Manager ツリーを展開します。
- Certificate Profiles 項目をクリックします。
- Policies タブをクリックします。
- Signing Alg ポリシー を選択し、Edit ボタンをクリックします。
- デフォルトの署名アルゴリズムを設定するには、Defaults タブで値を設定します。これが - に設定されている場合、プロファイルは CA のデフォルトを使用します。
- 証明書要求で許可される署名アルゴリズムの一覧を設定するには、Constraints タブを開き、singiningAlgsAllowed の Value フィールドでアルゴリズムの一覧を設定します。制約に使用できる値は、「アルゴリズム制約の署名」 に記載されています。
3.6. CA 関連プロファイルの管理
- CA 署名証明書の管理
- 発行ルールの定義
3.6.1. CA 証明書での制限の設定
- CA 証明書には、基本的な制約の拡張子が必要です。
- CA 証明書の鍵用途拡張に keyCertSign ビットが設定されている必要があります。
/var/lib/pki/instance_name/ca/conf/caCert.profile
です。このプロファイルは、pkiconsole で編集することはできません (インスタンスを設定する前のみ利用可能)。テキストエディターで CA を設定する前に、テンプレートファイルでこのプロファイルのポリシーを編集することができます。
- プロファイルが有効になっている場合は、編集する前に無効にする必要があります。エージェントサービスページを開き、左側のナビゲーションメニューから Manage Certificate Profile を選択してプロファイルを選択し、Disable profile をクリックします。
- CA コンソールを開きます。
pkiconsole https://server.example.com:8443/ca
- Configuration タブの左側のナビゲーションツリーで、Certificate Manager を選択し、Certificate Profiles を選択します。
- 右側のウィンドウから caCACert または該当する CA 署名証明書プロファイルを選択し、Edit/View をクリックします。
- Certificate Profile Rule Editor の Policies タブで、キー使用法または拡張キー使用法拡張機能のデフォルトが存在する場合はそれを選択して編集するか、プロファイルに追加します。
- 必要に応じて、デフォルトとして、Key Usage または Extended Key Usage Extension Constraint を選択します。
- CA 証明書のデフォルト値を設定します。詳細は、「Key Usage 拡張機能のデフォルト」および「Extended Key Usage 拡張機能のデフォルト」を参照してください。
- CA 証明書の制約値を設定します。キー使用拡張に設定する制約はありません。拡張キーの使用の拡張機能の場合は、CA に適切な OID 制約を設定します。詳細は、「Extended Key Usage 拡張機能のデフォルト」を参照してください。
- プロファイルに変更を加えたら、エージェントサービスページを再度ログインして、証明書プロファイルを再度有効にします。
3.6.2. 証明書の発行における CA の制限の変更
- CA 署名証明書よりも長い有効期間で証明書を発行できるかどうか。デフォルトでは、これを無効にします。
- 証明書の署名に使用される署名アルゴリズム。
- CA が証明書を発行するために使用するシリアル番号の範囲。
- CertificateCertificate Systemnbsp;System コンソールを開きます。
pkiconsole https://server.example.com:8443/ca
- Configuration タブの左側のナビゲーションツリーで、Certificate Manager アイテムを選択します。
図3.1 デフォルトでは、非従属 CA の一般設定タブ
- デフォルトでは、クローン以外の CA では、Certificate Manager メニュー項目の General Settings タブに以下のオプションが含まれます。
- Override validity nesting requirement。このチェックボックスでは、Certificate Manager が、CA 署名の証明書有効期間よりも長い有効期間の証明書を発行できるかどうかを設定します。このチェックボックスを選択しておらず、CA が CA 署名証明書の有効期間よりも長い期間要求を受け取ると、CA 署名証明書の期限が切れる時点で自動的に終了するように有効期間が切り捨てられます。
- Certificate Serial Number。これらのフィールドは、Certificate Manager が発行する証明書のシリアル番号の範囲を表示します。サーバーは、Next serial number フィールドのシリアル番号を、次に発行する証明書に割り当て、Ending serial number の番号を、最後に発行した証明書に割り当てます。シリアル番号の範囲により、複数の CA をデプロイでき、各 CA が発行する証明書の数のバランスを取ります。発行者名とシリアル番号の組み合わせは、証明書を一意に識別する必要があります。注記クローン CA を使用するシリアル番号の範囲は fluid です。複製されたすべての CA は、次の利用可能な範囲を定義する共通の設定エントリーを共有します。1 つの CA が利用可能な数未満の実行を開始すると、この設定エントリーをチェックし、次の範囲を要求します。エントリーは自動的に更新されます。これにより、次の CA が新規範囲を取得します。範囲は
begin*Number
属性およびend*Number
属性で定義され、個別の範囲が要求および証明書のシリアル番号に対して定義されます。以下に例を示します。dbs.beginRequestNumber=1 dbs.beginSerialNumber=1 dbs.enableSerialManagement=true dbs.endRequestNumber=9980000 dbs.endSerialNumber=ffe0000 dbs.ldap=internaldb dbs.newSchemaEntryAdded=true dbs.replicaCloneTransferNumber=5
シリアル番号管理は、クローンされていない CA に対して有効にできます。ただし、デフォルトでは、システムが自動的に有効になった場合にシステムのクローンが作成されない限り、シリアル番号の管理が無効になります。シリアル番号の範囲は、コンソールで手動で更新することはできません。シリアル番号の範囲は読み取り専用フィールドです。 - 署名アルゴリズムのデフォルト。Certificate Manager が証明書の署名に使用する署名アルゴリズムを指定します。このオプションは、SHA 256withRSA と SHA512withRSA になります (CA の署名鍵タイプが RSA の場合は SHA512withRSA)。証明書プロファイル設定に指定された署名アルゴリズムは、ここに設定されたアルゴリズムよりも優先されます。
- デフォルトでは、クローン作成された CA では、Certificate Manager メニュー項目の General Settings タブに以下のオプションが含まれます。
- ランダムなシリアル番号管理
- Enable random certificate serial numbers
両方のチェックボックスを選択します。図3.2 デフォルトでクローン作成された CA の General Settings タブ
- Save をクリックします。
3.6.3. ランダム証明書のシリアル番号の使用
Identity Management
(IdM) インストール時のクローン作成を自動化できます。
- 攻撃者に予測できない証明書のシリアル番号の一部にする
- ランダムに選択されたコンポーネントを ID に追加する
- それぞれを前後に歪めることにより、攻撃者が有効期限を予測できないようにする
- クローン作成で機能
- 競合の解決を許可する
- 現在のシリアル番号管理方法との互換性がある
- 管理者、エージェント、およびエンドエンティティーの現在のワークフローと互換性がある
- 連続するシリアル番号管理で既存のバグを修正。
3.6.3.1. ランダム証明書のシリアル番号の有効化
- General Settings タブで、Enable serial number management オプションを選択します。
図3.3 乱数の割り当てが有効な場合の General Settings タブ
- Enable random certificate serial numbers オプションをオンにします。
3.6.4. 認証局の有効期間を過ぎた認証局証明書の更新の許可
図3.4 CA 有効性のデフォルト設定

caCACert.cfg
ファイルを開きます。vim /var/lib/pki/instance_name/ca/conf/caCACert.cfg
- CA Validity デフォルトはデフォルトで存在する必要があります。値を true に設定して、発行 CA の有効期間を過ぎて CA 証明書を更新できるようにします。
policyset.caCertSet.2.default.name=CA Certificate Validity Default policyset.caCertSet.2.default.params.range=2922 policyset.caCertSet.2.default.params.startTime=0
policyset.caCertSet.2.default.params.bypassCAnotafter=true
- CA を再起動して変更を適用します。
図3.5 エージェントサービスページの CA 制約オプションを回避

3.7. サブジェクト名およびサブジェクト代替名の管理
3.7.1. サブジェクト名でのリクエスター CN または UID の使用
cn
値または uid
値は、発行した証明書のサブジェクト名をビルドするために使用できます。このセクションでは、サブジェクト名制約に naming 属性 (CN または UID) が証明書要求に存在する必要があるプロファイルを示しています。naming 属性がないと、リクエストは拒否されます。
- CN または UID 形式は、Subject Name Constraint の pattern 設定に設定されます。
- CN または UID トークン、および証明書の特定の接尾辞を含むサブジェクト DN の形式は、Subject Name Default に設定されます。
policyset.serverCertSet.1.constraint.class_id=subjectNameConstraintImpl policyset.serverCertSet.1.constraint.name=Subject Name Constraint policyset.serverCertSet.1.constraint.params.pattern=CN=[^,]+,.+
policyset.serverCertSet.1.constraint.params.accept=true policyset.serverCertSet.1.default.class_id=subjectNameDefaultImpl policyset.serverCertSet.1.default.name=Subject Name Default policyset.serverCertSet.1.default.params.name=CN=$request.req_subject_name.cn$,DC=example, DC=com
policyset.serverCertSet.1.constraint.class_id=subjectNameConstraintImpl policyset.serverCertSet.1.constraint.name=Subject Name Constraint policyset.serverCertSet.1.constraint.params.pattern=UID=[^,]+,.+
policyset.serverCertSet.1.constraint.params.accept=true policyset.serverCertSet.1.default.class_id=subjectNameDefaultImpl policyset.serverCertSet.1.default.name=Subject Name Default policyset.serverCertSet.1.default.params.name=UID=$request.req_subject_name.uid$,DC=example, DC=com
3.7.2. サブジェクト代替名への LDAP ディレクトリー属性値およびその他の情報の挿入
policyset.userCertSet.8.default.class_id=subjectAltNameExtDefaultImpl policyset.userCertSet.8.default.name=Subject Alt Name Constraint policyset.userCertSet.8.default.params.subjAltNameExtCritical=false policyset.userCertSet.8.default.params.subjAltExtType_0=RFC822Name policyset.userCertSet.8.default.params.subjAltExtPattern_0=$request.requestor_email$ policyset.userCertSet.8.default.params.subjAltExtGNEnable_0=true
- LDAP 属性値を挿入するには、ユーザーディレクトリーの認証プラグイン SharedSecret を有効にする必要があります。
- CA コンソールを開きます。
pkiconsole https://server.example.com:8443/ca
- 左側のナビゲーションツリーで 認証 を選択します。
- Authentication Instance タブで、Add をクリックし、SharedSecret 認証プラグインのインスタンスを追加します。
- 以下の情報を入力します。
Authentication InstanceID=SharedToken shrTokAttr=shrTok ldap.ldapconn.host=server.example.com ldap.ldapconn.port=636 ldap.ldapconn.secureConn=true ldap.ldapauth.bindDN=cn=Directory Manager password=password ldap.ldapauth.authtype=BasicAuth ldap.basedn=ou=People,dc=example,dc=org
- 新規プラグインインスタンスを保存します。
JOIN 共有トークンの設定に関する詳細は、「CMC 共有シークレットの設定」 を参照してください。 - ldapStringAttributes パラメーターは、ユーザーの LDAP エントリーから
mail
属性の値を読み込み、その値を証明書要求に追加するよう、認証プラグインに指示します。値が要求に設定されている場合、証明書プロファイルポリシーは、拡張値のその値を挿入するように設定できます。 - CA が証明書拡張機能に LDAP 属性の値を挿入できるようにするには、プロファイルの設定ファイルを編集し、拡張機能のポリシーセットパラメーターを挿入します。たとえば、
caFullCMCSharedTokenCert
プロファイルの Subject Alternative Name 拡張にmail
属性値を挿入するには、以下のコードを変更します。policyset.setID.8.default.params.
subjAltExtPattern_0=$request.auth_token.mail[0]$
プロファイルの編集に関する詳細は、「RAW 形式での証明書プロファイルの編集」 を参照してください。 - CA を再起動します。
systemctl restart pki-tomcatd-nuxwdog@instance_name.service
caFullCMCSharedTokenCert
プロファイル登録フォームを介して送信される証明書では、要求側の mail
LDAP 属性の値で Subject Alternative Name 拡張機能が追加されます。以下に例を示します。
Identifier: Subject Alternative Name - 2.5.29.17 Critical: no Value: RFC822Name: jsmith@example.com
表3.1 証明書の設定に使用する変数
ポリシーセットトークン | 説明 |
---|---|
$request.auth_token.cn[0]$ | 証明書を要求したユーザーの LDAP 共通名 (cn ) 属性。 |
$request.auth_token.mail[0]$ | 証明書を更新したユーザーの LDAP メール (mail ) 属性の値。 |
$request.auth_token.tokencertsubject$ | 証明書サブジェクト名。 |
$request.auth_token.uid$ | 証明書を要求したユーザーの LDAP ユーザー ID (uid ) 属性。 |
$request.auth_token.userdn$ | 証明書を要求したユーザーのユーザー DN。 |
$request.auth_token.userid$ | 証明書を要求したユーザーのユーザー ID 属性の値。 |
$request.uid$ | 証明書を要求したユーザーのユーザー ID 属性の値。 |
$request.requestor_email$ | 要求を送信したユーザーのメールアドレス。 |
$request.request_name$ | 要求を送信した人。 |
$request.upn$ | Microsoft UPN。これには (UTF8String)1.3.6.1.4.1.311.20.2.3,$request.upn$ の形式があります。 |
$server.source$ | サーバーに対し、サブジェクト名のバージョン 4 の UUID (乱数) コンポーネントを生成するように指示します。この値は常に (IA5String)1.2.3.4,$server.source$ 形式になります。 |
$request.auth_token.user$ | 要求が TPS によって送信された場合に使用します。証明書をリクエストした TPS サブシステム信頼マネージャー。 |
$request.subject$ | 要求が TPS によって送信された場合に使用します。TP S が解決して要求したエンティティーのサブジェクト名 DN。例: cn=John.Smith.123456789,o=TMS Org |
3.7.3. SAN 拡張での CN 属性の使用
dNSName
の Subject Alternative Name (SAN) の値を使用します。
dNSName
値は、既存の SAN に追加されます。
- プロファイルを無効にします。
# pki -c password -p 8080 \ -n "PKI Administrator for example.com" ca-profile-disable profile_name
- プロファイルを編集します。
# pki -c password -p 8080 \ -n "PKI Administrator for example.com" ca-profile-edit profile_name
- プロファイルに固有のセット番号を使用して、以下の設定を追加します。以下に例を示します。
policyset.serverCertSet.12.constraint.class_id=noConstraintImpl policyset.serverCertSet.12.constraint.name=No Constraint policyset.serverCertSet.12.default.class_id=commonNameToSANDefaultImpl policyset.serverCertSet.12.default.name=Copy Common Name to Subject
前述の例では、12 をセット番号として使用しています。 policyset.userCertSet.list
パラメーターに新しいポリシーセット番号を追加します。以下に例を示します。policyset.userCertSet.list=1,10,2,3,4,5,6,7,8,9,12
- プロファイルを保存します。
- プロファイルを有効にします。
# pki -c password -p 8080 \ -n "PKI Administrator for example.com" ca-profile-enable profile_name
commonNameToSANDefaultImpl
のデフォルトが含まれます。
3.7.4. CSR からの SAN 拡張の許可
3.7.4.1. CSR から SAN を取得するプロファイルの設定
caCMCECserverCert
のように、以下のデフォルトおよび制約をプロファイルに追加します。
prefix.constraint.class_id=noConstraintImpl prefix.constraint.name=No Constraint prefix.default.class_id=userExtensionDefaultImpl prefix.default.name=User supplied extension in CSR prefix.default.params.userExtOID=2.5.29.17
3.7.4.2. SAN を使用した CSR の生成
certutil
ユーティリティーを使用して、2 つの SAN を持つ CSR を生成するには、以下を実行します。
# certutil -R -k ec -q nistp256 -d . -s "cn=Example Multiple SANs" --extSAN dns:www.example.com,dns:www.example.org -a -o /root/request.csr.p10
第4章 キーアーカイブおよびリカバリーの設定
4.1. コンソールでのエージェント承認キーリカバリーの設定
CS.cfg
ファイルで直接設定できます。コンソールはデフォルトで Key Recovery Authority Agents グループ
を使用します。
- KRA のコンソールを開きます。以下に例を示します。
pkiconsole https://server.example.com:8443/kra
- 左側のナビゲーションツリーの Key Recovery Authority のリンクをクリックします。
- Required Number of Agents フィールドに、キー復元を承認するのに使用するエージェントの数を入力します。
CS.cfg
ファイルで設定する詳細な方法は、『Red Hat Certificate System 計画、インストール、およびデプロイメントのガイド』の『コマンドラインでのエージェント承認キーリカバリーの設定』を参照してください。
4.2. キーアーカイブおよびリカバリー設定のテスト
- CA の Manual User Signing & Encryption Certificates Enrollment フォームを使用して、二重証明書に登録します。
- 要求を送信します。エージェントサービスページにログインし、要求を承認します。
- エンドエンティティーのページにログインし、証明書が発行されたかどうかを確認します。証明書のリストでは、連続するシリアル番号を持つ新しい証明書が 2 つあります。
- Web ブラウザーに証明書をインポートします。
- 鍵がアーカイブされたことを確認します。KRA のエージェントサービスページで、Show completed requests を選択します。キーが正常にアーカイブされた場合は、そのキーに関する情報が生成されます。キーが表示されない場合は、ログを確認して、問題を修正します。キーが正常にアーカイブされたら、ブラウザーウィンドウを閉じます。
- 鍵を確認します。署名付きで暗号化された電子メールを送信します。メールを受信したら、メッセージを確認して開き、メッセージが署名されて暗号化されているかどうかを確認します。メッセージウィンドウの右上隅に、メッセージが署名されて暗号化されていることを示すセキュリティーアイコンがあるはずです。
- 証明書を削除します。暗号化された電子メールを再度確認します。メールクライアントはメッセージを復号できないはずです。
- アーカイブされた鍵を正常に復元できるかどうかをテストします。
- KRA のエージェントサービスページを開き、Recover Keys リンクをクリックします。キーの所有者、シリアル番号、または公開鍵で鍵を検索します。キーが正常にアーカイブされた場合は、キー情報が表示されます。
- Recover をクリックします。
- 表示される形式で、復元する秘密鍵に対応する base-64 でエンコードされた証明書を入力します。この情報を取得するには CA を使用します。base-64 でエンコードされた証明書を指定してアーカイブされた鍵を検索する場合は、ここで証明書を指定する必要はありません。
- リカバリーの実行中にブラウザーセッションが閉じられるように Async Recovery チェックボックスが選択されていることを確認してください。ヒント非同期リカバリーはデフォルトであり、キーのリカバリーを実行するのに推奨される方法です。同期キーリカバリーを実行する場合、ブラウザーウィンドウはシャットダウンできず、リカバリープロセス中に KRA を停止できません。
- エージェントスキームに応じて、指定された数のエージェントがこの鍵のリカバリーを承認する必要があります。エージェントに、リカバリーキーを検索してもらい、開始された回復を承認してもらいます。
- すべてのエージェントがリカバリーを承認すると、次の画面は、証明書で PKCS #12 ファイルを暗号化するようにパスワードを要求します。
- 次の画面は、復元されたキーペアを含む PKCS #12 ブロブをダウンロードするリンクを返します。リンクに従い、blob をファイルに保存します。重要
gcr-viewer
ユーティリティーでブラウザーから直接 PKCS #12 ファイルを開くと、特定の状況で失敗する可能性があります。この問題を回避するには、gcr-viewer
ファイルをダウンロードし、手動で開きます。
- ブラウザーのデータベースに鍵を復元します。ブラウザーおよびメールクライアントに .p12 ファイルをインポートします。
- テストメールを開きます。メッセージは再度表示されます。
第5章 証明書の要求、登録、および管理
5.1. 証明書の登録および更新について
- 証明書要求 (CSR) が生成されます。
- 証明書要求が CA に送信されます。
- 要求は、要求したエンティティーを認証し、それを提出するために使用された証明書プロファイルのルールを満たしていることを要求が確認することで検証されます。
- リクエストが承認されている。
- 要求側は新しい証明書を取得します。
5.2. 証明書署名リクエストの作成
- コマンドラインユーティリティーを使用した CSR の生成
- 補助ブラウザー内での CSR の生成
- サーバーのインストーラーなど、アプリケーション内での CSR の生成
- コマンドラインユーティリティー
- サーバー側の鍵生成
5.2.1. コマンドラインユーティリティーを使用した 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 を作成する方法を示しています。
- 証明書が要求されるユーザーまたはエンティティーの証明書データベースディレクトリーに移動します。以下に例を示します。
$ cd /user_or_entity_database_directory/
- バイナリー CSR を作成し、これを
/user_or_entity_database_directory/request.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 形式に変換します。
$ BtoA /user_or_entity_database_directory/request-bin.csr /user_or_entity_database_directory/request.csr
- 必要に応じて、CSR ファイルが正しいことを確認します。
$ cat /user_or_entity_database_directory/request.csr MIICbTCCAVUCAQAwKDEQMA4GA1UEChMHRXhhbXBsZTEUMBIGA1UEAxMLZXhhbXBs ...
これは、PKCS#10 PEM 証明書要求です。
5.2.1.1.2. certutil
を使用したユーザー定義拡張による CSR の作成
certutil
ユーティリティーを使用してユーザー定義の拡張で CSR を作成する方法を示しています。
- 証明書が要求されるユーザーまたはエンティティーの証明書データベースディレクトリーに移動します。以下に例を示します。
$ cd /user_or_entity_database_directory/
- ユーザー定義の Extended Key Usage 拡張とユーザー定義の Key Usage 拡張で CSR を作成し、これを
/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 ファイルが正しいことを確認します。
$ cat /user_or_entity_database_directory/request.csr Certificate request generated by NSS 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 証明書要求です。
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 を作成する方法を説明します。
- 証明書が要求されるユーザーまたはエンティティーの証明書データベースディレクトリーに移動します。以下に例を示します。
$ cd /user_or_entity_database_directory/
- CSR を作成し、これを
/user_or_entity_database_directory/request.csr
ファイルに保存します。$ 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 ファイルが正しいことを確認します。
$ 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 共有 Secret 認証方法にのみ使用します。
- 証明書が要求されるユーザーまたはエンティティーの証明書データベースディレクトリーに移動します。以下に例を示します。
$ cd /user_or_entity_database_directory/
- CSR を作成し、これを
/user_or_entity_database_directory/request.csr
ファイルに保存します。$ PKCS10Client -d . -p NSS_password -o /user_or_entity_database_directory/example.csr -y true -n "CN=subject_name"
パラメーターの詳細は、PKCS10Client(1) の man ページを参照してください。 - 必要に応じて、CSR ファイルが正しいことを確認します。
$ cat /user_or_entity_database_directory/example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
5.2.1.3. CRMFPopClient
を使用した CSR の作成
CRMFPopClient
ユーティリティーを使用して CSR を作成する方法を説明します。
CRMFPopClient
の詳細な使用方法は、CRMFPopClient(1) の man ページを参照してください。
5.2.1.3.1. CRMFPopClient
を使用したキー Archival を持つ CSR の作成
CRMFPopClient
ユーティリティーを使用して RSA キーペアと、鍵アーカイブオプションで CSR を作成する方法を説明します。
- 証明書が要求されるユーザーまたはエンティティーの証明書データベースディレクトリーに移動します。以下に例を示します。
$ cd /user_or_entity_database_directory/
- KRA トランスポート証明書を取得します。
$ 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 トランスポート証明書をエクスポートします。
$ pki ca-cert-show 0x7 --output kra.transport
- CSR を作成し、これを
/user_or_entity_database_directory/request.csr
ファイルに保存します。$ CRMFPopClient -d . -p password -n "cn=subject_name" -q POP_SUCCESS -b kra.transport -w "AES/CBC/PKCS5Padding" -v -o /user_or_entity_database_directory/example.csr
Elliptic Curve (EC) キーペアと CSR を作成するには、-a ec -t false
オプションをコマンドに渡します。パラメーターの詳細は、CRMFPopClient(1) の man ページを参照してください。 - 必要に応じて、CSR ファイルが正しいことを確認します。
$ 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 共有 Secret 認証方法にのみ使用します。
- 証明書が要求されるユーザーまたはエンティティーの証明書データベースディレクトリーに移動します。以下に例を示します。
$ cd /user_or_entity_database_directory/
- KRA トランスポート証明書を取得します。
$ 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 トランスポート証明書をエクスポートします。
$ pki ca-cert-show 0x7 --output kra.transport
- CSR を作成し、これを
/user_or_entity_database_directory/request.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 ファイルが正しいことを確認します。
$ 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 要求の両方を生成できます。
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 crmf
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
5.2.2. サーバー側の鍵生成を使用した CSR の生成
CRMFPopClient
(CR MFPopClient--help を参照) または pki
(pki client-cert-request --help を参照) などの CLI を回避策として使用することができます。
5.2.2.1. 主な機能
- 証明書要求キーは KRA で生成されます (注: CA と連携するには、KRA をインストールする必要があります)。
- プロファイルのデフォルトプラグイン
serverKeygenUserKeyDefaultImpl
は、キーアーカイブ (つまり enableArchival パラメーター) を有効または無効にするための選択を提供します。 - RSA 鍵と EC 鍵の両方のサポート
- 手動 (エージェント) 承認と自動承認 (ディレクトリーパスワードベースなど) の両方のサポート
5.2.2.2. Server-Side Keygen を使用した証明書の登録
サーバー側の鍵の生成を使用した手動ユーザーのデュアル使用証明書登録
図5.1 エージェントの手動による承認を必要とするサーバー側のキータイプの登録

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

- 手動承認の場合、PKCS#12 ファイルは要求を承認する CA エージェントに返されます。その後、エージェントは PKCS#12 ファイルをユーザーに転送することが期待されます。
- 自動承認の場合、PKCS#12 ファイルはリクエストを送信したユーザーに返されます。
図5.3 エージェントによる手動による登録

pkcs12util
インポートするなどの CLI を使用できます。たとえば、ユーザーの Firefox nss データベースです。
5.2.2.3. キーリカバリー
5.2.2.4. 追加情報
5.2.2.4.1. KRA 要求レコード
- 要求タイプ asymkeyGenRequest の 1 つこの要求タイプは、KRA エージェントページの List Requests を使用してフィルターすることはできません。Show All Requests を選択して、一覧を表示できます。
- 要求タイプの リカバリー の場合
5.2.2.4.2. 監査レコード
- SERVER_SIDE_KEYGEN_ENROLL_KEYGEN_REQUEST
- SERVER_SIDE_KEYGEN_ENROLL_KEY_RETRIEVAL_REQUEST
- SERVER_SIDE_KEYGEN_ENROLL_KEYGEN_REQUEST_PROCESSED
- SERVER_SIDE_KEYGEN_ENROLL_KEY_RETRIEVAL_REQUEST_PROCESSED (まだ実装されていません)
5.3. 証明書を登録する Internet Explorer の設定
5.3.1. キー制限および Internet Explorer について
表5.1 プロバイダーおよびキーサイズ
アルゴリズム | プロバイダー | サポート対象のキーサイズ |
---|---|---|
ECC | Microsoft Software Key Storage Provider |
|
ECC | Microsoft Smart Card Key Storage Provider |
|
RSA | Microsoft Base Cryptographic Provider |
|
RSA | Microsoft Strong Cryptographic Provider |
|
RSA | Enhanced Cryptographic Provider |
|
RSA | Microsoft Software Key Storage Provider |
|
5.3.2. Internet Explorer の設定
- Internet Explorer を開きます。
- Tools → Internet Options → Advanced → Security を開き、TLS 1.2 の選択を解除します。
- CA 証明書チェーンをインポートします。
- CA のセキュアでない終了サービスページを開きます。以下に例を示します。
http://server.example.com:8080/ca/ee/ca
- Retrieval タブをクリックします。
- 左側のメニューで Import CA Certificate Chain をクリックし、Download the CA certificate chain in binary form を選択します。
- プロンプトが表示されたら、CA 証明書チェーンファイルを保存します。
- Internet Explorer メニューで Tools をクリックし、Internet Options を選択します。
- Content タブを開き、Certificates ボタンをクリックします。
- インポートボタン をクリックします。インポートウィンドウで、インポートした証明書チェーンを参照し、選択します。インポートプロセスは、CA 証明書チェーンに使用する証明書ストアを要求します。Automatically select the certificate store based on the type of certificate を選択します。
- 証明書チェーンをインポートしたら、Trusted Root Certificate Authorities タブを開いて、証明書チェーンが正常にインポートされたことを確認します。
- Internet Explorer を設定して、スクリプトに安全でない DOM 制御を使用できるように要求します。これが許可されておらず、エンドエンティティーが証明書を標準 (非 SSL) エンドエンティティーページに登録しようとすると、Internet Explorer はこれらのページをブロックします。
- Internet Explorer メニューで Tools をクリックし、Internet Options を選択します。
- セキュリティー タブを開き、カスタムレベル をクリックします。
- ActiveX Controls and Plugins 領域で、Initialize and script ActiveX controls not marked as safe 設定の値を、Prompt に変更します。
- 証明書チェーンをインポートした後、Internet Explorer はセキュアなサービスページにアクセスできます。セキュアなサイトを開きます。以下に例を示します。
https://server.example.com:8443/ca/ee/ca
- エンドサービスページを開く際に、セキュリティー例外が発生する可能性があります。CA サービスサイトを Internet Explorer の Trusted Sites 一覧に追加します。
- Internet Explorer メニューで Tools をクリックし、Internet Options を選択します。
- Security タブを開き、Sites をクリックして CA サイトを信頼できる一覧に追加します。
- CA サービスページに対する Security level for this zone スライダーを、Medium-High に設定します。このセキュリティー設定が今後制限すぎる場合は、それを Medium にリセットしてください。
- Tools → Compatibility View and Compatibility View Settings を開いて、特定のサイトをリストに追加して Compatibility View 設定を有効にします。
- ブラウザーを閉じます。
5.4. 証明書の要求および受信
5.4.1. End-Entities ページでの証明書の要求および受信

- 証明書要求のタイプ。これは PKCS#10 または CRMF です。サブシステム管理コンソールを介して作成された証明書要求は PKCS#10 です。certutil ツールを通じて作成されたものやその他のユーティリティーは通常 PKCS #10 です。
- 証明書要求。-----BEGIN NEW CERTIFICATE REQUEST----- および -----END NEW CERTIFICATE REQUEST----- 行を含む、ベース 64 でエンコードされた Blob を貼り付けます。
- Requester Name。これは、証明書を要求するユーザーの共通名です。
- Requester Email。これは、要求側のメールアドレスです。エージェントまたは CA システムは、このアドレスを使用して、証明書を発行する際に要求側に接続します。例: jdoe@someCompany.com
- Requester Phone。これは、要求側の連絡先番号です。
- Certificate Manager の end-entities ページを開きます。以下に例を示します。
http
s
://server.example.com:8443/ca/ee/ca
- Retrieval タブをクリックします。
- 証明書要求の送信時に作成された要求 ID 番号を入力し、Submit をクリックします。
- 次のページには、証明書要求のステータスが表示されます。ステータスが complete すると、証明書へのリンクがあります。Issued certificate のリンクをクリックします。
- 新しい証明書情報は、pretty-print 形式、base-64 エンコード形式、および PKCS #7 形式で表示されます。このページでは、以下のアクションを実行できます。
- この証明書をサーバーまたは他のアプリケーションにインストールするには、base-64 でエンコードされた証明書が含まれている Installing This Certificate in a Server セクションまで下にスクロールします。
- base-64 でエンコードされた証明書 (マーカー行 -----BEGIN CERTIFICATE----- および -----END CERTIFICATE----- を含む) をテキストファイルにコピーします。テキストファイルを保存し、これを使用して秘密鍵があるエンティティーのセキュリティーモジュールに証明書のコピーを保存します。「ユーザーの作成」を参照してください。
5.5. 証明書の更新
- 同じキーの更新 は、証明書の元のキー、プロファイル、および要求を受け取り、同じキーを使用して、新しい有効期間と有効期限で新しい証明書を再作成します。これは、以下のいずれかの方法で実行できます。
- 元のプロファイルから元の証明書要求 (CSR) の再送信、または
- certutil などのサポートツールを使用した元のキーで CSR の再生成
- 証明書の キーを再生成 するには、同じ情報を使用して証明書要求を再生成する必要があるため、新しいキーペアが生成されます。その後、CSR は元のプロファイルを介して送信されます。
5.5.1. 同じキーの更新
5.5.1.1. CSR の再利用
- エージェントが承認した方法では、更新する証明書のシリアル番号を送信する必要があります。この方法では、CA エージェントの承認が必要になります。
- ディレクトリーベースの更新では、更新する証明書のシリアル番号を送信する必要があり、CA は現在の証明書ディレクトリーエントリーから情報を取得します。ldap uid/pwd が正常に認証されると、証明書は自動的に承認されます。
- 証明書ベースの更新は、ブラウザーデータベースの証明書を使用して認証し、同じ証明書を再発行します。
5.5.1.1.1. エージェントによる承認またはディレクトリーベースの更新
- 証明書 (またはそのクローン) の CA のエンドエンティティーサービスページを開きます。
http
s
://server.example.com:8443/ca/ee/ca
- 使用する更新フォームの名前をクリックします。
- 更新する証明書のシリアル番号を入力します。これは、10 進数または 16 進数の形式にすることができます。
- 更新ボタンをクリックします。
- リクエストが送信されます。ディレクトリーベースの更新では、更新された証明書が自動的に返されます。それ以外の場合、更新リクエストはエージェントにより承認されます。
5.5.1.1.2. 証明書ベースの更新
- 証明書 (またはそのクローン) の CA のエンドエンティティーサービスページを開きます。
http
s
://server.example.com:8443/ca/ee/ca
- 使用する更新フォームの名前をクリックします。
- 入力フィールドがないため、Renew ボタンをクリックします。
- プロンプトが表示されたら、更新する証明書を選択します。
- 要求が送信され、更新された証明書が自動的に返されます。
5.5.1.2. 同じキーを持つ CSR を生成して更新
certutil
ツールを使用して、キーペアが NSS データベースにある場合に、同じキーで CSR を再生成できます。これは、次の手順で実行できます。
- NSS データベースで、対応するキー ID を検索します。
Certutil -d <nssdb dir> -K
- 特定のキーを使用して CSR を生成します。
Certutil -d <nssdb dir> -R -k <key id> -s <subject DN> -o <CSR output file>
- 既存のニックネームを使用して CSR を生成します。
Certutil -d <nssdb dir> -R -k <nickname> -s <subject DN> -o <CSR output file>
5.5.2. 証明書のキー変更による更新
5.6. CMC を使用した証明書要求の送信
- 『Red Hat Certificate System 計画、インストール、およびデプロイメントのガイド』 の 『CMC の設定』 セクションを参照してください。
- 『Red Hat Certificate System 計画、インストール、およびデプロイメントのガイド』 の 『CMC を使用した登録』 セクション
- CMCRequest(1) の man ページを参照してください。
- CMCResponse(1) の man ページを参照してください。
5.6.1. CMC 登録の使用
.cfg
入力ファイルに指定されるすべての設定が設定されます。
CMCRequest /path/to/file.cfg
CMCEnroll -d /agent's/certificate/directory -h password -n cert_nickname -r certrequest.file -p certDB_passwd [-c "comment"]
CMCEnroll(1)
の man ページで説明されています。
5.6.1.1. CMCEnroll のテスト
- certutil ツールを使用して証明書要求を作成します。
- PKCS #10 ASCII 出力をテキストファイルにコピーします。
- CMCEnroll ユーティリティーを実行します。たとえば、入力ファイルが
request34.txt
を呼び出すと、エージェント証明書はブラウザーデータベースに保存され、エージェント証明書の証明書の一般名は CertificateManagerAgentsCert で、および証明書データベースのパスワードは secret で、コマンドは次のとおりです。CMCEnroll -d ~jsmith/.mozilla/firefox/1234.jsmith -n "CertificateManagerAgentsCert" -r /export/requests/request34.txt -p secret
このコマンドの出力は、ファイル名に加えられた .out で同じファイル名のファイルに保存されます。 - エンドエンティティーを通じて署名済み証明書を提出します。
- エンドエンティティーを開きます。
http
s
://server.example.com:8443/ca/ee/ca
- 証明書プロファイルのリストから CMC 登録フォームを選択します。
- 出力ファイルの内容をこの形式の Certificate Request テキスト領域に貼り付けます。
- 貼り付けられたコンテンツから -----BEGIN NEW CERTIFICATE REQUEST----- および ----END NEW CERTIFICATE REQUEST----- を削除します。
- 連絡先情報を入力して、フォームに入力します。
- 証明書は即座に処理され、返されます。
- エージェントページを使用して、新しい証明書を検索します。
5.6.2. CMC 登録プロセス
- Certificate Signing Request (CSR) を、以下のいずれかの形式で作成します。
- PKCS #10 形式
- Certificate Request Message Format (CRMF) 形式
これらの形式で CSR を作成する方法は、「証明書署名リクエストの作成」 を参照してください。 - 管理証明書をクライアントの NSS データベースにインポートします。以下に例を示します。
- 以下のコマンドを実行して、
.p12
ファイルから管理クライアント証明書を抽出します。$
openssl pkcs12 -in /root/.dogtag/instance/ca_admin_cert.p12 -clcerts -nodes -nokeys -out /root/.dogtag/instance/ca_admin_cert.crt - 『Red Hat Certificate System 計画、インストール、およびデプロイメントのガイド』の『証明書/キー暗号化トークンの管理』セクションに従って、管理クライアント証明書の検証およびインポートを行います。
$
PKICertImport -d . -n "CA Admin - Client Certificate" -t ",," -a -i /root/.dogtag/instance/ca_admin_cert.crt -u C重要CA 管理クライアント証明書をインポートする前に、中間証明書とルート CA 証明書がインポートされていることを確認します。 - 証明書に関連付けられた秘密鍵をインポートします。
$ pki -c password pkcs12-import --pkcs12-file /root/.dogtag/instance/ca_admin_cert.p12 --pkcs12-password-file /root/.dogtag/instance/ca/pkcs12_password.conf
- 以下の内容で、
/home/user_name/cmc-request.cfg
などの CMC 要求用の設定ファイルを作成します。# NSS database directory where CA agent certificate is stored dbdir=/home/user_name/.dogtag/nssdb/ # NSS database password password=password # Token name (default is internal) tokenname=internal # Nickname for signing certificate nickname=subsystem_admin # Request format: pkcs10 or crmf format=pkcs10 # Total number of PKCS10/CRMF requests numRequests=1 # Path to the PKCS10/CRMF request # The content must be in Base-64 encoded format. # Multiple files are supported. They must be separated by space. input=/home/user_name/file.csr # Path for the CMC request output=/home/user_name/cmc-request.bin
詳細は、CMCRequest(1) の man ページを参照してください。 - CMC 要求を作成します。
$ CMCRequest /home/user_name/cmc-request.cfg
コマンドが成功すると、CMCRequest ユーティリティーは、要求設定ファイルのoutput
パラメーターで指定されたファイルに CMC 要求を保存します。 /home/user_name/cmc-submit.cfg
などのHttpClient
の設定ファイルを作成します。このファイルは、後で CMC 要求を CA に送信します。作成されたファイルに以下の内容を追加します。# PKI server host name host=server.example.com # PKI server port number port=8443 # Use secure connection secure=true # Use client authentication clientmode=true # NSS database directory where the CA agent certificate is stored. dbdir=/home/user_name/.dogtag/nssdb/ # NSS database password password=password # Token name (default: internal) tokenname=internal # Nickname of signing certificate nickname=subsystem_admin # Path for the CMC request input=/home/user_name/cmc-request.bin # Path for the CMC response output=/home/user_name/cmc-response.bin
重要nickname
パラメーターで指定された証明書のニックネームは、CMC 要求で以前使用された内容と一致させる必要があります。- 要求する証明書のタイプに応じて、前の手順で作成した設定ファイルに次のパラメーターを追加します。
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=profile_name
CA 署名証明書の場合の例を以下に示します。servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCcaCert
重要エージェントが次のステップで CMC 要求を送信する場合は、このパラメーターで指定したプロファイルはCMCAuth
認証プラグインを使用する必要があります。ユーザーが作成した登録では、プロファイルはCMCUserSignedAuth
プラグインを使用する必要があります。詳細は、「CMC 認証プラグイン」 を参照してください。 - CMC 要求を CA に送信します。
$ HttpClient /home/user_name/cmc-submit.cfg
- CMC の応答を PKCS #7 証明書チェーンに変換するには、
CMCResponse
ユーティリティーの-i
パラメーターに CMC レスポンスファイルを渡します。以下に例を示します。$ CMCResponse -i /home/user_name/cmc-response.bin -o /home/user_name/cert_chain.crt
5.6.3. 実用的な CMC 登録シナリオ
5.6.3.1. システム証明書およびサーバー証明書の取得
- 登録プロファイル
- エージェントは、「CMC 認証プラグイン」 にリストされている既存の CMC プロファイルのいずれかを使用する必要があります。または、
CMCAuth
認証メカニズムを使用するカスタムプロファイルを作成します。 - CMC 署名証明書
- システム証明書の場合、CA エージェントは CMC 要求を生成して署名する必要があります。そのためには、
CMCRequest
設定ファイルのnickname
パラメーターを CA エージェントのニックネームに設定します。注記CA エージェントは、独自の秘密鍵にアクセスできるようにする必要があります。 HttpClient
TLS Client NicknameHttpClient
の設定ファイル内で TLS クライアント認証に関するユーティリティーの設定ファイルに対して、CMCRequest
ユーティリティー設定ファイルへのサインインに同じ証明書を使用します。httpclient
servlet
パラメーターHttpClient
ユーティリティーに渡される設定ファイルのservlet
では、要求を処理する CMC サーブレットおよび登録プロファイルが参照されます。要求する証明書のタイプに応じて、直前の手順で作成した設定ファイルに以下のエントリーのいずれかを追加します。- CA 署名証明書の場合:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCcaCert
- KRA トランスポート証明書の場合:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCkraTransportCert
- OCSP 署名証明書の場合:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCocspCert
- 監査署名証明書の場合:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCauditSigningCert
- サブシステム証明書の場合:
- RSA 証明書の場合:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCsubsystemCert
- ECC 証明書の場合:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCECCsubsystemCert
- TLS サーバー証明書の場合:
- RSA 証明書の場合:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCserverCert
- ECC 証明書の場合:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCECCserverCert
- 管理証明書の場合:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caFullCMCUserCert
- エージェントが CSR を事前署名する場合、エージェントは識別のために CSR を調べるため、Proof of Identification が確立されたと見なされます。追加の CMC 固有の識別証明は必要ありません。
- PKCS #10 ファイルはすでに Proof of Possession (POP) 情報を提供し、追加の Proof of Possession (POP) は必要ありません。
- エージェントの事前承認済みリクエストでは、識別はエージェントによってチェックされるため、
PopLinkWittnessV2
機能を無効にする必要があります。
5.6.3.2. ユーザーの初回署名証明書の取得
- エージェントは CMC 要求を署名します。「エージェント証明書を使用した CMC 要求の署名」 を参照してください。
- 証明書の登録は、共有シークレットを使用して認証されます。「共有シークレットを使用した証明書の登録の認証」 を参照してください。
5.6.3.2.1. エージェント証明書を使用した CMC 要求の署名
5.6.3.2.2. 共有シークレットを使用した証明書の登録の認証
- ユーザーまたは CA 管理者として共有トークンを作成します。詳細は、『Red Hat Certificate System 計画、インストール、およびデプロイメントのガイド』の『共有シークレットトークンの作成』セクションを参照してください。以下の点に留意してください。
- ユーザーがトークンを作成した場合、ユーザーはトークンを CA 管理者に送信する必要があります。
- CA 管理者がトークンを作成した場合、管理者はユーザーがトークンを生成するのに使用するパスワードを共有する必要があります。セキュアな方法でパスワードを送信します。
- CA 管理者として、LDAP のユーザーエントリーに Shared Token を追加します。詳細は、「証明書の登録用ユーザーエントリーへの CMC 共有シークレットの追加」 と、『Red Hat Certificate System 計画、インストール、およびデプロイメントのガイド』 の 『CMC 共有シークレット機能の有効化』セクションを参照してください。
CMCRequest
ユーティリティーに渡される設定ファイルで以下のパラメーターを使用します。identification.enable
witness.sharedSecret
identityProofV2.enable
identityProofV2.hashAlg
identityProofV2.macAlg
request.useSharedSecret
request.privKeyId
- CA で必要な場合は、
CMCRequest
ユーティリティーに渡される設定ファイルで以下のパラメーターも使用します。popLinkWitnessV2.enable
popLinkWitnessV2.keyGenAlg
popLinkWitnessV2.macAlg
5.6.3.3. ユーザーの暗号化のみの証明書の取得
- Network Security Services (NSS) データベースまたはユーザーの署名証明書および鍵が含まれるスマートカードに保存されている暗号化トークンを使用します。
- PKCS #10 形式または CRMF 形式で CSR を生成します。注記(キーのアーカイブが必要な場合は) CRMF 形式を使用してください。
- CMC 要求を生成します。これは暗号のみの証明書であるため、秘密鍵は署名できません。そのため、Proof Of Possession (POP) は含まれていません。このため、登録には、2 つの手順が必要です。最初のリクエストが成功すると、
EncryptedPOP
制御のある CMC 状態が生じます。次に、ユーザーは応答を使用して、DecryptedPOP
制御を含む CMC 要求を生成し、2 番目のステップで送信します。- 最初のステップでは、デフォルトのパラメーターに加えて、ユーザーは、
CMCRequest
ユーティリティーに渡される設定ファイルに次のパラメーターを設定する必要があります。identification.enable
witness.sharedSecret
identityProofV2.enable
identityProofV2.hashAlg
identityProofV2.macAlg
popLinkWitnessV2.enable
(CA で必要な場合)popLinkWitnessV2.keyGenAlg
(CA で必要な場合)popLinkWitnessV2.macAlg
(CA で必要な場合)request.privKeyId
詳細は、CMCRequest(1) の man ページを参照してください。応答には以下が含まれます。- CMC で暗号化された POP コントロール
- POP の required エラーでの
CMCStatusInfoV2
コントロール - リクエスト ID
- 次のステップでは、デフォルトのパラメーターに加えて、ユーザーは、
CMCRequest
ユーティリティーに渡される設定ファイルに次のパラメーターを設定する必要があります。decryptedPop.enable
encryptedPopResponseFile
decryptedPopRequestFile
request.privKeyId
詳細は、CMCRequest(1) の man ページを参照してください。
5.6.3.3.1. キーアーカイブを使用した暗号化のみの証明書の取得例
-q POP_NONE
の代わりに -q POP_SUCCESS
オプションを、単一トリップ発行のために CRMFPopClient
ユーティリティーに渡します。
CRMFPoPClient
を使用する方法は、「CRMFPopClient
を使用したキー Archival を持つ CSR の作成」 および 「CRMFPopClient
を使用した SharedSecret ベースの CMC の CSR の作成」 を参照してください。
- KRA トランスポート証明書を検索します。以下に例を示します。
$ pki cert-find --name KRA_transport_certificate_subject_CN
- 前の手順で取得した KRA トランスポート証明書のシリアル番号を使用して、証明書をファイルに保存します。たとえば、
/home/user_name/kra.cert
ファイルに 12345 シリアル番号がある証明書を保存するには、次のコマンドを実行します。$ pki cert-show 12345 --output /home/user_name/kra.cert
CRMFPopClient
ユーティリティーを使用して以下を行います。- キーアーカイブを使用して CSR を作成します。
- 証明書が要求されるユーザーまたはエンティティーの証明書データベースディレクトリーに移動します。以下に例を示します。
$ cd /home/user_name/
- RSA 秘密鍵が KRA トランスポート証明書によりラップされる CRMF 要求を作成するには、
CRMFPopClient
ユーティリティーを使用します。たとえば、要求を/home/user_name/crmf.req
ファイルに保存するには、以下のコマンドを実行します。$ CRMFPopClient -d . -p token_password -n subject_DN -q POP_NONE \ -b /home/user_name/kra.cert -w "AES/CBC/PKCS5Padding" \ -v -o /home/user_name/crmf.req
コマンドで表示される秘密鍵の ID をメモします。ID は、2 番目のトリップの設定ファイルのrequest.privKeyId
パラメーターの値として、後のステップで必要になります。
- 以下の内容を含む、
/home/user_name/cmc.cfg
など、CRMRequest
ユーティリティー用の設定ファイルを作成します。#numRequests: Total number of PKCS10 requests or CRMF requests. numRequests=1 #input: full path for the PKCS10 request or CRMF request, #the content must be in Base-64 encoded format input=/home/user_name/crmf.req #output: full path for the CMC request in binary format output=/home/user_name/cmc.req #tokenname: name of token where agent signing cert can be found #(default is internal) tokenname=internal #nickname: nickname for user certificate which will be used #to sign the CMC full request. nickname=signing_certificate #dbdir: directory for cert8.db, key3.db and secmod.db dbdir=/home/user_name/.dogtag/nssdb/ #password: password for cert8.db which stores the agent certificate password=password #format: request format, either pkcs10 or crmf format=crmf
- CMC 要求を作成します。
$ CMCRequest /home/user_name/cmc.cfg
コマンドが成功すると、CMCRequest ユーティリティーは、要求設定ファイルのoutput
パラメーターで指定されたファイルに CMC 要求を保存します。 /home/user_name/cmc-submit.cfg
などのHttpClient
の設定ファイルを作成します。このファイルは、後で CMC 要求を CA に送信します。作成されたファイルに以下の内容を追加します。#host: host name for the http server host=server.example.com #port: port number port=8443 #secure: true for secure connection, false for nonsecure connection secure=true #input: full path for the enrollment request, the content must be in #binary format input=/home/user_name/cmc.req #output: full path for the response in binary format output=/home/user_name/cmc-response_round_1.bin #tokenname: name of token where TLS client authentication cert can be found #(default is internal) #This parameter will be ignored if secure=false tokenname=internal #dbdir: directory for cert8.db, key3.db and secmod.db #This parameter will be ignored if secure=false dbdir=/home/user_name/.dogtag/nssdb/ #clientmode: true for client authentication, false for no client authentication #This parameter will be ignored if secure=false clientmode=true #password: password for cert8.db #This parameter will be ignored if secure=false and clientauth=false password=password #nickname: nickname for client certificate #This parameter will be ignored if clientmode=false nickname=signing_certificate #servlet: servlet name servlet=/ca/ee/ca/profileSubmitUserSignedCMCFull?profileId=caFullCMCUserSignedCert
- CMC 要求を CA に送信します。
$ HttpClient /home/user_name/cmc-submit.cfg
コマンドが成功すると、HTTPClient ユーティリティーは、CMC 応答を、設定ファイルのoutput
パラメーターで指定されたファイルに保存します。 - 応答ファイルを
CMCResponse
ユーティリティーに渡して応答を確認します。以下に例を示します。$ CMCResponse -d /home/user_name/.dogtag/nssdb/ -i /home/user_name/cmc-response_round_1.bin
最初のトリップが成功した場合は、CMCResponse
は、以下のような出力を表示します。Certificates: Certificate: Data: Version: v3 Serial Number: 0x1 Signature Algorithm: SHA256withRSA - 1.2.840.113549.1.1.11 Issuer: CN=CA Signing Certificate,OU=pki-tomcat,O=unknown00262DFC6A5E Security Domain Validity: Not Before: Wednesday, May 17, 2017 6:06:50 PM PDT America/Los_Angeles Not After: Sunday, May 17, 2037 6:06:50 PM PDT America/Los_Angeles Subject: CN=CA Signing Certificate,OU=pki-tomcat,O=unknown00262DFC6A5E Security Domain ... Number of controls is 3 Control #0: CMC encrypted POP OID: {1 3 6 1 5 5 7 7 9} encryptedPOP decoded Control #1: CMCStatusInfoV2 OID: {1 3 6 1 5 5 7 7 25} BodyList: 1 OtherInfo type: FAIL failInfo=POP required Control #2: CMC ResponseInfo requestID: 15
- 2 番目のトリップの場合は、後の手順で使用する
/home/user_name/cmc_DecryptedPOP.cfg
などのDecryptedPOP
の設定ファイルを作成します。作成されたファイルに以下の内容を追加します。#numRequests: Total number of PKCS10 requests or CRMF requests. numRequests=1 #input: full path for the PKCS10 request or CRMF request, #the content must be in Base-64 encoded format #this field is actually unused in 2nd trip input=/home/user_name/crmf.req #output: full path for the CMC request in binary format #this field is actually unused in 2nd trip output=/home/user_name/cmc2.req #tokenname: name of token where agent signing cert can be found #(default is internal) tokenname=internal #nickname: nickname for agent certificate which will be used #to sign the CMC full request. nickname=signing_certificate #dbdir: directory for cert8.db, key3.db and secmod.db dbdir=/home/user_name/.dogtag/nssdb/ #password: password for cert8.db which stores the agent #certificate password=password #format: request format, either pkcs10 or crmf format=crmf decryptedPop.enable=true encryptedPopResponseFile=/home/user_name/cmc-response_round_1.bin request.privKeyId=-25aa0a8aad395ebac7e6a19c364f0dcb5350cfef decryptedPopRequestFile=/home/user_name/cmc.DecryptedPOP.req
DecryptPOP
CMC 要求を作成します。$ CMCRequest /home/user_name/cmc.DecryptedPOP.cfg
コマンドが成功すると、CMCRequest ユーティリティーは、要求設定ファイルのdecryptedPopRequestFile
パラメーターで指定されたファイルに CMC 要求を保存します。/home/user_name/decrypted_POP_cmc-submit.cfg
などのHttpClient
の設定ファイルを作成します。このファイルは、後でDecryptedPOP
CMC 要求を CA に送信します。作成されたファイルに以下の内容を追加します。#host: host name for the http server host=server.example.com #port: port number port=8443 #secure: true for secure connection, false for nonsecure connection secure=true #input: full path for the enrollment request, the content must be in binary format input=/home/user_name/cmc.DecryptedPOP.req #output: full path for the response in binary format output=/home/user_name/cmc-response_round_2.bin #tokenname: name of token where TLS client authentication cert can be found (default is internal) #This parameter will be ignored if secure=false tokenname=internal #dbdir: directory for cert8.db, key3.db and secmod.db #This parameter will be ignored if secure=false dbdir=/home/user_name/.dogtag/nssdb/ #clientmode: true for client authentication, false for no client authentication #This parameter will be ignored if secure=false clientmode=true #password: password for cert8.db #This parameter will be ignored if secure=false and clientauth=false password=password #nickname: nickname for client certificate #This parameter will be ignored if clientmode=false nickname=singing_certificate #servlet: servlet name servlet=/ca/ee/ca/profileSubmitUserSignedCMCFull?profileId=caFullCMCUserCert
Decrypted
CMC 要求を CA に送信します。$ HttpClient /home/user_name/decrypted_POP_cmc-submit.cfg
コマンドが成功すると、HTTPClient ユーティリティーは、CMC 応答を、設定ファイルのoutput
パラメーターで指定されたファイルに保存します。- CMC の応答を PKCS #7 証明書チェーンに変換するには、
CMCResponse
ユーティリティーの-i
パラメーターに CMC レスポンスファイルを渡します。以下に例を示します。$ CMCResponse -i /home/user_name/cmc-response_round_2.bin -o /home/user_name/certs.p7
または、個々の証明書を PEM 形式で表示するには、-v
ユーティリティーに渡します。次のトリップが成功した場合は、CMCResponse
は、以下のような出力を表示します。Certificates: Certificate: Data: Version: v3 Serial Number: 0x2D Signature Algorithm: SHA256withRSA - 1.2.840.113549.1.1.11 Issuer: CN=CA Signing Certificate,OU=pki-tomcat,O=unknown00262DFC6A5E Security Domain Validity: Not Before: Thursday, June 15, 2017 3:43:45 PM PDT America/Los_Angeles Not After: Tuesday, December 12, 2017 3:43:45 PM PST America/Los_Angeles Subject: CN=user_name,UID=example,OU=keyArchivalExample ... Number of controls is 1 Control #0: CMCStatusInfo OID: {1 3 6 1 5 5 7 7 1} BodyList: 1 Status: SUCCESS
5.7. 一括発行の実行
- このプロセスはスクリプト化されているため、CA (ホスト、ポート) と、認証に使用されるアイテム (エージェント証明書と証明書データベースおよびパスワード) を識別するために複数の変数を設定する必要があります。たとえば、ターミナルでエクスポートして、セッションに以下の変数を設定します。
export d=/var/tmp/testDir export p=password export f=/var/tmp/server.csr.txt export nick="CA agent cert" export cahost=1.2.3.4 export caport=8443
注記ローカルシステムには、エージェントの証明書を持つ有効なセキュリティーデータベースが必要です。データベースを設定するには、以下を行います。- ブラウザーからエージェントユーザー証明書および鍵をエクスポートまたはダウンロードし、
agent.p12
などのファイルに保存します。 - 必要に応じて、セキュリティーデータベース用の新しいディレクトリーを作成します。
mkdir ${d}
- 必要な場合は、新規セキュリティーデータベースを作成します。
certutil -N -d ${d}
- Certificate System インスタンスを開きます。
systemctl stop pki-tomcatd@instance_name.service
- pk12util を使用して証明書をインポートします。
# pk12util -i /tmp/agent.p12 -d ${d} -W p12filepassword
手順に成功すると、コマンドは以下の出力を出力します。pk12util: PKCS12 IMPORT SUCCESSFUL
- Certificate System インスタンスを開きます。
systemctl start pki-tomcatd@instance_name.service
- 2 つの追加の変数を設定する必要があります。要求の処理に使用される CA プロファイルを識別する変数、およびプロファイルフォームの情報を提供するための post ステートメントの送信に使用される変数。
export post="cert_request_type=pkcs10&xmlOutput=true&profileId=caAgentServerCert&cert_request=" export url="/ca/ee/ca/profileSubmitSSLClient"
注記この例では、証明書要求を caAgentServerCert プロファイルに送信します (ただし、post ステートメントの profileId 要素で識別されます)。カスタムプロファイルを含む任意の証明書プロファイルを使用できます。 - 変数設定をテストします。
echo ${d} ${p} ${f} ${nick} ${cahost} ${caport} ${post} ${url}
- (この例では) PKCS10Client を使用して証明書要求を生成します。
time for i in {1..10}; do /usr/bin/PKCS10Client -d ${d} -p ${p} -o ${f}.${i} -s "cn=testms${i}.example.com"; cat ${f}.${i} >> ${f}; done perl -pi -e 's/\r\n//;s/\+/%2B/g;s/\//%2F/g' ${f} wc -l ${f}
- CA のステータスとトランザクションログを確認します。
/etc/init.d/pki-ca status tail -f /var/log/pki-ca/transactions&
- 手順 4 で作成した一括証明書要求ファイルを、sslget を使用する CA プロファイルインターフェイスに送信します。以下に例を示します。
cat ${f} | while read thisreq; do /usr/bin/sslget -n "${nick}" -p ${p} -d ${d} -e ${post}${thisreq} -v -r ${url} ${cahost}:${caport}; done
5.8. Cisco ルーターでの証明書の登録
5.8.1. SCEP 登録の有効化
- 設定ファイルを編集できるように CA サーバーを停止します。
systemctl stop pki-tomcatd@instance_name.service
- CA の
CS.cfg
ファイルを開きます。vim
/var/lib/pki/instance_name/ca/conf/CS.cfg
ca.scep.enable
を true に設定します。パラメーターが存在しない場合は、パラメーターで行を追加します。ca.scep.enable=true
- CA サーバーを起動します。
systemctl start pki-tomcatd@instance_name.service
5.8.2. SCEP のセキュリティー設定の設定
表5.2 SCEP セキュリティーの設定パラメーター
パラメーター | 説明 |
---|---|
ca.scep.encryptionAlgorithm | デフォルトまたは優先暗号化アルゴリズムを設定します。 |
ca.scep.allowedEncryptionAlgorithms | 許可される暗号化アルゴリズムのコンマ区切りリストを設定します。 |
ca.scep.hashAlgorithm | デフォルトまたは優先ハッシュアルゴリズムを設定します。 |
ca.scep.allowedHashAlgorithms | 許可されるハッシュアルゴリズムのコンマ区切りリストを設定します。 |
ca.scep.nickname | SCEP 通信に使用する証明書のニックネームを指定します。このパラメーターが設定されていない限り、デフォルトで CA のキーペアおよび証明書が使用されます。 |
ca.scep.nonceSizeLimit | SCEP リクエストに許可される最大 nonce サイズ (バイト単位) を設定します。デフォルトは 16 バイトです。 |
- 設定ファイルを編集できるように CA サーバーを停止します。
systemctl stop pki-tomcatd@instance_name.service
- CA の
CS.cfg
ファイルを開きます。vim
/var/lib/pki/instance_name/ca/conf/CS.cfg
- 表5.2「SCEP セキュリティーの設定パラメーター」 に記載されているように、必要なセキュリティーパラメーターを設定します。このパラメーターが存在しない場合は、
CS.cfg
ファイルに追加します。ca.scep.encryptionAlgorithm=DES3 ca.scep.allowedEncryptionAlgorithms=DES3 ca.scep.hashAlgorithm=SHA1 ca.scep.allowedHashAlgorithms=SHA1,SHA256,SHA512 ca.scep.nickname=Server-Cert ca.scep.nonceSizeLimit=20
- CA サーバーを起動します。
systemctl start pki-tomcatd@instance_name.service
5.8.3. SCEP 登録のルーターの設定
- ルーターは、IP アドレス、DNS サーバー、およびルーティング情報で設定する必要があります。
- ルーターの日付/時刻が正しく設定されている必要があります。
- ルーターのホスト名と dnsname を設定する必要があります。
5.8.4. ルーターの SCEP 証明書の生成
- ランダムな PIN を選択します。
- ルーターが CA に対して直接認証できるように、PIN とルーターの ID を
flatfile.txt
ファイルに追加します。以下に例を示します。vim /var/lib/pki/instance_name/ca/conf/flatfile.txt UID:172.16.24.238 PWD:Uojs93wkfd0IS
PWD 行の後に空の行を挿入してください。ルーターの IP アドレスは、IPv4 アドレスまたは IPv6 アドレスになります。フラットファイルの認証の使用は、「フラットファイル認証の設定」 に記載されています。 - ルーターのコンソールにログインします。以下の例では、ルーターの名前は scep です。
scep>
- 特権コマンドを有効にします。
scep> enable
- 設定モードを入力します。
scep# conf t
- root で始まり、証明書チェーン内のすべての CA に CA 証明書をインポートします。たとえば、次のコマンドシーケンスは、チェーン内の 2 つの CA 証明書をルーターにインポートします。
scep(config)# crypto ca trusted-root1 scep(ca-root)# root CEP http://server.example.com:8080/ca/cgi-bin/pkiclient.exe scep(ca-root)# crl optional scep(ca-root)# exit scep(config)# cry ca authenticate 1 scep(config)# crypto ca trusted-root0 scep(ca-root)# root CEP http://server.example.com:8080/ca/cgi-bin/pkiclient.exe scep(ca-root)# crl optional scep(ca-root)# exit scep(config)# cry ca authenticate 0
- CA アイデンティティーを設定し、SCEP 登録プロファイルにアクセスするための URL を入力します。CA の場合の例を以下に示します。
scep(config)# crypto ca identity CA scep(ca-identity)# enrollment url http://server.example.com:8080/ca/cgi-bin scep(ca-identity)# crl optional
- CA の証明書を取得します。
scep(config)# crypto ca authenticate CA Certificate has the following attributes: Fingerprint: 145E3825 31998BA7 F001EA9A B4001F57 % Do you accept this certificate? [yes/no]: yes
- RSA 鍵ペアを生成します。
scep(config)# crypto key generate rsa The name for the keys will be: scep.server.example.com Choose the size of the key modulus in the range of 360 to 2048 for your General Purpose Keys. Choosing a key modulus greater than 512 may take a few minutes. How many bits in the modulus [512]: Generating RSA keys ... [OK]
- 最後に、ルーターに証明書を生成します。
scep(config)# crypto ca enroll CA % % Start certificate enrollment .. % Create a challenge password. You will need to verbally provide this password to the CA Administrator in order to revoke your certificate. For security reasons your password will not be saved in the configuration. Please make a note of it. Password: secret Re-enter password: secret % The subject name in the certificate will be: scep.server.example.com % Include the router serial number in the subject name? [yes/no]: yes % The serial number in the certificate will be: 57DE391C % Include an IP address in the subject name? [yes/no]: yes % Interface: Ethernet0/0 % Request certificate from CA? [yes/no]: yes % Certificate request sent to Certificate Authority % The certificate request fingerprint will be displayed. % The 'show crypto ca certificate' command will also show the fingerprint. % Fingerprint:D89DB555 E64CC2F7 123725B4 3DBDF263 Jan 12 13:41:17.348: %CRYPTO-6-CERTRET: Certificate received from Certificate
- 設定モードを閉じます。
scep(config)# exit
- ルーターが適切に登録されたことを確認するには、ルーターに保存されている証明書の一覧を表示します。
scep# show crypto ca certificates Certificate Status: Available Certificate Serial Number: 0C Key Usage: General Purpose Issuer: CN = Certificate Authority O = Sfbay Red hat Domain 20070111d12 Subject Name Contains: Name: scep.server.example.com IP Address: 10.14.1.94 Serial Number: 57DE391C Validity Date: start date: 21:42:40 UTC Jan 12 2007 end date: 21:49:50 UTC Dec 31 2008 Associated Identity: CA CA Certificate Status: Available Certificate Serial Number: 01 Key Usage: Signature Issuer: CN = Certificate Authority O = Sfbay Red hat Domain 20070111d12 Subject: CN = Certificate Authority O = Sfbay Red hat Domain 20070111d12 Validity Date: start date: 21:49:50 UTC Jan 11 2007 end date: 21:49:50 UTC Dec 31 2008 Associated Identity: CA
5.8.5. Subordinate CA の使用
scep(config)# crypto ca trusted-root1 scep(ca-root)# root CEP http://server.example.com:8080/ca/cgi-bin/pkiclient.exe scep(ca-root)# crl optional scep(ca-root)# exit scep(config)# cry ca authenticate 1 scep(config)# crypto ca trusted-root0 scep(ca-root)# root CEP http://server.example.com:8080/ca/cgi-bin/pkiclient.exe scep(ca-root)# crl optional scep(ca-root)# exit scep(config)# cry ca authenticate 0
scep(ca-root)# crl optional
5.8.6. ルーターの再登録
- 既存のキーを削除 (ゼロ化)。
scep(config)# crypto key zeroize rsa % Keys to be removed are named scep.server.example.com. Do you really want to remove these keys? [yes/no]: yes
- CA アイデンティティーを削除します。
scep(config)# no crypto ca identity CA % Removing an identity will destroy all certificates received from the related Certificate Authority. Are you sure you want to do this? [yes/no]: yes % Be sure to ask the CA administrator to revoke your certificates. No enrollment sessions are currently active.
5.8.7. デバッグの有効化
scep# debug crypto pki callbacks
Crypto PKI callbacks debugging is onscep# debug crypto pki messages
Crypto PKI Msg debugging is onscep# debug crypto pki transactions
Crypto PKI Trans debugging is onscep#debug crypto verbose
verbose debug output debugging is on
5.8.8. SCEP で ECC 証明書を発行
- 暗号化/複号証明書 - 暗号化機能/複号機能を持つ RSA 証明書 (以下の例では scepRSAcert) を指定します。
- 署名証明書 - 自己署名ではなく、クライアント側で使用する RSA 証明書を取得します (以下の例では signingCert 証明書)。
sscep enroll -c ca.crt -e scepRSAcert.crt -k local.key -r local.csr -K sign.key -O sign.crt -E 3des -S sha256 -l cert.crt -u 'http://example.example.com:8080/ca/cgi-bin/pkiclient.exe'
第6章 Token Management System の使用および設定: TPS および TKS
6.1. TPS プロファイル
CS.cfg
で定義されます。
op.<explicit op>.<profile id>.<implicit op>.<key type>.*
op.enroll.userKey.keyGen.encryption.*
6.2. TPS 操作
明示的な操作
明示的な操作 はユーザーが呼び出す操作です。明示的な操作には、enroll
(op.enroll.*
)、format
(op.format.*
)、および pinReset
(op.pinReset.*
) が含まれます。
暗黙的な操作
暗黙的な操作 は、明示的な操作が処理されるときにトークンのポリシーまたはステータスが原因で発生する操作です。暗黙的な操作には、keyGen
(op.enroll.userKey.keyGen.*
)、renewal
(op.enroll.userKey.renewal.*
)、update.applet
(op.enroll.userKey.update.applet.*
)、およびキー更新 (op.enroll.userKey.update.symmetricKeys.*
) が含まれます。
recovery
、serverKeygen
、および revocation
が含まれます。
op.enroll.userKey.keyGen.encryption.serverKeygen.archive=true op.enroll.userKey.keyGen.encryption.serverKeygen.drm.conn=kra1 op.enroll.userKey.keyGen.encryption.serverKeygen.enable=true
1
で認証を取り消す必要があることを TPS に通知します。
op.enroll.userKey.keyGen.encryption.recovery.keyCompromise.revokeCert=true op.enroll.userKey.keyGen.encryption.recovery.keyCompromise.revokeCert.reason=1
表6.1 失効理由およびコード
理由 | コード |
---|---|
指定なし | 0 |
keyCompromise | 1 |
CACompromise | 2 |
affiliationChanged | 3 |
superseded | 4 |
cessationOfOperation | 5 |
certificateHold | 6 |
removeFromCRL | 8 |
privilegeWithdrawn | 9 |
AACompromise | 10 |
6.3. トークンポリシー
;
"") で区切られたポリシーの集合体です。各ポリシーは、キーワード YES
または NO
を使用してオンまたはオフにできます。以下のリストの各ポリシーは、デフォルト値 (設定がポリシー文字列にまったく存在しなかった場合に TPS によって実行されるアクション) で導入されます。
- RE_ENROLL=YES
- このポリシーは、トークンが再登録操作を許可するかどうかを制御します。これにより、すでに登録されたトークン (証明書を含む) を再登録し、新しいトークンを登録できるようになります。これを
NO
に設定すると、再登録を試行するとサーバーはエラーを返します。このポリシーでは、特別な設定は必要ありません。登録は、標準の登録プロファイルで続行されます。このプロファイルは、最初にトークンを登録する可能性があります。 - RENEW=NO;RENEW_KEEP_OLD_ENC_CERTS=YES
- 更新により、トークンは、プロファイルで生成された証明書をトークンの所定の場所で更新することができます。
RENEW
をYES
に設定すると、Enterprise Security Client (ESC) からの簡単な登録により、上記のように再登録せずに更新が行われます。RENEW_KEEP_OLD_ENC_CERTS
設定は、更新操作が以前のバージョンの暗号化証明書を保持するかどうかを決定します。以前の証明書を保持すると、ユーザーは古い証明書で暗号化されたデータにアクセスできます。このオプションをNO
に設定すると、古い証明書で暗号化したすべてのものを復元できなくなることを意味します。設定:op.enroll.userKey.renewal.encryption.ca.conn=ca1 op.enroll.userKey.renewal.encryption.ca.profileId=caTokenUserEncryptionKeyRenewal op.enroll.userKey.renewal.encryption.certAttrId=c2 op.enroll.userKey.renewal.encryption.certId=C2 op.enroll.userKey.renewal.encryption.enable=true op.enroll.userKey.renewal.encryption.gracePeriod.after=30 op.enroll.userKey.renewal.encryption.gracePeriod.before=30 op.enroll.userKey.renewal.encryption.gracePeriod.enable=false op.enroll.userKey.renewal.keyType.num=2 op.enroll.userKey.renewal.keyType.value.0=signing op.enroll.userKey.renewal.keyType.value.1=encryption op.enroll.userKey.renewal.signing.ca.conn=ca1 op.enroll.userKey.renewal.signing.ca.profileId=caTokenUserSigningKeyRenewal op.enroll.userKey.renewal.signing.certAttrId=c1 op.enroll.userKey.renewal.signing.certId=C1 op.enroll.userKey.renewal.signing.enable=true op.enroll.userKey.renewal.signing.gracePeriod.after=30 op.enroll.userKey.renewal.signing.gracePeriod.before=30 op.enroll.userKey.renewal.signing.gracePeriod.enable=false
このタイプの更新設定は、更新固有の追加設定をいくつか追加し、基本的なuserKey
標準登録プロファイルをミラーリングします。このパリティーが必要なのは、更新が開始される前に、トークンに最初に登録された証明書の数とタイプを正確に更新するためです。 - FORCE_FORMAT=NO
- このポリシーにより、登録操作ごとにフォーマット操作が要求されます (有効な場合)。これは、ユーザーが管理者に返すことなくトークンをリセットできるようにする最終手順です。これを
YES
に設定すると、ユーザーが開始された登録操作がすべて形式になり、トークンがフォーマットされた状態に対して強制的にリセットされます。追加の設定は必要ありません。単純な形式は、標準のフォーマット操作の実行に使用されるものと同じ TPS プロファイルで実行されます。 - PIN_RESET=NO
- このポリシーは、すでに登録されているトークンが ESC を使用して明示的なピンリセット変更を実行できるかどうかを決定します。この値は、
YES
に設定しなければならないか、サーバーがエラーにより発生した操作は拒否されます。設定:op.enroll.userKey.pinReset.enable=true op.enroll.userKey.pinReset.pin.maxLen=10 op.enroll.userKey.pinReset.pin.maxRetries=127 op.enroll.userKey.pinReset.pin.minLen=4
上記の例では、minLen
およびmaxLen
の設定が、選択したパスワードの長さに制約を課し、maxRetries
設定は、ロックアップする前に指定された回数の再試行のみを許可するようにトークンを設定します。
<POLICYNAME>=YES
または <POLICYNAME>=NO
に設定する必要があります。
6.4. トークン操作およびポリシー処理
- 形式
- (ユーザーが開始した) Format 操作は、製造元から提供された完全に空白の状態のトークンを受け取り、Coolkey アプレットを読み込みます。設定例:
#specify that we want authentication for format. We almost always want this at true: op.format.userKey.auth.enable=true #specify the ldap authentication configuration, so TPS knows where to validate credentials: op.format.userKey.auth.id=ldap1 #specify the connection the the CA op.format.userKey.ca.conn=ca1 #specify id of the card manager applet on given token op.format.userKey.cardmgr_instance=A0000000030000 #specify if we need to match the visa cuid to the nist sp800sp derivation algorithm KDD value. Mostly will be false: op.format.userKey.cuidMustMatchKDD=false #enable ability to restrict key changoever to a specific range of key set: op.format.userKey.enableBoundedGPKeyVersion=true #enable the phone home url to write to the token: op.format.userKey.issuerinfo.enable=true #actual home url to write to token: op.format.userKey.issuerinfo.value=http://server.example.com:8080/tps/phoneHome #specify whether to request a login from the client. Mostly true, external reg may want this to be false: op.format.userKey.loginRequest.enable=true #Actual range of desired keyset numbers: op.format.userKey.maximumGPKeyVersion=FF op.format.userKey.minimumGPKeyVersion=01 #Whether or not to revoke certs on the token after a format, and what the reason will be if so: op.format.userKey.revokeCert=true op.format.userKey.revokeCert.reason=0 #This will roll back the reflected keyyset version of the token in the tokendb. After a failed key changeover operation. This is to keep the value in sync with reality in the tokendb. Always false, since this version of TPS avoids this situation now: op.format.userKey.rollbackKeyVersionOnPutKeyFailure=false #specify connection to the TKS: op.format.userKey.tks.conn=tks1 #where to get the actual applet file to write to the token: op.format.userKey.update.applet.directory=/usr/share/pki/tps/applets #Allows a completely blank token to be recognized by TPS. Mostly should be true: op.format.userKey.update.applet.emptyToken.enable=true #Always should be true, not supported: op.format.userKey.update.applet.encryption=true #Actual version of the applet file we want to upgrade to. This file will have a name something like: 1.4.54de7a99.ijc: op.format.userKey.update.applet.requiredVersion=1.4.54de790f #Symm key changeover: op.format.userKey.update.symmetricKeys.enable=false op.format.userKey.update.symmetricKeys.requiredVersion=1 #Make sure the token db is in sync with reality. Should always be true: op.format.userKey.validateCardKeyInfoAgainstTokenDB=true
- 登録
- 基本的な登録操作では、フォーマットされたトークンを取得し、トークンをカスタマイズするために証明書とキーをトークンに配置します。次の設定例では、これを制御する方法を説明します。この例は、更新および内部リカバリーを処理しない基本的な登録を示しています。ここで説明されていない設定は、Format セクションで説明されています。または必須ではありません。
op.enroll.userKey.auth.enable=true op.enroll.userKey.auth.id=ldap1 op.enroll.userKey.cardmgr_instance=A0000000030000 op.enroll.userKey.cuidMustMatchKDD=false op.enroll.userKey.enableBoundedGPKeyVersion=true op.enroll.userKey.issuerinfo.enable=true op.enroll.userKey.issuerinfo.value=http://server.example.com:8080/tps/phoneHome #configure the encryption cert and keys we want on the token: #connection the the CA, which issues the certs: op.enroll.userKey.keyGen.encryption.ca.conn=ca1 #Profile id we want the CA to use to issue our encrytion cert: op.enroll.userKey.keyGen.encryption.ca.profileId=caTokenUserEncryptionKeyEnrollment #These two cover the indexes of the certs written to the token. Each cert needs a unique index or “slot”. In our sample the enc cert will occupy slot 2 and the signing cert, shown later, will occupy slot 1. Avoid overlap with these numbers: op.enroll.userKey.keyGen.encryption.certAttrId=c2 op.enroll.userKey.keyGen.encryption.certId=C2 op.enroll.userKey.keyGen.encryption.cuid_label=$cuid$ #specify size of generated private key: op.enroll.userKey.keyGen.encryption.keySize=1024 op.enroll.userKey.keyGen.encryption.keyUsage=0 op.enroll.userKey.keyGen.encryption.keyUser=0 #specify pattern for what the label of the cert will look like when the cert nickname is displayed in browsers and mail clients: op.enroll.userKey.keyGen.encryption.label=encryption key for $userid$ #specify if we want to overwrite certs on a re-enrollment operation. This is almost always the case: op.enroll.userKey.keyGen.encryption.overwrite=true #The next several settings specify the capabilities that the private key on the final token will inherit. For instance this will determine if the cert can be used for encryption or digital signatures. There are settings for both the private and public key. op.enroll.userKey.keyGen.encryption.private.keyCapabilities.decrypt=true op.enroll.userKey.keyGen.encryption.private.keyCapabilities.derive=false op.enroll.userKey.keyGen.encryption.private.keyCapabilities.encrypt=false op.enroll.userKey.keyGen.encryption.private.keyCapabilities.private=true op.enroll.userKey.keyGen.encryption.private.keyCapabilities.sensitive=true op.enroll.userKey.keyGen.encryption.private.keyCapabilities.sign=false op.enroll.userKey.keyGen.encryption.private.keyCapabilities.signRecover=false op.enroll.userKey.keyGen.encryption.private.keyCapabilities.token=true op.enroll.userKey.keyGen.encryption.private.keyCapabilities.unwrap=true op.enroll.userKey.keyGen.encryption.private.keyCapabilities.verify=false op.enroll.userKey.keyGen.encryption.private.keyCapabilities.verifyRecover=false op.enroll.userKey.keyGen.encryption.private.keyCapabilities.wrap=false op.enroll.userKey.keyGen.encryption.privateKeyAttrId=k4 op.enroll.userKey.keyGen.encryption.privateKeyNumber=4 op.enroll.userKey.keyGen.encryption.public.keyCapabilities.decrypt=false op.enroll.userKey.keyGen.encryption.public.keyCapabilities.derive=false op.enroll.userKey.keyGen.encryption.public.keyCapabilities.encrypt=true op.enroll.userKey.keyGen.encryption.public.keyCapabilities.private=false op.enroll.userKey.keyGen.encryption.public.keyCapabilities.sensitive=false op.enroll.userKey.keyGen.encryption.public.keyCapabilities.sign=false op.enroll.userKey.keyGen.encryption.public.keyCapabilities.signRecover=false op.enroll.userKey.keyGen.encryption.public.keyCapabilities.token=true op.enroll.userKey.keyGen.encryption.public.keyCapabilities.unwrap=false op.enroll.userKey.keyGen.encryption.public.keyCapabilities.verify=false op.enroll.userKey.keyGen.encryption.public.keyCapabilities.verifyRecover=false op.enroll.userKey.keyGen.encryption.public.keyCapabilities.wrap=true #The following index numbers correspond to the index or slot that the private and public keys occupy. The common formula we use is that the public key index will be 2 * cert id + 1, and the private key index, shown above will be 2 * cert id. In this example the cert id is 2, so the key ids will be 4 and 5 respectively. When composing these, be careful not to create conflicts. This applies to the signing key section below. op.enroll.userKey.keyGen.encryption.publicKeyAttrId=k5 op.enroll.userKey.keyGen.encryption.publicKeyNumber=5 #specify if, when a certificate is slated for revocation, based on other rules, we want to check to see if some other token is using this cert in a shared situation. If this is set to true, and this situation is found the cert will not be revoked until the last token wants to revoke this cert: op.enroll.userKey.keyGen.encryption.recovery.destroyed.holdRevocationUntilLastCredential=false #specify, if we want server side keygen, if we want to have that generated key archived to the drm. This is almost always the case, since we want the ability to later recover a cert and its encryption private key back to a new token: op.enroll.userKey.keyGen.encryption.serverKeygen.archive=true #connection to drm to generate the key for us: op.enroll.userKey.keyGen.encryption.serverKeygen.drm.conn=kra1 #specify server side keygen of the encryption private key. This most often will be desired: op.enroll.userKey.keyGen.encryption.serverKeygen.enable=true #This setting tells us how many certs we want to enroll for this TPS profile, in the case “userKey”. Here we want 2 total certs. The next values then go on to index into the config what two types of certs we want, signing and encryption: op.enroll.userKey.keyGen.keyType.num=2 op.enroll.userKey.keyGen.keyType.value.0=signing op.enroll.userKey.keyGen.keyType.value.1=encryption #configure the signing cert and keys we want on the token the settings for these are similar to the encryption settings already discussed, except the capability flags presented below, since this is a signing key. op.enroll.userKey.keyGen.signing.ca.conn=ca1 op.enroll.userKey.keyGen.signing.ca.profileId=caTokenUserSigningKeyEnrollment op.enroll.userKey.keyGen.signing.certAttrId=c1 op.enroll.userKey.keyGen.signing.certId=C1 op.enroll.userKey.keyGen.signing.cuid_label=$cuid$ op.enroll.userKey.keyGen.signing.keySize=1024 op.enroll.userKey.keyGen.signing.keyUsage=0 op.enroll.userKey.keyGen.signing.keyUser=0 op.enroll.userKey.keyGen.signing.label=signing key for $userid$ op.enroll.userKey.keyGen.signing.overwrite=true op.enroll.userKey.keyGen.signing.private.keyCapabilities.decrypt=false op.enroll.userKey.keyGen.signing.private.keyCapabilities.derive=false op.enroll.userKey.keyGen.signing.private.keyCapabilities.encrypt=false op.enroll.userKey.keyGen.signing.private.keyCapabilities.private=true op.enroll.userKey.keyGen.signing.private.keyCapabilities.sensitive=true op.enroll.userKey.keyGen.signing.private.keyCapabilities.sign=true op.enroll.userKey.keyGen.signing.private.keyCapabilities.signRecover=true op.enroll.userKey.keyGen.signing.private.keyCapabilities.token=true op.enroll.userKey.keyGen.signing.private.keyCapabilities.unwrap=false op.enroll.userKey.keyGen.signing.private.keyCapabilities.verify=false op.enroll.userKey.keyGen.signing.private.keyCapabilities.verifyRecover=false op.enroll.userKey.keyGen.signing.private.keyCapabilities.wrap=false op.enroll.userKey.keyGen.signing.privateKeyAttrId=k2 op.enroll.userKey.keyGen.signing.privateKeyNumber=2 op.enroll.userKey.keyGen.signing.public.keyCapabilities.decrypt=false op.enroll.userKey.keyGen.signing.public.keyCapabilities.derive=false op.enroll.userKey.keyGen.signing.public.keyCapabilities.encrypt=false op.enroll.userKey.keyGen.signing.public.keyCapabilities.private=false op.enroll.userKey.keyGen.signing.public.keyCapabilities.sensitive=false op.enroll.userKey.keyGen.signing.public.keyCapabilities.sign=false op.enroll.userKey.keyGen.signing.public.keyCapabilities.signRecover=false op.enroll.userKey.keyGen.signing.public.keyCapabilities.token=true op.enroll.userKey.keyGen.signing.public.keyCapabilities.unwrap=false op.enroll.userKey.keyGen.signing.public.keyCapabilities.verify=true op.enroll.userKey.keyGen.signing.public.keyCapabilities.verifyRecover=true op.enroll.userKey.keyGen.signing.public.keyCapabilities.wrap=false op.enroll.userKey.keyGen.signing.publicKeyAttrId=k3 op.enroll.userKey.keyGen.signing.publicKeyNumber=3
- ピンリセット
- ピンリセットは、合理的に実行されるべきかどうかを判断するポリシーに依存するため、ピンリセットの設定については 「トークンポリシー」 で説明しています。
- 更新
- 更新は、すでに登録されているトークンに対して実行することが合法であるかどうかを判断するためのポリシーに依存しているため、更新の設定については 「トークンポリシー」 で説明しています。
- 復元
- TPS ユーザーインターフェイスのユーザーが以前にアクティブだったトークンを紛失や破棄などの好ましくない状態にマークすると、復元が暗黙的に開始されます。これが発生すると、同じユーザーによる次の新しいトークンの登録は、次の設定に従って、ユーザーの古いトークンからこの新しいトークンに証明書を復元します。この操作の最終結果は、ユーザーが古いトークンから回復された暗号化証明書を含む可能性のある新しい物理トークンを取得することです。これにより、ユーザーは必要に応じてデータの暗号化と復号を続行できます。以下のサンプル設定例に示すように、通常、新しい署名証明書もこのトークンに配置されます。以下は、設定に示されているように、TPS ユーザーインターフェイスでトークンを手動で配置できるサポートされている状態のリストです。
tokendb._069=#
-DAMAGED (1)
: リカバリー設定のdestroyed
に相当します。トークンが物理的に破損された場合に使用します。tokendb._070=#
-PERM_LOST (2)
: リカバリー設定のkeyCompromise
に相当します。トークンが永久に失われた場合に使用されます。tokendb._071=#
-SUSPENDED (3)
: リカバリー設定のonHold
に相当します。トークンを一時的に配置した際に使用されますが、ユーザーはトークンを再度検索することが予想されます。tokendb._072=#
-TERMINATED (6)
: リカバリー設定でterminated
するもの。トークンをサービス対象外にするために内部の理由から使用します。
リカバリー設定の例:#When a token is marked destroyed, don’t revoke the certs on the token unless all other tokens do not have the certs included: op.enroll.userKey.keyGen.encryption.recovery.destroyed.holdRevocationUntilLastCredential=false #specify if we even want to revoke certs a token is marked destroyed: op.enroll.userKey.keyGen.encryption.recovery.destroyed.revokeCert=false #if we want to revoke any certs here, specify the reason for revocation that will be sent to the CA: op.enroll.userKey.keyGen.encryption.recovery.destroyed.revokeCert.reason=0 #speficy if we want to revoke expired certs when marking the token destroyed: op.enroll.userKey.keyGen.encryption.recovery.destroyed.revokeExpiredCerts=false
追加の設定を使用して、新しいトークンに対して回復操作を実行するときに (元のトークンが破棄済みとしてマークされている場合)、サポートされている静的回復の種類を指定します。以下のスキームがサポートされます。- Recover Last (
RecoverLast
): トークンに配置される最新の暗号化証明書を復旧します。 - Generate New Key and Recover Last (
GenerateNewKeyAndRecoverLast
): Recover Last と同じですが、新しい暗号化証明書を生成し、トークンにアップロードします。新しいトークンには 2 つの証明書が含まれます。 - Generate New Key (
GenerateNewKey
): 新しい暗号化証明書を生成し、トークンに配置します。古い証明書は復元しないでください。
以下に例を示します。op.enroll.userKey.keyGen.encryption.recovery.destroyed.scheme=RecoverLast
次の設定例は、永久に失われたとマークされたトークンを回復する方法を決定します。op.enroll.userKey.keyGen.encryption.recovery.keyCompromise.holdRevocationUntilLastCredential=false op.enroll.userKey.keyGen.encryption.recovery.keyCompromise.revokeCert=true op.enroll.userKey.keyGen.encryption.recovery.keyCompromise.revokeCert.reason=1 op.enroll.userKey.keyGen.encryption.recovery.keyCompromise.revokeExpiredCerts=false op.enroll.userKey.keyGen.encryption.recovery.keyCompromise.scheme=GenerateNewKey # Section when a token is marked terminated. op.enroll.userKey.keyGen.encryption.recovery.terminated.holdRevocationUntilLastCredential=false op.enroll.userKey.keyGen.encryption.recovery.terminated.revokeCert=true op.enroll.userKey.keyGen.encryption.recovery.terminated.revokeCert.reason=1 op.enroll.userKey.keyGen.encryption.recovery.terminated.revokeExpiredCerts=false op.enroll.userKey.keyGen.encryption.recovery.terminated.scheme=GenerateNewKey # This section details the recovery profile with respect to which certs and of what kind get recovered on the token. op.enroll.userKey.keyGen.recovery.destroyed.keyType.num=2 op.enroll.userKey.keyGen.recovery.destroyed.keyType.value.0=signing op.enroll.userKey.keyGen.recovery.destroyed.keyType.value.1=encryption
最後に、次の例では、古いトークンにあった署名証明書に対してシステムが何を行うかを決定します。ほとんどの場合、署名秘密鍵の複数のコピーが使用可能になる可能性を回避するために、GenerateNewKey
復元スキームを使用する必要があります (たとえば、新しいトークンで復元されたものと、永久に失われたが他の誰かによって発見された古いトークンで復元されたもの)。op.enroll.userKey.keyGen.recovery.keyCompromise.keyType.value.0=signing op.enroll.userKey.keyGen.recovery.keyCompromise.keyType.value.1=encryption op.enroll.userKey.keyGen.recovery.onHold.keyType.num=2 op.enroll.userKey.keyGen.recovery.onHold.keyType.value.0=signing op.enroll.userKey.keyGen.recovery.onHold.keyType.value.1=encryption op.enroll.userKey.keyGen.signing.recovery.destroyed.holdRevocationUntilLastCredential=false op.enroll.userKey.keyGen.signing.recovery.destroyed.revokeCert=true op.enroll.userKey.keyGen.signing.recovery.destroyed.revokeCert.reason=0 op.enroll.userKey.keyGen.signing.recovery.destroyed.revokeExpiredCerts=false op.enroll.userKey.keyGen.signing.recovery.destroyed.scheme=GenerateNewKey op.enroll.userKey.keyGen.signing.recovery.keyCompromise.holdRevocationUntilLastCredential=false op.enroll.userKey.keyGen.signing.recovery.keyCompromise.revokeCert=true op.enroll.userKey.keyGen.signing.recovery.keyCompromise.revokeCert.reason=1 op.enroll.userKey.keyGen.signing.recovery.keyCompromise.revokeExpiredCerts=false op.enroll.userKey.keyGen.signing.recovery.keyCompromise.scheme=GenerateNewKey op.enroll.userKey.keyGen.signing.recovery.onHold.holdRevocationUntilLastCredential=false op.enroll.userKey.keyGen.signing.recovery.onHold.revokeCert=true op.enroll.userKey.keyGen.signing.recovery.onHold.revokeCert.reason=6 op.enroll.userKey.keyGen.signing.recovery.onHold.revokeExpiredCerts=false op.enroll.userKey.keyGen.signing.recovery.onHold.scheme=GenerateNewKey op.enroll.userKey.keyGen.signing.recovery.terminated.holdRevocationUntilLastCredential=false op.enroll.userKey.keyGen.signing.recovery.terminated.revokeCert=true op.enroll.userKey.keyGen.signing.recovery.terminated.revokeCert.reason=1 op.enroll.userKey.keyGen.signing.recovery.terminated.revokeExpiredCerts=false op.enroll.userKey.keyGen.signing.recovery.terminated.scheme=GenerateNewKey # Configuration for the case when we mark a token “onHold” or temporarily lost op.enroll.userKeyTemporary.keyGen.encryption.recovery.onHold.revokeCert=true op.enroll.userKeyTemporary.keyGen.encryption.recovery.onHold.revokeCert.reason=0 op.enroll.userKeyTemporary.keyGen.encryption.recovery.onHold.scheme=RecoverLast op.enroll.userKeyTemporary.keyGen.recovery.onHold.keyType.num=2 op.enroll.userKeyTemporary.keyGen.recovery.onHold.keyType.value.0=signing op.enroll.userKeyTemporary.keyGen.recovery.onHold.keyType.value.1=encryption op.enroll.userKeyTemporary.keyGen.signing.recovery.onHold.revokeCert=true op.enroll.userKeyTemporary.keyGen.signing.recovery.onHold.revokeCert.reason=0 op.enroll.userKeyTemporary.keyGen.signing.recovery.onHold.scheme=GenerateNewKey
- アプレットの更新
- 以下の例は、Coolkey アプレット更新操作の設定方法を示しています。この操作は、フォーマット、登録、および PIN のリセット操作中に実行できます。
op.format.userKey.update.applet.directory=/usr/share/pki/tps/applets op.format.userKey.update.applet.emptyToken.enable=true op.format.userKey.update.applet.encryption=true op.format.userKey.update.applet.requiredVersion=1.4.54de790f
これらのオプションの一部は、Format セクションですでに紹介されています。これらは、アプレットのアップグレードを許可する必要があるかどうか、アプレットファイルの場所、およびトークンをアップグレードするアプレットのバージョンを決定するために必要な情報を提供します。requiredVersion
のバージョンは、directory
内のファイル名にマッピングされます。 - キーの更新
- この操作は、フォーマット、登録、および PIN リセット操作中に実行でき、ユーザーは Global Platform キーセットのバージョンを製造元が提供するデフォルトからアップグレードできます。
- TPS
- 次のオプションは、特定のトークンに代わって要求された次のフォーマット操作中に、キーセットを 1 から 2 にアップグレードするように TPS に指示します。これが行われたら、TKS はトークンに書き込まれる 3 つの新しいキーを取得する必要があります。その後、トークンは同じ TPS および TKS インストールで使用する必要があります。そうしないと、ロックされます。
op.format.userKey.update.symmetricKeys.enable=true op.format.userKey.update.symmetricKeys.requiredVersion=2
代わりに、現在よりも低いバージョンを指定して、キーセットをダウングレードすることもできます。 - TKS
- 上記のように、TKS は、トークンに書き込む新しい鍵を生成するように設定する必要があります。まず、新しいマスターキー識別子
02
は、次の例に示すように、TKSCS.cfg
の PKCS #11 オブジェクトのニックネームにマップする必要があります。tks.mk_mappings.#02#01=internal:new_master tks.defKeySet.mk_mappings.#02#01=internal:new_master
上記の例では、キーセット番号が TKS NSS データベースに存在する実際のマスターキーにマップされます。マスターキーは、01
などの ID で識別されます。TKS は、この ID を、マッピングのmasterKeyId
部分として指定した PKCS #11 オブジェクトのニックネームにマッピングします。したがって、最初の番号はマスターキーのバージョンが更新されると更新され、2 番目の番号は一貫性を保ちます。バージョン 1 からバージョン 2 にアップグレードしようとすると、マッピングによって、新しいキーセットの 3 つの部分を取得するために使用されるマスターキーのニックネームを見つける方法が決まります。上記の例internal
の設定は、マスターキーがあるトークンの名前を参照します。また、nethsm
など、名前を持つ外部 HSM モジュールも使用できます。強力なnew_master
は、マスターキーのニックネーム自体の例です。
6.5. 内部登録
op.enroll.userKey.auth.enable=true op.enroll.userKey.auth.id=ldap1
op.enroll.userKey.keyGen.encryption.ca.conn=ca1 op.enroll.userKey.keyGen.encryption.serverKeygen.drm.conn=kra1
op.enroll.userKey.tks.conn=tks1
6.6. 外部登録
6.6.1. 外部登録の有効化
externalReg.allowRecoverInvalidCert.enable=true externalReg.authId=ldap1 externalReg.default.tokenType=externalRegAddToToken externalReg.delegation.enable=true externalReg.enable=true externalReg.recover.byKeyID=false externalReg.format.loginRequest.enable=true externalReg.mappingResolver=keySetMappingResolver
6.6.2. ユーザー LDAP レコード属性名のカスタマイズ
auths.instance.ldap1.externalReg.certs.recoverAttributeName=certsToAdd auths.instance.ldap1.externalReg.cuidAttributeName=tokenCUID auths.instance.ldap1.externalReg.tokenTypeAttributeName=tokenType
6.6.3. certsToAdd 属性の設定
certsToAdd
属性は、以下の形式で複数の値を取ります。
<cert serial # in decimal>,<CA connector ID>,<key ID>,<kra connector ID>
59,ca1,0,kra1
certsToAdd
属性を指定する場合、TPS は問題の証明書がトークン上にあり、保存する必要があることを仮定します。この概念は キー保持 と呼ばれます。
tokenType: externalRegAddToToken certstoadd: 59,ca1,0,kra1 certstoadd: 134,ca1,0,kra1 Certstoadd: 24,ca1
6.6.4. ユーザーマッチングの実施に対するトークン
tokencuid
) がレコードにない場合は、CUID 一致は強制されません。
Tokencuid: a10192030405028001c0
certstoadd: 59,ca1
,0,kra1
6.6.5. 委譲サポート
- Authentication certificate/keys: CN には、委譲の名前と一意の ID が含まれます。Subject Alternative Name (SAN) 拡張機能には、幹部の Principal Name (UPN) が含まれます。
- 暗号化証明書: ワイヤレスの暗号化証明書の正確なコピーです。
- 証明書の署名: CN には委譲の名前と一意の ID が含まれます。SAN には、エグゼクティブの RFC822Name が含まれています。
externalReg.delegation.enable=true
/var/lib/pki/instance_name/tps/conf/CS.cfg
ファイルの op.enroll.delegateISEtoken.keyGen.encryption.ca.profileId
パラメーターを caTokenUserDelegateAuthKeyEnrollment に手動で設定します。
op.enroll.delegateISEtoken.keyGen.encryption.ca.profileId=caTokenUserDelegateAuthKeyEnrollment
6.6.6. SAN および DN のパターン
auths.instance.<authID>.ldapStringAttributes
は、認証中に取得する属性を指定します。以下に例を示します。
auths.instance.ldap1.ldapStringAttributes=mail,cn,uid,edipi,pcc,firstname,lastname,exec-edipi,exec-pcc,exec-mail,certsToAdd,tokenCUID,tokenType
$auth.<attribute name>$
の形式で証明書の Subject Alternative Name (SAN) or Distinguished Name (DN) を形成することができます。以下に例を示します。
op.enroll.delegateIEtoken.keyGen.authentication.SANpattern=$auth.exec-edipi$.$auth.exec-pcc$@EXAMPLE.com op.enroll.delegateIEtoken.keyGen.authentication.dnpattern=cn=$auth.firstname$.$auth.lastname$.$auth.edipi$,e=$auth.mail$,o=TMS Org
- TPS、プロファイル delegateIEtoken で
op.enroll.delegateIEtoken.keyGen.authentication.ca.profileId=caTokenUserDelegateAuthKeyEnrollment
- CA で、プロファイル caTokenUserDelegateAuthKeyEnrollment に登録します。
- 上記の TPS プロファイルで DN を指定できるようにするには、
subjectDNInputImpl
プラグインを入力のいずれかとして指定する必要があります。input.i2.class_id=subjectDNInputImpl input.i2.name=subjectDNInputImpl
同様に、上記の TPS プロファイルで SAN を指定できるようにするには、subjectAltNameExtInputImpl
プラグインを指定する必要があります。input.i3.class_id=subjectAltNameExtInputImpl input.i3.name=subjectAltNameExtInputImpl
subjAltExtpattern
も指定する必要があります。policyset.set1.p6.default.params.subjAltExtPattern_0=(UTF8String)1.3.6.1.4.1.311.20.2.3,$request.req_san_pattern_0$
上記の例では、OID1.3.6.1.4.1.311.20.2.3
は User Principal Name (UPN) の OID で、request.req_san_pattern_0
は、delegateIEtoken
SAN パターンで指定された最初の SAN パターンになります。
,
") で区切った SANpattern
で指定します。CA 側では、対応する subjAltExtPattern
の数を以下の形式で定義する必要があります。
policyset.<policy set id>.<policy id>.default.params.subjAltExtPattern_<ordered number>=
policyset.set1.p6.default.params.subjAltExtPattern_0= policyset.set1.p6.default.params.subjAltExtPattern_1= ...
例6.1 SANpattern および DNpattern の設定
givenName: user1a mail: user1a@example.org firstname: user1a edipi: 123456789 pcc: AA exec-edipi: 999999999 exec-pcc: BB exec-mail: user1b@EXAMPLE.com tokenType: delegateISEtoken certstoadd: 59,ca1,0,kra1
delegateIEtoken
には、以下が含まれます。
SANpattern
:op.enroll.delegateISEtoken.keyGen.authentication.SANpattern=$auth.exec-edipi$.$auth.exec-pcc$@EXAMPLE.com
DNPattern
:op.enroll.delegateISEtoken.keyGen.authentication.dnpattern=cn=$auth.firstname$.$auth.lastname$.$auth.edipi$,e=$auth.mail$,o=TMS Org
caTokenUserDelegateAuthKeyEnrollment
には以下が含まれます。
input.i2.class_id=subjectDNInputImpl input.i2.name=subjectDNInputImpl input.i3.class_id=subjectAltNameExtInputImpl input.i3.name=subjectAltNameExtInputImpl policyset.set1.p6.constraint.class_id=noConstraintImpl policyset.set1.p6.constraint.name=No Constraint policyset.set1.p6.default.class_id=subjectAltNameExtDefaultImpl policyset.set1.p6.default.name=Subject Alternative Name Extension Default policyset.set1.p6.default.params.subjAltExtGNEnable_0=true policyset.set1.p6.default.params.subjAltExtPattern_0=(UTF8String)1.3.6.1.4.1.311.20.2.3,$request.req_san_pattern_0$ policyset.set1.p6.default.params.subjAltExtType_0=OtherName policyset.set1.p6.default.params.subjAltNameExtCritical=false policyset.set1.p6.default.params.subjAltNameNumGNs=1
Subject: CN=user1a..123456789,E=user1a@example.org,O=TMS Org Identifier: Subject Alternative Name - 2.5.29.17 Critical: no Value: OtherName: (UTF8String)1.3.6.1.4.1.311.20.2.3,999999999.BB@EXAMPLE.com
6.7. Mapping Resolver の設定
FilterMappingResolver
と呼ばれています。本セクションでは、その設定について説明します。
6.7.1. Key Set Mapping Resolver
externalReg.mappingResolver=<keySet mapping resolver name>
externalReg.mappingResolver=keySetMappingResolver
mappingResolver.keySetMappingResolver.class_id=filterMappingResolverImpl mappingResolver.keySetMappingResolver.mapping.0.filter.appletMajorVersion=0 mappingResolver.keySetMappingResolver.mapping.0.filter.appletMinorVersion=0 mappingResolver.keySetMappingResolver.mapping.0.filter.keySet= mappingResolver.keySetMappingResolver.mapping.0.filter.tokenATR= mappingResolver.keySetMappingResolver.mapping.0.filter.tokenCUID.end=a1000000000000000000 mappingResolver.keySetMappingResolver.mapping.0.filter.tokenCUID.start=a0000000000000000000 mappingResolver.keySetMappingResolver.mapping.0.target.keySet=defKeySet mappingResolver.keySetMappingResolver.mapping.1.filter.appletMajorVersion=1 mappingResolver.keySetMappingResolver.mapping.1.filter.appletMinorVersion=1 mappingResolver.keySetMappingResolver.mapping.1.filter.keySet= mappingResolver.keySetMappingResolver.mapping.1.filter.tokenATR=1234 mappingResolver.keySetMappingResolver.mapping.1.filter.tokenCUID.end= mappingResolver.keySetMappingResolver.mapping.1.filter.tokenCUID.start= mappingResolver.keySetMappingResolver.mapping.1.target.keySet=defKeySet mappingResolver.keySetMappingResolver.mapping.2.filter.appletMajorVersion= mappingResolver.keySetMappingResolver.mapping.2.filter.appletMinorVersion= mappingResolver.keySetMappingResolver.mapping.2.filter.keySet= mappingResolver.keySetMappingResolver.mapping.2.filter.tokenATR= mappingResolver.keySetMappingResolver.mapping.2.filter.tokenCUID.end= mappingResolver.keySetMappingResolver.mapping.2.filter.tokenCUID.start= mappingResolver.keySetMappingResolver.mapping.2.target.keySet=jForte mappingResolver.keySetMappingResolver.mapping.order=0,1,2
0
、1
、および 2
という名前の 3 つのマッピングを定義します。これらは、例の mappingResolver.keySetMappingResolver.mapping.order=0,1,2
行を使用して昇順で順序付けされます。この順序は、入力パラメーターが最初にマッピングフィルター 0
に対して実行されることを意味します。入力パラメーターがそのフィルターに一致しない場合にのみ、マッピング順序の次のフィルターが試行されます。たとえば、以下の特性を持つトークンが評価されます。
CUID=a0000000000000000011 appletMajorVersion=0 appletMinorVersion=0
0
を渡し、そのターゲットが割り当てられます。これは、defKeySet
に設定されます。これは、アプレットのバージョンが一致し、CUID がそのマッピングの CUID の開始範囲と終了範囲内にあるためです。
CUID=b0000000000000000000 ATR=2222 appletMajorVersion=1 appletMinorVersion=1
0
のマッピングに失敗します。また、アプレットバージョンが一致すると ATR がマッピングされないため、1
マッピングも失敗します。上記のトークンはマッピング 2
とそのターゲット jForte
に割り当てられます。
2
には、そのフィルターへの割り当てがないことに留意してください。これにより、マッピングがすべてのトークンと照合され、実質的にデフォルトの値になります。このようなマッピングは、マッピング順序の最後に指定する必要があります。これ以降、他のマッピングは評価されないためです。
6.7.2. Token Type (TPS) Mapping Resolver
tokenType
マッピングリゾルバーは、formatProfileMappingResolver
、enrollProfileMappingResolver
、および pinResetProfileMappingResolver
の 3 つです。前のセクションで説明した外部登録の場合と比較すると、内部登録の場合、トークンタイプは実際には定義されたマッピングリゾルバーから計算されます。
op.<op>.mappingResolver=<mapping resolver name>
op.enroll.mappingResolver=enrollProfileMappingResolver
enrollProfileMappingResolver
を説明します。
mappingResolver.enrollProfileMappingResolver.class_id=filterMappingResolverImpl mappingResolver.enrollProfileMappingResolver.mapping.0.filter.appletMajorVersion=1 mappingResolver.enrollProfileMappingResolver.mapping.0.filter.appletMinorVersion= mappingResolver.enrollProfileMappingResolver.mapping.0.filter.tokenATR= mappingResolver.enrollProfileMappingResolver.mapping.0.filter.tokenCUID.end=b1000000000000000000 mappingResolver.enrollProfileMappingResolver.mapping.0.filter.tokenCUID.start=b0000000000000000000 mappingResolver.enrollProfileMappingResolver.mapping.0.filter.tokenType=userKey mappingResolver.enrollProfileMappingResolver.mapping.0.target.tokenType=userKey mappingResolver.enrollProfileMappingResolver.mapping.1.filter.appletMajorVersion=1 mappingResolver.enrollProfileMappingResolver.mapping.1.filter.appletMinorVersion= mappingResolver.enrollProfileMappingResolver.mapping.1.filter.tokenATR= mappingResolver.enrollProfileMappingResolver.mapping.1.filter.tokenCUID.end=a0000000000000001000 mappingResolver.enrollProfileMappingResolver.mapping.1.filter.tokenCUID.start=a0000000000000000000 mappingResolver.enrollProfileMappingResolver.mapping.1.filter.tokenType=soKey mappingResolver.enrollProfileMappingResolver.mapping.1.target.tokenType=soKey mappingResolver.enrollProfileMappingResolver.mapping.2.filter.appletMajorVersion= mappingResolver.enrollProfileMappingResolver.mapping.2.filter.appletMinorVersion= mappingResolver.enrollProfileMappingResolver.mapping.2.filter.tokenATR= mappingResolver.enrollProfileMappingResolver.mapping.2.filter.tokenCUID.end= mappingResolver.enrollProfileMappingResolver.mapping.2.filter.tokenCUID.start= mappingResolver.enrollProfileMappingResolver.mapping.2.filter.tokenType= mappingResolver.enrollProfileMappingResolver.mapping.2.target.tokenType=userKey mappingResolver.enrollProfileMappingResolver.mapping.order=1,0,2
enrollProfileMappingResolver
で定義されます。マッピングの名前は 0
、1
、および 2
です。mappingResolver.enrollProfileMappingResolver.mapping.order=1,0,2
行は、マッピングを処理する順番を定義します。トークンがマッピングと一致する場合、その順序でそれ以上のマッピングは評価されません。マッピングと一致しない場合は、順序の次のマッピングが試行されます。
CUID=a0000000000000000011 appletMajorVersion=1 appletMinorVersion=0 extension: tokenType=soKey
tokenType
は一致するため、この設定を持つトークンはマッピング 1
用のフィルターに一致します。そのため、このトークンには、そのマッピングのターゲットが割り当てられます (soKey
)。
CUID=b0000000000000000010 appletMajorVersion=1 appletMinorVersion=1
1
トークンのマッピングに失敗します。tokenType
エクステンションがないため、0
へのマッピングも失敗します。以前のフィルターのいずれにも一致しないすべてのトークンに一致するフィルターが指定されていないため、このトークンはマッピング 2
に一致します。
6.8. 認証設定
UidPwdDirAuthentication
) を使用したディレクトリーベースの認証をサポートします。認証インスタンスは、以下のパターンを使用して CS.cfg
ファイルで定義されます。
auths.instance.<auths ID>.*
op.enroll.userKey.auth.id=ldap1
auths.impl.UidPwdDirAuth.class=com.netscape.cms.authentication.UidPwdDirAuthentication auths.instance.ldap1.pluginName=UidPwdDirAuth auths.instance.ldap1.authCredName=uid auths.instance.ldap1.dnpattern= auths.instance.ldap1.externalReg.certs.recoverAttributeName=certsToAdd auths.instance.ldap1.externalReg.cuidAttributeName=tokenCUID auths.instance.ldap1.externalReg.tokenTypeAttributeName=tokenType auths.instance.ldap1.ldap.basedn=dc=sjc,dc=example,dc=com auths.instance.ldap1.ldap.ldapauth.authtype=BasicAuth auths.instance.ldap1.ldap.ldapauth.bindDN= auths.instance.ldap1.ldap.ldapauth.bindPWPrompt=ldap1 auths.instance.ldap1.ldap.ldapauth.clientCertNickname=subsystemCert cert-pki-tomcat auths.instance.ldap1.ldap.ldapconn.host=host1.EXAMPLE.com auths.instance.ldap1.ldap.ldapconn.port=389 auths.instance.ldap1.ldap.ldapconn.secureConn=False auths.instance.ldap1.ldap.ldapconn.version=3 auths.instance.ldap1.ldap.maxConns=15 auths.instance.ldap1.ldap.minConns=3 auths.instance.ldap1.ldapByteAttributes= auths.instance.ldap1.ldapStringAttributes=mail,cn,uid,edipi,pcc,firstname,lastname,exec-edipi,exec-pcc,exec-mail,certsToAdd,tokenCUID,tokenType auths.instance.ldap1.ldapStringAttributes._000=################################# auths.instance.ldap1.ldapStringAttributes._001=# For isExternalReg auths.instance.ldap1.ldapStringAttributes._002=# attributes will be available as auths.instance.ldap1.ldapStringAttributes._003=# $<attribute>$ auths.instance.ldap1.ldapStringAttributes._004=# attributes example: auths.instance.ldap1.ldapStringAttributes._005=#mail,cn,uid,edipi,pcc,firstname,lastname,exec-edipi,exec-pcc,exec-mail,certsToAdd,tokenCUID,tokenType auths.instance.ldap1.ldapStringAttributes._006=################################# auths.instance.ldap1.pluginName=UidPwdDirAuth auths.instance.ldap1.ui.description.en=This authenticates user against the LDAP directory. auths.instance.ldap1.ui.id.PASSWORD.credMap.authCred=pwd auths.instance.ldap1.ui.id.PASSWORD.credMap.msgCred.extlogin=PASSWORD auths.instance.ldap1.ui.id.PASSWORD.credMap.msgCred.login=password auths.instance.ldap1.ui.id.PASSWORD.description.en=LDAP Password auths.instance.ldap1.ui.id.PASSWORD.name.en=LDAP Password auths.instance.ldap1.ui.id.UID.credMap.authCred=uid auths.instance.ldap1.ui.id.UID.credMap.msgCred.extlogin=UID auths.instance.ldap1.ui.id.UID.credMap.msgCred.login=screen_name auths.instance.ldap1.ui.id.UID.description.en=LDAP User ID auths.instance.ldap1.ui.id.UID.name.en=LDAP User ID auths.instance.ldap1.ui.retries=3 auths.instance.ldap1.ui.title.en=LDAP Authentication
UidPwdDirAuthentication
認証インスタンスと同様に設定されます。これは、いずれも同じプラグインで処理されるためです。ただし、TPS では、CA 設定に加えて追加のパラメーターが必要になります。
auths.instance.ldap1.ui.id.UID.name.en=LDAP User ID
パラメーターおよび auths.instance.ldap1.ui.id.PASSWORD.name.en=LDAP Password
パラメーターによって制御されます。この設定では、クライアントが UID/password ペアを LDAP User ID および LDAP Password として表示するように指示します。どちらのパラメーターもカスタマイズできます。
credMap.authCred
エントリーは、内部認証プラグインが提示された情報を受け入れる方法を設定し、credMap.msgCred
エントリーは、この情報が TPS に渡される方法を設定します。これらのフィールドでは、カスタマイズされたプラグインの実装を使用でき、カスタム認証プラグインを使用しない限り、デフォルト値のままにする必要があります。
6.9. コネクター
tps.connector.ca1.enable=true tps.connector.ca1.host=host1.EXAMPLE.com tps.connector.ca1.maxHttpConns=15 tps.connector.ca1.minHttpConns=1 tps.connector.ca1.nickName=subsystemCert cert-pki-tomcat tps.connector.ca1.port=8443 tps.connector.ca1.timeout=30 tps.connector.ca1.uri.enrollment=/ca/ee/ca/profileSubmitSSLClient tps.connector.ca1.uri.getcert=/ca/ee/ca/displayBySerial tps.connector.ca1.uri.renewal=/ca/ee/ca/profileSubmitSSLClient tps.connector.ca1.uri.revoke=/ca/ee/subsystem/ca/doRevoke tps.connector.ca1.uri.unrevoke=/ca/ee/subsystem/ca/doUnrevoke tps.connector.kra1.enable=true tps.connector.kra1.host=host1.EXAMPLE.com tps.connector.kra1.maxHttpConns=15 tps.connector.kra1.minHttpConns=1 tps.connector.kra1.nickName=subsystemCert cert-pki-tomcat tps.connector.kra1.port=8443 tps.connector.kra1.timeout=30 tps.connector.kra1.uri.GenerateKeyPair=/kra/agent/kra/GenerateKeyPair tps.connector.kra1.uri.TokenKeyRecovery=/kra/agent/kra/TokenKeyRecovery tps.connector.tks1.enable=true tps.connector.tks1.generateHostChallenge=true tps.connector.tks1.host=host1.EXAMPLE.com tps.connector.tks1.keySet=defKeySet tps.connector.tks1.maxHttpConns=15 tps.connector.tks1.minHttpConns=1 tps.connector.tks1.nickName=subsystemCert cert-pki-tomcat tps.connector.tks1.port=8443 tps.connector.tks1.serverKeygen=true tps.connector.tks1.timeout=30 tps.connector.tks1.tksSharedSymKeyName=sharedSecret tps.connector.tks1.uri.computeRandomData=/tks/agent/tks/computeRandomData tps.connector.tks1.uri.computeSessionKey=/tks/agent/tks/computeSessionKey tps.connector.tks1.uri.createKeySetData=/tks/agent/tks/createKeySetData tps.connector.tks1.uri.encryptData=/tks/agent/tks/encryptData
op.enroll.userKey.keyGen.signing.ca.conn=ca1
6.10. 失効ルーティングの設定
tps.connCAList=ca1,ca2
nssdb
に追加し、信頼を設定する必要があります。
#
cd <TPS instance directory>/alias
#
certutil -d . -A -n <CA signing cert nickname> -t “CT,C,C” -i <CA signing cert b64 file name>
tps.connector.ca1.caNickname=caSigningCert cert-pki-tomcat CA
tps.connector.ca1.caSKI=i9wOnN0QZLkzkndAB1MKMcjbRP8=
6.11. サーバー側の鍵生成の設定
- KRA の TPS コネクターパラメーター:
tps.connector.kra1.enable=true tps.connector.kra1.host=host1.EXAMPLE.com tps.connector.kra1.maxHttpConns=15 tps.connector.kra1.minHttpConns=1 tps.connector.kra1.nickName=subsystemCert cert-pki-tomcat tps.connector.kra1.port=8443 tps.connector.kra1.timeout=30 tps.connector.kra1.uri.GenerateKeyPair=/kra/agent/kra/GenerateKeyPair tps.connector.kra1.uri.TokenKeyRecovery=/kra/agent/kra/TokenKeyRecovery
- サーバー側の鍵生成用の TPS プロファイル固有のパラメーター:
op.enroll.userKey.keyGen.encryption.serverKeygen.archive=true op.enroll.userKey.keyGen.encryption.serverKeygen.drm.conn=kra1 op.enroll.userKey.keyGen.encryption.serverKeygen.enable=true
serverKeygen.archive
のserverKeygen.enable=true
オプションを有効にします。重要LunaSA HSM は、RSA 暗号化用に 2048 ビットより小さい鍵サイズに対応しません。たとえば、鍵のサイズを 2048 ビットに設定するには、/var/lib/pki/instance_name/tps/conf/CS.cfg
ファイルに以下のパラメーターを設定します。op.enroll.userKey.keyGen.encryption.keySize=2048
- TKS 設定:
- 以下は、(TPS を介して) TKS と KRA との間の通信に使用されるトランスポート証明書のニックネームを設定します。
tks.drm_transport_cert_nickname=transportCert cert-pki-tomcat KRA
参照したトランスポート証明書も TKS インスタンスセキュリティーモジュールに存在する必要があります。以下に例を示します。transportCert cert-pki-tomcat KRA u,u,u
- KRA の設定
- PKCS#11 トークンに応じて、
kra.keygen.temporaryPairs
パラメーター、kra.keygen.sensitivePairs
パラメーター、およびkra.keygen.extractablePairs
パラメーターは、鍵生成オプションに合わせてカスタマイズできます。これらのパラメーターはすべて、デフォルトでfalse
に設定されます。これらのパラメーターの値は、Red Hat Certificate System でサポートされているセキュリティーモジュールでテストされています。- NSS (FIPS モードの場合):
kra.keygen.extractablePairs=true
- nCipher neld Connect 6000 (デフォルトでは指定なしの機能)
- RSA 鍵を指定する場合:
kra.keygen.temporaryPairs=true
(他のパラメーターは指定しないでください。)ECC キーを生成する場合:kra.keygen.temporaryPairs=true kra.keygen.sensitivePairs=false kra.keygen.extractablePairs=true
- LunaSA CKE - Key Export Model (非 FIPS モード):
kra.keygen.temporaryPairs=true kra.keygen.sensitivePairs=true kra.keygen.extractablePairs=true
6.12. 新しい鍵セットの設定
- TKS 設定
- デフォルトのキーセットは、
/var/lib/pki/instance_name/tks/conf/CS.cfg
ファイルで以下のオプションを使用して TKS に設定されます。tks.defKeySet._000=## tks.defKeySet._001=## Axalto default key set: tks.defKeySet._002=## tks.defKeySet._003=## tks.defKeySet.mk_mappings.#02#01=<tokenname>:<nickname> tks.defKeySet._004=## tks.defKeySet.auth_key=#40#41#42#43#44#45#46#47#48#49#4a#4b#4c#4d#4e#4f tks.defKeySet.kek_key=#40#41#42#43#44#45#46#47#48#49#4a#4b#4c#4d#4e#4f tks.defKeySet.mac_key=#40#41#42#43#44#45#46#47#48#49#4a#4b#4c#4d#4e#4f tks.defKeySet.nistSP800-108KdfOnKeyVersion=00 tks.defKeySet.nistSP800-108KdfUseCuidAsKdd=false
上記の設定は、TMS で使用できる特定のタイプまたはクラスのトークンに固有の設定を定義します。最も重要な部分は、3 つの開発者キーまたは (すぐに使用できる) セッションキーです。これらは、対称キーのハンドオーバーが行われる前に安全なチャネルを作成するために使用されます。これらのキーのタイプが異なる場合には、これらのキーに異なるデフォルト値が設定される可能性があります。nistSP800
キー分散方式を記述した設定では、この方式を使用するか、標準的な Visa 方式を使用するかを制御します。具体的には、tks.defKeySet.nistSP800-108KdfOnKeyVersion
オプションの値により NIST バージョンが使用されることが判断されます。このnistSP800-108KdfUseCuidAsKdd
オプションを使用すると、処理時に CUID のレガシーキー ID 値を使用できます。新しい KDD 値が最も一般的に使用されるため、このオプションはデフォルトで無効 (false
) になります。これにより、新しいキーセットを設定して、新しいクラスのキーのサポートを有効にすることができます。例6.2
jForte
クラスのサポートの有効化jForte
クラスのサポートを有効にするには、以下を設定します。tks.jForte._000=## tks.jForte._001=## SAFLink's jForte default key set: tks.jForte._002=## tks.jForte._003=## tks.jForte.mk_mappings.#02#01=<tokenname>:<nickname> tks.jForte._004=## tks.jForte.auth_key=#30#31#32#33#34#35#36#37#38#39#3a#3b#3c#3d#3e#3f tks.jForte.kek_key=#50#51#52#53#54#55#56#57#58#59#5a#5b#5c#5d#5e#5f tks.jForte.mac_key=#40#41#42#43#44#45#46#47#48#49#4a#4b#4c#4d#4e#4f tks.jForte.nistSP800-108KdfOnKeyVersion=00 tks.jForte.nistSP800-108KdfUseCuidAsKdd=false
以前の例と比較して、3 つの静的セッションキーの違いに注意してください。Certificate System は、Giesecke & Devrient (G&D) Smart Cafe 6 スマートカードの Secure Channel Protocol 03 (SCP03) をサポートします。TKS でこれらのスマートカードに対する SCP03 サポートを有効にするには、/var/lib/pki/instance_name/tks/conf/CS.cfg
ファイルに設定します。tks.defKeySet.prot3.divers=emv tks.defKeySet.prot3.diversVer1Keys=emv tks.defKeySet.prot3.devKeyType=DES3 tks.defKeySet.prot3.masterKeyType=DES3
- TPS 設定
- サポートしているクライアントがトークンで操作を実行しようとすると、TPS が新しいキーセットを認識するように設定する必要があります。デフォルトの
defKeySet
は、ほとんどの場合使用されます。TPS でkeySet
を決定する主な方法は、「Mapping Resolver の設定」 を決定します。このリゾルバーメカニズムを確立するために必要な正確な設定については、リンクされたセクションを参照してください。KeySet Mapping Resolver が存在しない場合は、TPS が適切なkeySet
を決定するのに複数のフォールバック方法を使用できます。- TPS の
CS.cfg
設定ファイルに、tps.connector.tks1.keySet=defKeySet
を追加できます。 - 特定のクライアントは、希望する
keySet
値を明示的に渡すように設定することもできます。ただし、現時点では、Enterprise Security Client にはこの機能はありません。 - TPS が希望の方法に基づいて適切な
keySet
を計算すると、セキュアなチャネルの作成にもkeySet
値を渡すことができるように TKS へのすべての要求を計算します。その後、TKS は (上記の説明) 独自のkeySet
設定を使用し、続行方法を決定します。
6.13. 新しいマスターキーの設定
手順6.1 新規マスターキーの作成
- TKS セキュリティーデータベースへのアクセスに必要な PIN の内部を取得します。
#
cat /var/lib/pki/pki-tomcat/tks/conf/password.conf internal=649713464822 internaldb=secret12 replicationdb=-752230707 - TKS インスタンスの
alias/
ディレクトリーを開きます。#
cd /var/lib/pki/pki-tomcat/alias - tkstool ユーティリティーを使用して新規マスターキーを生成します。以下に例を示します。
#
tkstool -M -n new_master -d /var/lib/pki/pki-tomcat/alias -h <token_name> Enter Password or Pin for "NSS Certificate DB": Generating and storing the master key on the specified token . . . Naming the master key "new_master" . . . Computing and displaying KCV of the master key on the specified token . . . new_master key KCV: CA5E 1764 - 鍵がデータベースに正しく追加されていることを確認します。
#
tkstool -L -d . slot: NSS User Private Key and Certificate Services token: NSS Certificate DB Enter Password or Pin for "NSS Certificate DB": <0> new_master
6.13.1. ラップされたマスターキーの生成および転送 (Key Ceremony)
手順6.2 ラップされたマスターキーの生成および転送
- Token Key Service セキュリティーデータベースへのアクセスに必要な内部 PIN を取得します。
#
cat /var/lib/pki/pki-tomcat/tks/conf/password.conf internal=649713464822 internaldb=secret12 replicationdb=-752230707 - TKS インスタンスの
alias/
ディレクトリーを開きます。#
cd /var/lib/pki/pki-tomcat/alias transport
という名前のトランスポートキーを作成します。#
tkstool -T -d . -n transport注記tkstool ユーティリティーは、生成された 3 つのセッションキーごとにキー共有と KCV 値を出力します。この手順の後半で新しいデータベースにトランスポートキーを再生成する必要がある場合に、それらをファイルに保存し、失われた場合はキーを再生成します。- プロンプトが表示されたら、データベースのパスワードを入力します。次に、画面の指示に従って、ランダムなシードを生成します。
A random seed must be generated that will be used in the creation of your key. One of the easiest ways to create a random seed is to use the timing of keystrokes on a keyboard. To begin, type keys on the keyboard until this progress meter is full. DO NOT USE THE AUTOREPEAT FUNCTION ON YOUR KEYBOARD! Continue typing until the progress meter is full: |************************************************************| Finished. Type the word "proceed" and press enter
- 次のプロンプトにより、一連のセッションキーが生成されます。最終メッセージになるまで、画面の指示に従ってください。
Successfully generated, stored, and named the transport key!
- トランスポートキーを使用してマスターキーを生成してラップし、これを
file
という名前のファイルに保存します。#
tkstool -W -d . -n new_master -t transport -o file Enter Password or Pin for "NSS Certificate DB": Retrieving the transport key (for wrapping) from the specified token . . . Generating and storing the master key on the specified token . . . Naming the master key "new_master" . . . Successfully generated, stored, and named the master key! Using the transport key to wrap and store the master key . . . Writing the wrapped data (and resident master key KCV) into the file called "file" . . . wrapped data: 47C0 06DB 7D3F D9ED FE91 7E6F A7E5 91B9 master key KCV: CED9 4A7B (computed KCV of the master key residing inside the wrapped data) - ラップされたマスターキーを適切な場所またはファシリティーにコピーします。
- 必要な場合は、HSM またはファシリティーで新しいセキュリティーデータベースを生成します。
#
tkstool -N -d <directory>新たなデータベースで生成した鍵と同じ鍵を生成する-l
オプションを追加します。この方法でトランスポートキーを再生成するには、この手順で前のステップで生成した各セッションキーに対してセッションキー共有と KCV を入力する必要があります。#
tkstool -I -d <directory> -n verify_transport - トランスポートキーを使用して、ファイルに保存されているマスターキーをアンラップします。要求されたら、セキュリティーデータベースの PIN を入力します。
#
tkstool -U -d directory -n new_master -t verify_transport -i file Enter Password or Pin for "NSS Certificate DB": Retrieving the transport key from the specified token (for unwrapping) . . . Reading in the wrapped data (and resident master key KCV) from the file called "file" . . . wrapped data: 47C0 06DB 7D3F D9ED FE91 7E6F A7E5 91B9 master key KCV: CED9 4A7B (pre-computed KCV of the master key residing inside the wrapped data) Using the transport key to temporarily unwrap the master key to recompute its KCV value to check against its pre-computed KCV value . . . master key KCV: CED9 4A7B (computed KCV of the master key residing inside the wrapped data) master key KCV: CED9 4A7B (pre-computed KCV of the master key residing inside the wrapped data) Using the transport key to unwrap and store the master key on the specified token . . . Naming the master key "new_master" . . . Successfully unwrapped, stored, and named the master key! - 鍵がデータベースに追加されたことを確認します。
#
tkstool -L -d slot: NSS User Private Key and Certificate Services token: NSS Certificate DB Enter Password or Pin for "NSS Certificate DB": <0> transport <1> new_master
6.14. TKS/TPS 共有対称キーの設定
NSS
データベースに存在する必要があります。このキーは、TPS サブシステムの作成時に自動的に生成されます。TPS と TKS の両方が同じ Tomcat インスタンスにインストールされている場合は、TKS により自動的に鍵を使用するため、追加の設定は必要ありません。ただし、両方のサブシステムが別のインスタンス上にある場合や、別の物理ホストがある場合は、本セクションで説明されている手順に従って鍵を TKS に安全に転送する必要があります。
- authomatic メソッド: このメソッドは、TPS のサブシステム証明書がソフトウェア NSS データベースに保持されている場合に機能します。
- 上記の方法が失敗した場合は、フォールバック手動の方法を使用できます。この方法では、TPS からキーをラップできる tkstool ユーティリティーを使用して TPS で共有キーを生成できます。これにより、転送中にキーを公開せずに安全な転送を可能にし、TKS NSS データベースにアンラップします。
- TKS
tks.useNewSharedSecretNames=true tps.0.host=dhcp-16-206.sjc.example.com tps.0.nickname=TPS-<tps host name>-8443 sharedSecret tps.0.port=8443 tps.0.userid=,TPS-<tps host name>-8443 tps.list=0
注記上記のリストは、TKS が複数の TPS インスタンスに接続している場合に拡張できます。- TPS
conn.tks1.tksSharedSymKeyName=TPS-<tps host name>-8443 sharedSecret
注記ホスト名は、TKS 側で設定されるホスト名と同じでなければなりません。
6.14.1. 共有対称キーを手動で生成して転送
手順6.3 手動共有シークレットキーメソッド - TKS 側
- 最初のシステムにトークンキーサービスをインストールします。インストール手順については、『Red Hat Certificate System 計画、インストール、およびデプロイメントのガイド』 を参照してください。
- TKS サービスを停止します。
#
systemctl stop pki-tomcatd@pki-tomcat.service /var/lib/pki/pki-tomcat/alias
ディレクトリーに移動し、tkstool を使用して TKS で共有の秘密鍵を作成します。新しい TKS インスタンスを再起動する前に、共有鍵を生成してください。重要tkstool スクリプトにより、キーの作成プロセス中に鍵に関する情報が表示されます。後でキーを TPS にインポートするのに必要となるため、この情報を書き留めてください。#
cd /var/lib/pki/pki-tomcat/alias#
tkstool -T -d /var/lib/pki/pki-tomcat/tks/alias -n TPS-<tps host name>-8443 sharedSecret Generating the first session key share . . . first session key share: 792F AB89 8989 D902 9429 6137 8632 7CC4 first session key share KCV: D1B6 14FD Generating the second session key share . . . second session key share: 4CDF C8E0 B385 68EC 380B 6D5E 1C19 3E5D second session key share KCV: 1EC7 8D4B Generating the third session key share . . . third session key share: CD32 3140 25B3 C789 B54F 2C94 26C4 9752 third session key share KCV: 73D6 8633 Generating first symmetric key . . . Generating second symmetric key . . . Generating third symmetric key . . . Extracting transport key from operational token . . . transport key KCV: A8D0 97A2 Storing transport key on final specified token . . . Naming transport key "sharedSecret" . . . Successfully generated, stored, and named the transport key!- TKS に新しいキーを設定します。
tks.useNewSharedSecretNames=true tps.0.host=dhcp-16-206.sjc.redhat.com tps.0.nickname=TPS-<tps host name>-8443 sharedSecret tps.0.port=8443 tps.0.userid=TPS-<tps host name>-8443 sharedSecret tps.list=0
- TKS を起動します。
#
systemctl start pki-tomcatd@pki-tomcat.service
手順6.4 手動による共有シークレットキーメソッド - TPS 側
- 2 番目のシステムに Token Processing System をインストールします。インストール手順については、『Red Hat Certificate System 9 計画、インストール、およびデプロイメントのガイド』 を参照してください。
- TPS サービスを停止します。
#
systemctl stop pki-tomcatd@pki-tomcat.service /var/lib/pki/pki-tomcat/alias
ディレクトリーに移動し、tkstool を使用して NSS ソフトウェアトークンに共有鍵をインポートします。#
cd /var/lib/pki/pki-tomcat/alias#
tkstool -I -d . -n TPS-<tps host name>-8443 sharedSecretこの時点で、スクリプトは上記の手順の TKS 側で共有鍵を生成およびラップする際に表示されるセッションキー共有を求めるプロンプトを表示します。- TPS で共有シークレットを設定します。
conn.tks1.tksSharedSymKeyName=TPS-<tps host name>-8443 sharedSecret
- TPS サービスを起動します。
#
systemctl start pki-tomcatd@pki-tomcat.service
6.15. 異なる SCP バージョンでの異なるアプレットの使用
/var/lib/instance_name/tps/conf/CS.cfg
ファイルの以下のパラメーターで、各トークン操作に対してすべての Secure Channel Protocol (SCP) バージョンに読み込むアプレットを指定します。
op.operation.token_type.update.applet.requiredVersion=version
op.operation.token_type.update.applet.requiredVersion.prot.protocol_version=version
- format
- enroll
- pinReset
例6.3 登録操作用のプロトコルバージョンの設定
userKey
トークンの登録操作を実行するときに、SCP03 に特定のアプレットを設定し、他のすべてのプロトコルに別のアプレットを設定するには、以下を行います。
/var/lib/instance_name/tps/conf/CS.cfg
ファイルを編集します。- デフォルトで使用されるアプレットを指定するには、
op.enroll.userKey.update.applet.requiredVersion
パラメーターを設定します。以下に例を示します。op.enroll.userKey.update.applet.requiredVersion=1.4.58768072
op.enroll.userKey.update.applet.requiredVersion.prot.3
パラメーターを設定して、アプレットの Certificate System が SCP03 プロトコルに使用するように設定します。以下に例を示します。op.enroll.userKey.update.applet.requiredVersion.prot.3=1.5.558cdcff
- Certificate System を再起動します。
systemctl restart pki-tomcatd@instance_name.service
第7章 証明書の取り消しおよび CRL 発行
7.1. 証明書の失効について
- 失効要求が CA によって受け取られ、承認されている場合は、証明書を取り消します。
- 失効した証明書のステータスを、その有効性ステータスを確認する必要のある関係者またはアプリケーションが利用できるようにします。
7.1.1. ユーザーが開始した失効
7.1.2. 証明書の失効理由
- 0不特定 (特に理由はありません)。
- 1証明書に関連する秘密鍵が侵害されました。
- 2証明書を発行した CA に関連付けられた秘密鍵が危険にさらされました。
- 3証明書の所有者は、証明書の発行者とは関係がなくなり、その証明書で取得したアクセス権を失ったか、証明書を必要としなくなりました。
- 4別の証明書がこれに置き換わります。
- 5証明書を発行した CA は、操作する予定です。
- 6証明書は、さらなるアクションが行われるまで保留されています。これは取り消されたものとして処理されますが、証明書がアクティブで再度有効になるように、将来保持されないことがあります。
- 8証明書は保留から削除されたため、CRL から 削除 されます。これはデルタ CRL でのみ有効です。
- 9証明書の所有者の権限が撤回されているため、証明書は取り消されます。
7.1.3. CRL 発行ポイント
7.1.4. Delta CRL
7.1.5. CRL の公開
7.1.6. 証明書失効ページ
UserRevocation.html
(SSL/TSL クライアント認証によるクライアントまたは個人証明書の失効を許可するフォーム) を編集します。このファイルは、/var/lib/instance_name/webapps/subsystem_type/ee/subsystem_type
ディレクトリーにあります。
7.2. CMC 失効の実行
subjectDN
属性を使用するエージェント証明書またはユーザー証明書のいずれかを使用して失効要求に署名できます。これにより、ユーザーは署名済み要求を Certificate Manager に送信できます。
CMCRequest
詳細は、「CMCRequest
を使用した証明書の取り消し」 を参照してください。CMCRevoke
詳細は、「CMCRevoke
を使用した証明書の取り消し」 を参照してください。
CMCRequest
ユーティリティーを使用して、失効要求の生成を推奨します。これは、CMCRevoke
よりも多くのオプションを提供するためです。
7.2.1. CMCRequest
を使用した証明書の取り消し
CMCRequest
を使用して証明書を取り消すには、以下を実行します。
- 以下の内容で、
/home/user_name/cmc-request.cfg
などの CMC 失効要求の設定ファイルを作成します。#numRequests: Total number of PKCS10 requests or CRMF requests. numRequests=1 #output: full path for the CMC request in binary format output=/home/user_name/cmc.revoke.userSigned.req #tokenname: name of token where user signing cert can be found #(default is internal) tokenname=internal #nickname: nickname for user signing certificate which will be used #to sign the CMC full request. nickname=signer_user_certificate #dbdir: directory for cert8.db, key3.db and secmod.db dbdir=/home/user_name/.dogtag/nssdb/ #password: password for cert8.db which stores the user signing #certificate and keys password=myPass #format: request format, either pkcs10 or crmf. format=pkcs10 ## revocation parameters revRequest.enable=true revRequest.serial=45 revRequest.reason=unspecified revRequest.comment=user test revocation revRequest.issuer=issuer revRequest.sharedSecret=shared_secret
- CMC 要求を作成します。
# CMCRequest /home/user_name/cmc-request.cfg
コマンドが成功すると、CMCRequest
ユーティリティーは、要求設定ファイルのoutput
パラメーターで指定されたファイルに CMC 要求を保存します。 /home/user_name/cmc-submit.cfg
などの設定ファイルを作成します。このファイルは、後で CMC 取り消し要求を CA に送信します。作成されたファイルに以下の内容を追加します。#host: host name for the http server host=>server.example.com #port: port number port=8443 #secure: true for secure connection, false for nonsecure connection secure=true #input: full path for the enrollment request, the content must be #in binary format input=/home/user_name/cmc.revoke.userSigned.req #output: full path for the response in binary format output=/home/user_name/cmc.revoke.userSigned.resp #tokenname: name of token where SSL client authentication certificate #can be found (default is internal) #This parameter will be ignored if secure=false tokenname=internal #dbdir: directory for cert8.db, key3.db and secmod.db #This parameter will be ignored if secure=false dbdir=/home/user_name/.dogtag/nssdb/ #clientmode: true for client authentication, false for no client #authentication. This parameter will be ignored if secure=false clientmode=true #password: password for cert8.db #This parameter will be ignored if secure=false and clientauth=false password=password #nickname: nickname for client certificate #This parameter will be ignored if clientmode=false nickname=signer_user_certificate
重要CMC 失効要求に署名されている場合は、secure
パラメーターおよびclientmode
パラメーターも true に設定します。さらにnickname
パラメーターも入力します。- 要求に署名したユーザーに応じて、
HttpClient
の設定ファイルのservlet
パラメーターを適切に設定する必要があります。- エージェントが要求に署名した場合は、以下を設定します。
servlet=/ca/ee/ca/profileSubmitCMCFull
- ユーザーが要求に署名した場合は、以下を設定します。
servlet=/ca/ee/ca/profileSubmitSelfSignedCMCFull
- CMC 要求を送信します。
# HttpClient /home/user_name/cmc-submit.cfg
CMCRequest
を使用して証明書の取り消しの詳細は、CMCRequest(1) man ページを参照してください。
7.2.2. CMCRevoke
を使用した証明書の取り消し
- 0: 指定無し
- 1: キーが侵害されました。
- 2: CA キーが侵害されました
- 3: 従業員の所属が変更になりました
- 4: 証明書が置き換えられました
- 5: 運用停止
- 6: 証明書が保留中です
7.2.2.1. CMCRevoke のテスト
- 既存の証明書の CMC 失効要求を作成します。
CMCRevoke -d/path/to/agent-cert-db -nnickname -iissuerName -sserialName -mreason -ccomment
たとえば、エージェント証明書を含むディレクトリーは ~jsmith/.mozilla/firefox/ で、証明書のニックネームは AgentCert で、証明書のシリアル番号は 22 の場合、コマンドは次のとおりですCMCRevoke -d"~jsmith/.mozilla/firefox/" -n"ManagerAgentCert" -i"cn=agentAuthMgr" -s22 -m0 -c"test comment"
注記引用符で囲まれたスペースを含む値を囲みます。重要引数とその値の間には空白を入れないでください。たとえば、26 のシリアル番号は-26
ではなく、-s 26
となります。 - エンドエンティティーを開きます。
http
s
://server.example.com:8443/ca/ee/ca
- Revocation タブを選択します。
- メニューの CMC Revoke リンクを選択します。
- CMCRevoke からテキストエリアに出力を貼り付けます。
- 貼り付けられたコンテンツから -----BEGIN NEW CERTIFICATE REQUEST----- および ----END NEW CERTIFICATE REQUEST----- を削除します。
- Submit をクリックします。
- 返されるページは、正しい証明書が取り消されていることを確認します。
7.3. CRL の実行
- Certificate Manager は、その CA 署名証明書キーを使用して CRL に署名します。CRL に個別の署名キーペアを使用するには、CRL 署名キーを設定し、このキーを使用して CRL に署名するように Certificate Manager の設定を変更します。詳細は、「異なる証明書を使用するように CA を設定して CRL を署名」を参照してください。
- CRL 発行ポイントの設定発行ポイントは、マスター CRL に対してすでにセットアップされ、有効にされています。
図7.1 デフォルトの CRL 発行ポイント
CRL の追加の発行ポイントを作成できます。詳細は、「発行ポイントの設定」を参照してください。発行ポイントを設定して CRL のリストを定義するときに設定したオプションに応じて、発行ポイントが作成できる CRL には 5 つのタイプがあります。- マスター CRL には、CA 全体から失効した証明書の一覧が含まれます。
- ARL は、失効した CA 証明書のみが含まれる Authority Revocation List です。
- 期限切れの証明書を持つ CRL には、CRL で有効期限が切れた証明書が含まれます。
- 証明書プロファイルの CRL は、最初に証明書を作成するために使用されるプロファイルに基づいて、失効した証明書を判別します。
- 理由コードによる CRL は、失効した理由コードに基づいて、失効した証明書を判別します。
- 各発行ポイントに CRL を設定します。詳細は、「各発行ポイントの CRL の設定」を参照してください。
- 発行ポイントに設定された CRL 拡張機能を設定します。詳細は、「CRL 拡張機能の設定」 を参照してください。
- 発行ポイントの拡張を有効にすることにより、発行ポイントにデルタ CRL を設定するか、または発行ポイント DeltaCRLIndicator または CRLNumber. の拡張を有効にします。
- 発行先に関する情報が含まれるように CRLDistributionPoint 拡張機能を設定します。
- ファイル、LDAP ディレクトリー、または OCSP レスポンダーへの公開 CRL を設定します。公開の設定の詳細は、8章証明書および CRL の公開 を参照してください。
7.3.1. 発行ポイントの設定
- CertificateCertificate Systemnbsp;System コンソールを開きます。
pkiconsole https://server.example.com:8443/ca
- Configuration タブで、左側のナビゲーションメニューから Certificate Manager を展開します。次に、CRL Issuing Points を選択します。
- 発行ポイントを編集するには、発行ポイントを選択して、Edit をクリックします。編集できるパラメーターは、発行ポイントの名前と、発行ポイントが有効か無効かだけです。発行ポイントを追加するには、Add をクリックします。CRL Issuing Point エディターウインドウが開きます。
図7.2 CRL Issuing Point エディター
注記一部のフィールドがコンテンツを読み取るのに十分な大きさで表示されない場合は、コーナーの 1 つをドラッグしてウィンドウを拡大します。以下のフィールドに入力します。- Enable。選択した場合は発行ポイントを有効にします。無効にする場合は選択を解除します。
- CRL Issuing Point name。発行ポイントの名前を指定します。スペースは使用できません。
- Description。発行ポイントを説明します。
- OK をクリックします。
7.3.2. 各発行ポイントの CRL の設定
- CA コンソールを開きます。
pkiconsole https://server.example.com:8443/ca
- ナビゲーションツリーで、Certificate Manager を選択し、CRL Issuing Points を選択します。
- Issuing Points エントリーの下に、発行ポイント名を選択します。
- 発行ポイントの Update タブに情報を指定して、CRL の更新方法および頻度を設定します。このタブには、Update Schema および Update Frequency の 2 つのセクションがあります。
- Update Schema セクションには以下のオプションが含まれます。
- Enable CRL generation。このチェックボックスは、発行ポイントに CRL が生成されるかどうかを設定します。
- Generate full CRL every # delta(s)。このフィールドは、変更の数に関連して CRL が作成された頻度を設定します。
- Extend next update time in full CRLs。これにより、生成された CRL に nextUpdate フィールドを設定するオプションが提供されます。
nextUpdate
パラメーターは、フル CRL かデルタ CRL かに関係なく、次の CRL が発行される日付を示します。フル CRL とデルタ CRL の組み合わせを使用している場合は、Extend next update time in full CRLs
を有効にすると、フル CRL のnextUpdate
パラメーターに次の フル CRL が発行されるタイミングを表示させることができます。それ以外の場合は、フル CRL のnextUpdate
パラメーターは、そのデルタが次に発行される CR L になるため、次の デルタ CRL がいつ発行されるかを示します。
- Update Frequency セクションは、CRL が生成され、ディレクトリーに発行されたときに異なる間隔を設定します。
- Every time a certificate is revoked or released from hold。これにより、証明書を取り消すたびに Certificate Manager が CRL を生成するよう設定されます。Certificate Manager は、CRL が生成されるたびに、設定されたディレクトリーに CRL を発行しようとします。CRL の生成は、CRL のサイズが大きい場合に消費できます。証明書が取り消されるたびに CRL を生成するように Certificate Manager を設定すると、サーバーがかなりの時間使用される可能性があります。この間、サーバーは受け取った変更でディレクトリーを更新できなくなります。この設定は、標準的なインストールには推奨されません。このオプションは、サーバーが CRL をフラットファイルに発行したかどうかのテストなど、すぐに失効をテストするために選択する必要があります。
- Next update grace period。Certificate Manager が特定の頻度で CRL を更新する場合、サーバーは、CRL を作成して発行する時間を確保するために、次の更新時間までの猶予期間を持つように設定できます。たとえば、サーバーが 2 分の猶予期間で 20 分ごとに CRL を更新するように設定されていて、CRL が 16:00 に更新された場合、CRL は 16:18 に再更新されます。
重要既知の問題により、現在フルおよびデルタの証明書失効リストのスケジュールを設定している場合、Update CRL every time a certificate is revoked or released from hold
オプションでは、2 つのgrace period
設定を記入する必要もあります。したがって、このオプションを選択するには、最初にUpdate CRL every
オプションを選択して、する必要がありますし、Next update grace period # minutes
ボックスに番号を入力する必要があります。 - Cache タブは、キャッシュが有効であるかどうかとキャッシュ頻度を設定します。
図7.3 CRL キャッシュタブ
- Enable CRL cache。このチェックボックスは、デルタ CRL の作成に使用されるキャッシュを有効にします。キャッシュが無効になっている場合は、デルタ CRL は作成されません。キャッシュの詳細は、「証明書の失効について」 を参照してください。
- キャッシュを毎回更新 します。このフィールドは、キャッシュが内部データベースに書き込む頻度を設定します。証明書が取り消されるたびに、キャッシュをデータベースに書き出すには、0 に設定します。
- キャッシュリカバリーを有効 にします。このチェックボックスを選択すると、キャッシュを復元できます。
- Enable CRL cache testing。このチェックボックスは、特定の CRL 発行ポイントの CRL パフォーマンステストを有効にします。このオプションで生成された CRL は、デプロイした CA では使用しないでください。テスト目的で発行された CRL には、パフォーマンステストのみを目的として生成されたデータが含まれているためです。
- フォーマット タブでは、作成される CRL のフォーマットおよびコンテンツを設定します。CRL Format および CRL Contents の 2 つのセクションがあります。
図7.4 CRL 形式タブ
- CRL Format セクションには、以下の 2 つのオプションがあります。
- Revocation list signing algorithm は、CRL 暗号化を行うために許可された暗号のドロップダウンの一覧です。
- Allow extensions for CRL v2 するには、発行ポイントに CRL v2 拡張を有効にするチェックボックスがあります。これが有効な場合は、「CRL 拡張機能の設定」 で説明されている必要な CRL 拡張機能を設定します。
注記CRL を作成するには、拡張機能を有効にする必要があります。 - CRL Contents セクションには、CRL に追加する証明書のタイプを設定する 3 つのチェックボックスがあります。
- Include expired certificates。これには、期限切れになった証明書が含まれます。これを有効にすると、失効した証明書に関する情報は、証明書の期限が切れた後も CRL に残ります。これが有効になっていないと、証明書の有効期限が切れると、失効した証明書に関する情報が削除されます。
- CA certificates only。これには、CRL の CA 証明書のみが含まれます。このオプションを選択すると、失効した CA 証明書のみを一覧表示する Authority Revocation List (ARL) が作成されます。
- Certificates issued according to profiles。これには、リストされたプロファイルに従って発行された証明書のみが含まれます。複数のプロファイルを指定するには、コンマ区切りのリストを入力します。
- Save をクリックします。
- この発行ポイントでは、拡張機能は可能で、設定できます。詳細は「CRL 拡張機能の設定」を参照してください。
7.3.3. CRL 拡張機能の設定
- CA コンソールを開きます。
pkiconsole https://server.example.com:8443/ca
- ナビゲーションツリーで、Certificate Manager を選択し、CRL Issuing Points を選択します。
- Issuing Points エントリーの下にある発行ポイント名を選択し、発行ポイントの下にある CRL 拡張 エントリーを選択します。右側のペインには、設定された拡張機能を一覧表示する CRL Extensions Management タブが表示されます。
図7.5 CRL 拡張機能
- ルールを変更するには、ルールを選択し、Edit/View をクリックします。
- ほとんどの拡張には 2 つのオプションがあり、有効にして、重要なかどうかを設定します。詳細情報が必要なものもあります。必要な値をすべて指定します。各拡張機能およびそれらの拡張機能のパラメーターに関する詳細は、「標準 X.509 v3 CRL 拡張機能リファレンス」 を参照してください。
- OK をクリックします。
- Refresh をクリックし、すべてのルールの更新されたステータスを表示します。
7.3.4. 異なる証明書を使用するように CA を設定して CRL を署名
CS.cfg
ファイルを編集してこの機能を設定する方法は、『Red Hat Certificate System 計画、インストール、およびデプロイメントのガイド』の『異なる証明書を使用するように CA を設定して CRL を署名』セクションを参照してください。
7.3.5. キャッシュからの CRL の生成
enableCRLCache
パラメーターが有効になります。ただし、実稼働環境ではこの Enable CRL cache testing
パラメーターを有効に しないでください。
7.3.5.1. コンソールでのキャッシュからの CRL 生成の設定
- コンソールを開きます。
pkiconsole https://server.example.com:8443/ca
- Configuration タブで、Certificate Manager フォルダーと CRL Issuing Points サブディレクトリーを展開します。
- MasterCRL ノードを選択します。
- Enable CRL cache を選択します。
- 変更を保存します。
7.3.5.2. CS.cfg のキャッシュからの CRL 生成の設定
CS.cfg
ファイルを編集してこの機能を設定する方法は、『Red Hat Certificate System の計画、インストール、およびデプロイメントのガイド』の『CS.cfg のキャッシュからの CRL 生成の設定』セクションを参照してください。
7.4. Full および Delta CRL スケジュールの設定
Interval 1, 2, 3, 4, 5, 6, 7 ... Full CRL 1 4 7 ... Delta CRL 1, 2, 3, 4, 5, 6, 7 ...
7.4.1. コンソールでの CRL 更新間隔の設定
- コンソールを開きます。
pkiconsole https://server.example.com:8443/ca
- Configuration タブで、Certificate Manager フォルダーと CRL Issuing Points サブディレクトリーを展開します。
- MasterCRL ノードを選択します。
- Generate full CRL every # delta(s) フィールドに、必要な間隔を入力します。
- 証明書失効の機会、周期的な間隔、または更新が発生する時間を設定することにより、更新頻度を設定します。
- Update CRL every time a certificate is revoked or released from hold チェックボックスを選択します。Update CRL every time a certificate is revoked or released from hold オプションでも、2 つの Grace period 設定を入力する必要があります。これは既知の問題で、バグは Red Hat Bugzilla で追跡されています。
- Update CRL every time a certificate is revoked or released from hold チェックボックスを選択します。
- Update CRL at チェックボックスを選択し、01:50,04:55,06:55 などの特定の時刻をコンマで区切って入力します。
- Update CRL every チェックボックスを選択し、240 などの必要な間隔を入力します。
- 変更を保存します。

7.4.2. CS.cfg での CRL の更新間隔の設定
CS.cfg
ファイルを編集してこの機能を設定する方法は、『Red Hat Certificate System の計画、インストール、およびデプロイメントのガイド』の『CS.cfg での CRL の更新間隔の設定』セクションを参照してください。
7.4.3. 複数の日における CRL 生成スケジュールの設定
ca.crl.MasterCRL.dailyUpdates=01:00,03:00,18:00;02:00,05:00,17:00
ca.crl.MasterCRL.dailyUpdates=01:00,03:00,18:00,*23:00;02:00,05:00,21:00,*23:30
CS.cfg
ファイルを手動で編集する時に機能します。
7.5. 失効チェックの有効化
7.6. OCSP (Online Certificate Status Protocol) レスポンダーの使用
7.6.1. OCSP レスポンダーの設定
- OCSP レスポンダーに公開されるすべての CA に CRL を設定します。
- OCSP サービスが処理するすべての CA で、公開を有効にし、パブリッシャーを設定し、公開ルールを設定します (8章証明書および CRL の公開)。Certificate Manager が LDAP ディレクトリーに公開され、Online Certificated Status Manager がそのディレクトリーから読み込むように設定している場合は、これは必要ありません。
- 証明書プロファイルは、Certificate Manager が OCSP サービス要求をリッスンする場所を指す Authority Information Access 拡張機能を含むように設定する必要があります (「証明書マネージャーの内部 OCSP サービスの有効化」)。
- OCSP Responder を設定します。
- 失効情報ストア (「失効情報ストアの設定: 内部データベース」 および 「失効情報ストアの設定: LDAP ディレクトリー」) を設定します。
- OCSP レスポンダー (「OCSP レスポンダーへの CA の特定」) へのすべての公開証明書マネージャーを特定します。
- 必要に応じて、OCSP 署名証明書 (「CA 証明書の信頼設定の変更」) に署名した CA に信頼を設定します。
- 設定後に両方のサブシステムを再起動します。
- CA が OCSP レスポンダーに適切に接続されていることを確認します (「証明書マネージャーおよびオンライン証明書ステータスマネージャーの接続の確認」)。
7.6.2. OCSP レスポンダーへの CA の特定
- Certificate Manager の base-64 CA 署名証明書は、CA のエンドエンティティーページから取得します。
- オンライン証明書ステータスマネージャーエージェントページを開きます。URL の形式は https://hostname:SSLport/ocsp/agent/ocsp です。
- 左側のフレームで、Add Certificate Authority をクリックします。
- フォームで、エンコードされた CA 署名証明書を Base 64 encoded certificate (including the header and footer) というラベルの付いたテキスト領域内に貼り付けます。
- 証明書が正常に追加されたことを確認するには、左側のフレームで List Certificate Authorities をクリックします。
7.6.2.1. 証明書マネージャーおよびオンライン証明書ステータスマネージャーの接続の確認
7.6.2.2. 失効情報ストアの設定: 内部データベース
- オンライン証明書ステータスマネージャーコンソールを開きます。
pkiconsole https://server.example.com:8443/ocsp
- Configuration タブで Online Certificate Status Manager を選択し、Revocation Info Stores を選択します。右側のペインには、Online Certificate Status Manager が使用できる 2 つのリポジトリーが表示されます。デフォルトでは、内部データベースで CRL を使用します。
- defStore を選択し、Edit/View をクリックします。
- defStore 値を編集します。
- notFoundAsGood.問題の証明書が CRL のいずれかに見つからない場合は、GOOD の OCSP 応答を返すように OCSP サービスを設定します。これを選択しないと、応答は UNKNOWN になり、クライアントが発生した場合にはエラーメッセージが表示されます。
- byName.OCSP レスポンダーは、応答を行う OCSP レスポンダーの ID を含む基本的な応答タイプのみをサポートします。基本応答タイプの ResponderID フィールドは、
ocsp.store.defStore.byName
パラメーターの値により決定されます。byName
パラメーターが true である、または存在しない場合、OCSP 認証局署名証明書サブジェクト名は OCSP 応答の ResponderID フィールドとして使用されます。byName
パラメーターが false の場合、OCSP 認証局署名証明書キーハッシュは OCSP 応答の ResponderID フィールドになります。 - includeNextUpdate.次の CRL 更新時間のタイムスタンプが含まれます。
7.6.2.3. 失効情報ストアの設定: LDAP ディレクトリー
ldapStore
メソッドが有効になっていると、OCSP ユーザーインターフェイスは証明書のステータスを確認しません。
- オンライン証明書ステータスマネージャーコンソールを開きます。
pkiconsole https://server.example.com:8443/ocsp
- Configuration タブで Online Certificate Status Manager を選択し、Revocation Info Stores を選択します。右側のペインには、Online Certificate Status Manager が使用できる 2 つのリポジトリーが表示されます。デフォルトでは、内部データベースで CRL を使用します。
- LDAP ディレクトリーで CRL を使用するには、Set Default をクリックして ldapStore オプションを有効にします。
- ldapStore を選択し、Edit/View をクリックします。
- ldapStore パラメーターを設定します。
- numConns.OCSP サービスがチェックする必要のある LDAP ディレクトリーの合計数。デフォルトでは、これは 0 に設定されます。この値を設定すると、対応する host フィールド、port フィールド、baseDN フィールド、および refreshInSec フィールドの数が表示されます。
- host.LDAP ディレクトリーの完全修飾 DNS ホスト名。
- port。LDAP ディレクトリーの SSL/TLS ポート以外のポート。
- baseDN.CRL の検索を開始する DN。たとえば、O=example.com です。
- refreshInSec.接続が更新される頻度。デフォルトは 86400 秒 (毎日) です。
- caCertAttr.デフォルト値である cACertificate;binary はそのままにしておきます。これは、Certificate Manager がその CA 署名証明書を公開する属性です。
- crlAttr.デフォルト値である certificateRevocationList;binary はそのままにしておきます。これは、Certificate Manager が CRL を公開する属性です。
- notFoundAsGood.問題の証明書が CRL のいずれかに見つからない場合は、GOOD の OCSP 応答を返すように OCSP サービスを設定します。これを選択しないと、応答は UNKNOWN になり、クライアントが発生した場合にはエラーメッセージが表示されます。
- byName.OCSP レスポンダーは、応答を行う OCSP レスポンダーの ID を含む基本的な応答タイプのみをサポートします。基本応答タイプの ResponderID フィールドは、
ocsp.store.defStore.byName
パラメーターの値により決定されます。byName
パラメーターが true である、または存在しない場合、OCSP 認証局署名証明書サブジェクト名は OCSP 応答の ResponderID フィールドとして使用されます。byName
パラメーターが false の場合、OCSP 認証局署名証明書キーハッシュは OCSP 応答の ResponderID フィールドになります。 - includeNextUpdate.Online Certificate Status Manager には、次の CRL 更新時間のタイムスタンプを含めることができます。
7.6.2.4. OCSP サービス設定のテスト
- ブラウザーまたはクライアントで失効チェックをオンにします。
- OCSP サービス用に有効になっている CA から証明書を要求します。
- 要求を承認します。
- ブラウザーまたはクライアントに証明書をダウンロードします。
- CA がブラウザーまたはクライアントで信頼されていることを確認します。
- Certificate Manager の内部 OCSP サービスのステータスを確認します。CA エージェントサービスページを開き、OCSP サービス のリンクを選択します。
- 独立した Online Certificate Status Manager サブシステムをテストします。Online Certificate Status Manager エージェントサービスページを開き、List Certificate Authorities リンクをクリックします。このページには、CRL を Online Certificate Status Manager に公開するための設定された Certificate Manager に関する情報が表示されます。このページには、最後に起動した時点の Online Certificate Status Manager のアクティビティーも要約されています。
- 証明書を取り消します。
- ブラウザーまたはクライアントで証明書を確認します。サーバーは、証明書が取り消されたことを返す必要があります。
- Certificate Manager の OCSP サービスステータスを再度チェックして、次のことが発生したことを確認します。
- ブラウザーは OCSP クエリーを Certificate Manager に送信します。
- Certificate Manager は OCSP の応答をブラウザーに送信します。
- ブラウザーはその応答を使用して証明書を検証し、証明書を検証できなかったというステータスを返しました。
- 独立した OCSP サービスサブシステムを再度チェックし、これらの問題が発生することを確認します。
- 証明書マネージャーは、CRL を Online Certificate Status Manager に公開します。
- ブラウザーは OCSP 応答を Online Certificate Status Manager に送信します。
- Online Certificate Status Manager は OCSP の応答をブラウザーに送ります。
- ブラウザーはその応答を使用して証明書を検証し、証明書を検証できなかったというステータスを返しました。
7.6.3. 問題のあるシリアル番号のレスポンスの設定
notFoundAsGood
パラメーターは、OCSP が無効なシリアル番号で証明書を処理する方法を設定します。このパラメーターはデフォルトで有効になっています。つまり、証明書が不正なシリアル番号で存在する場合は、証明書が有効であれば、OCSP が証明書の GOOD のステータスを返します。
notFoundAsGood
設定を変更します。この場合、OCSP は、間違ったシリアル番号を持つ証明書とともに UNKNOWN ステータスを返します。クライアントはエラーとして解釈し、それに応じて応答できます。
- オンライン証明書ステータスマネージャーコンソールを開きます。
pkiconsole https://server.example.com:8443/ocsp
- Configuration タブで Online Certificate Status Manager を選択し、Revocation Info Stores を選択します。
- defStore を選択し、Edit/View をクリックします。
notFoundAsGood
値を編集します。このチェックボックスを選択すると、証明書のシリアル番号が不正な場合でも OCSP が GOOD の値を返します。チェックボックスの選択を解除すると、OCSP は、UNKNOWN の値を送信します。クライアントはこれをエラーとして解釈できます。- OCSP Manager を再起動します。
]# systemctl restart pki-tomcatd@instance-name.service
7.6.4. 証明書マネージャーの内部 OCSP サービスの有効化
- CA のエンドエンティティーに移動します。以下に例を示します。
http
s
://server.example.com:8443/ca/ee/ca
- CA 署名証明書を探します。
- 証明書で Authority Info Access 拡張を探し、http
s
://server.example.com:8443
/ca/ocsp などの Location URIName 値をメモします。 - 登録プロファイルを更新して、Authority Information Access 拡張を有効にし、Location パラメーターを Certificate Manager の URI に設定します。証明書プロファイルの編集に関する詳細は、「証明書プロファイルの設定」 を参照してください。
- CA インスタンスを再起動します。
]# systemctl restart pki-tomcatd@instance-name.service
CS.cfg
ファイルを編集し、ca.ocsp パラメーターの値を false に変更します。
ca.ocsp=false
7.6.5. OCSPClient プログラムを使用した OCSP リクエストの送信
]# OCSPClient -h server.example.com -p 8080 -d /etc/pki/pki-tomcat/alias -c "caSigningCert cert-pki-ca" --serial 2 CertID.serialNumber=2 CertStatus=Good
表7.1 利用可能な OCSPClient オプション
オプション | 説明 |
---|---|
-d database | セキュリティーデータベースの場所 (デフォルト: 現行ディレクトリー) |
-h hostname | OCSP サーバーのホスト名 (デフォルト: example.com) |
-p port | OCSP サーバーのポート番号 (デフォルト: 8080) |
-t path | OCSP サービスパス (デフォルト: /ocsp/ee/ocsp) |
-c nickname | CA 証明書のニックネーム (デフォルト: CA 署名証明書) |
-n times | 送信番号 (デフォルトは 1) |
--serial serial_number | チェックする証明書のシリアル番号 |
--input input_file | DER でエンコードされた OCSP 要求が含まれる入力ファイル |
--output output_file | DER でエンコードされた OCSP 応答を保存する出力ファイル |
-v, --verbose | 詳細モードで実行 |
--help | ヘルプメッセージを表示 |
7.6.6. GET メソッドを使用した OCSP リクエストの送信
- クエリーされるステータスで、証明書の OCSP 要求を生成します。以下に例を示します。
]# openssl ocsp -CAfile ca.pem -issuer issuer.pem -serial serial_number -reqout - | base64 MEIwQDA+MDwwOjAJBgUrDgMCGgUABBT4cyABkyiCIhU4JpmIBewdDnn8ZgQUbyBZ44kgy35o7xW5BMzM8FTvyTwCAQE=
- Web ブラウザーのアドレスバーに URL を貼り付けて、ステータス情報を返します。ブラウザーが OCSP 要求を処理できるようにする必要があります。
https://server.example.com:8443/ocsp/ee/ocsp/MEIwQDA+MDwwOjAJBgUrDgMCGgUABBT4cyABkyiCIhU4JpmIBewdDnn8ZgQUbyBZ44kgy35o7xW5BMzM8FTvyTwCAQE=
- OCSP Manager は、ブラウザーが解釈できる証明書のステータスを返します。設定可能なステータスは GOOD、REVOKED、および UNKNOWN です。
- クエリーされるステータスで、証明書の OCSP 要求を生成します。以下に例を示します。
]# openssl ocsp -CAfile ca.pem -issuer issuer.pem -serial serial_number -reqout - | base64 MEIwQDA+MDwwOjAJBgUrDgMCGgUABBT4cyABkyiCIhU4JpmIBewdDnn8ZgQUbyBZ44kgy35o7xW5BMzM8FTvyTwCAQE=
- curl を使用して、OCSP 要求を送信するために OCSP Manager に接続します。
curl https://server.example.com:8443/ocsp/ee/ocsp/MEIwQDA+MDwwOjAJBgUrDgMCGgUABBT4cyABkyiCIhU4JpmIBewdDnn8ZgQUbyBZ44kgy35o7xW5BMzM8FTvyTwCAQE= > ocspresp.der
- openssl を使用して応答を解析します。
openssl ocsp -respin ocspresp.der -resp_text
7.6.7. Certificate System 7.1 以前で発行された証明書のリダイレクトの設定
/ocsp/ee/ocsp/
を含む URL で指定された OCSP ユーザーページの場所は、Certificate System 9 または Certificate System 8.1 と、Certificate System 7.1 とで異なります (Certificate System 7.1 では /ocsp/
)。Authority Information Access 拡張機能を備えた 7.1 以前の CA によって発行された証明書を OCSP に送信するには、リダイレクトを作成して、要求を適切な URL に転送します。
- OCSP レスポンダーを停止します。
]# systemctl stop pki-tomcatd@instance-name.service
- OCSP のエンドユーザー Web アプリケーションディレクトリーに移動します。以下に例を示します。
]# cd /var/lib/pki-ocsp/webapps/ocsp
- OCSP の Web アプリケーションディレクトリーの
ROOT/WEB-INF/
ディレクトリーにあるROOT
ディレクトリーに移動します。以下に例を示します。]# cd /var/lib/pki-ocsp/webapps/ocsp/ROOT/WEB-INF/
- OCSP の Web アプリケーションディレクトリーの
ROOT
ディレクトリーにlib/
ディレクトリーを作成して開きます。]# mkdir lib ]# cd lib/
/usr/share/java/pki/cms.jar
JAR ファイルへリンクするシンボリックリンクを作成します。以下に例を示します。]# ln -s /usr/share/java/pki/cms.jar cms.jar
- メインの Web アプリケーションディレクトリーに移動します。以下に例を示します。
]# cd /var/lib/pki-ocsp/webapps/ocsp/
- 現行インスタンス (
ocsp
) ディレクトリーの名前を変更します。以下に例を示します。]# mv /var/lib/pki-ocsp/webapps/ocsp/ocsp /var/lib/pki-ocsp/webapps/ocsp/ocsp2
- 元の
ocsp/
ディレクトリーのWEB-INF/
ディレクトリーに移動します。以下に例を示します。]# cd /var/lib/pki-ocsp/webapps/ocsp/ocsp/WEB-INF
- 元の
ocsp/WEB-INF/
ディレクトリーで、web.xml
ファイルを編集し、eeocspAddCRL
とcsadmin-wizard
サーブレットの間に行マッピングを追加します。<servlet-mapping> <servlet-name> ocspOCSP </servlet-name> <url-pattern> /ee/ocsp/* </url-pattern> </servlet-mapping>
ROOT
ディレクトリーにweb.xml
ファイルを作成し、インストールします。以下に例を示します。<?xml version="1.0" encoding="ISO-8859-1"?> <web-app> <display-name>Welcome to Tomcat</display-name> <description> Welcome to Tomcat </description> <servlet> <servlet-name>ocspProxy</servlet-name> <servlet-class>com.netscape.cms.servlet.base.ProxyServlet</servlet-class> <init-param> <param-name>destContext</param-name> <param-value>/ocsp2</param-value> </init-param> <init-param> <param-name>destServlet</param-name> <param-value>/ee/ocsp</param-value> </init-param> </servlet> <servlet> <servlet-name>ocspOther</servlet-name> <servlet-class>com.netscape.cms.servlet.base.ProxyServlet</servlet-class> <init-param> <param-name>destContext</param-name> <param-value>/ocsp2</param-value> </init-param> <init-param> <param-name>srcContext</param-name> <param-value>/ocsp</param-value> </init-param> <init-param> <param-name>destServlet</param-name> <param-value></param-value> </init-param> <init-param> <param-name>matchURIStrings</param-name> <param-value>/ocsp/registry,/ocsp/acl,/ocsp/jobsScheduler,/ocsp/ug,/ocsp/server,/ocsp/log, /ocsp/auths,/ocsp/start,/ocsp/ocsp,/ocsp/services,/ocsp/agent,/ocsp/ee, /ocsp/admin</param-value> </init-param> <init-param> <param-name>destServletOnNoMatch</param-name> <param-value>/ee/ocsp</param-value> </init-param> <init-param> <param-name>appendPathInfoOnNoMatch</param-name> <param-value>/ocsp</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>ocspProxy</servlet-name> <url-pattern>/ocsp</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>ocspOther</servlet-name> <url-pattern>/ocsp/*</url-pattern> </servlet-mapping> </web-app>
/var/lib/pki-ocsp/conf/context.xml
ファイルを編集して、以下の行を追加します。<Context> to <Context crossContext="true" >
/var/lib/pki-ocsp/webapps/ocsp/ocsp2/services.template
ファイルを編集し、以下の行を変更します。result.recordSet[i].uri); to result.recordSet[i].uri + "/");
- OCSP インスタンスを起動します。
]# systemctl restart pki-tomcatd@instance-name.service
パート III. CA サービスを管理するための追加設定
第8章 証明書および CRL の公開
- ファイル、LDAP ディレクトリー、または OCSP レスポンダーへの公開を設定します。使用する場所の数に応じて、単一のパブリッシャーまたは複数のパブリッシャーが存在する可能性があります。場所は、証明書と CRL、または証明書の種類などのより細かい定義によって分割できます。ルールは、発行者に関連付けられることにより、発行するタイプと場所を決定します。
- ルールを設定して、どの証明書がその場所に公開されるかを決定します。証明書または CRL が一致するすべてのルールがアクティブ化されるため、ファイルベースのルールとディレクトリーベースのルールを一致させることにより、同じ証明書をファイルと LDAP ディレクトリーに公開できます。ルールは、各オブジェクトタイプ (CA 証明書、CRL、ユーザー証明書、およびクロスペアの証明書) に設定できます。使用されていないルールをすべて無効にします。
- CRL を設定します。CRL は公開前に設定する必要があります。7章証明書の取り消しおよび CRL 発行 を参照してください。
- パブリッシャー、マッパー、およびルールの設定後に公開を有効にします。公開が有効になると、サーバーはすぐに公開を開始します。パブリッシャー、マッパー、およびルールが完全に設定されていない場合は、パブリッシュが正しく機能しない可能性があります。
8.1. 公開の概要
/etc/CS/certificates
のファイルに公開する発行者がある場合、証明書はファイルとしてその場所に公開されます。別のルールが、ユーザーに発行されたすべての証明書に一致し、そのルールに LDAP 属性 userCertificate;binary 属性に公開するパブリッシャーがある場合、証明書は、ユーザーのエントリーのこの属性で LDAP 公開が有効になったときに指定されたディレクトリーに発行されます。
8.1.1. パブリッシャー
8.1.2. マッパー
8.1.3. ルール
8.1.4. ファイルへの公開
- サーバーの問題の各証明書について、DER でエンコードされた形式または base-64 でエンコードされた形式で、証明書が含まれるファイルを作成します。各ファイルには
cert-
serial_number.der
またはcert-
serial_number.b64
という名前が付けられます。serial_number は、ファイルに含まれる証明書のシリアル番号です。たとえば、シリアル番号が 1234 の DER でエンコードされた証明書のファイル名は、cert-1234.der
です。 - サーバーが CRL を生成するたびに、DER でエンコードされた形式または base-64 でエンコードされた形式で新しい CRL を含むファイルが作成されます。各ファイルの名前は、形式に応じて、issuing_point_name-this_update
.der
または issuing_point_name-this_update.b64
のいずれかになります。issuing_point_name は CRL を公開する CRL 発行ポイントを識別します。this_update は、ファイルに含まれる CRL のタイム依存更新値から取得する値を指定します。たとえば、値 This Update: Friday January 28 15:36:00 PST 2020 の DER でエンコードされた CRL のファイル名は、MasterCRL-20200128-153600.der
です。
8.1.5. OCSP 公開
8.1.6. LDAP 公開
- サーバーが発行する証明書ごとに、ユーザーのエントリーの指定された属性に DER エンコード形式の証明書を含むブロブが作成されます。証明書は DER でエンコードされたバイナリーブロブとして公開されます。
- サーバーが CRL を生成するたびに、CA のエントリーの指定された属性で、DER でエンコードされた形式で新しい CRL を含むブロブを作成します。
8.2. ファイルへの公開設定
- Certificate Manager コンソールにログインします。
pkiconsole https://server.example.com:8443/ca
- Configuration タブで、左側のナビゲーションツリーから Certificate Manager を選択します。Publishing を選択し、Publishers を選択します。設定されたパブリッシャーインスタンスを一覧表示する Publishers Management タブが右側で開きます。
- Add をクリックして、Select Publisher Plug-in Implementation ウィンドウを開きます。これには、登録済みのパブリッシャーモジュールを一覧表します。
- FileBasedPublisher モジュールを選択し、エディターウィンドウを開きます。これは、Certificate Manager が証明書をファイルに公開し、CRL をファイルに公開できるようにするモジュールです。
- 証明書を公開するための情報を設定します。
- PublishCertsToFile などの空白のない英数字の発行側の ID
- Certificate Manager がファイルを公開する必要のあるディレクトリーへのパス。パスは絶対パスにすることも、CertificateCertificate Systemnbsp;System インスタンスディレクトリーからの相対パスにすることもできます。たとえば、
/export/CS/certificates
です。 - DER でエンコードされたファイル、base-64 でエンコードされたファイル、またはその両方のチェックボックスを選択して公開するファイルタイプ。
- CRL の場合は、タイムスタンプの形式です。公開される証明書にはファイル名にシリアル番号が含まれ、CRL はタイムスタンプを使用します。
- CRL の場合、最新の CRL に移動するためにファイルにリンクを生成するかどうか。有効にすると、リンクは、拡張機能で使用する CRL 発行ポイントの名前が crlLinkExt フィールドに指定されると想定します。
- CRL の場合、CRL を圧縮 (zip) するかどうか、および使用する圧縮レベル。
8.3. OCSP への公開設定
8.3.1. クライアント認証を使用した OCSP への公開の有効化
- Certificate Manager コンソールにログインします。
pkiconsole https://server.example.com:8443/ca
- Configuration タブで、左側のナビゲーションツリーから Certificate Manager を選択します。Publishing を選択し、Publishers を選択します。
- Add をクリックして、Select Publisher Plug-in Implementation ウィンドウを開きます。これには、登録済みのパブリッシャーモジュールを一覧表します。
- OCSPPublisher モジュールを選択し、エディターウィンドウを開きます。これは、Certificate Manager が CRL を Online Certificate Status Manager に公開できるようにするパブリッシャーモジュールです。
- パブリッシャー ID は、PublishCertsToOCSP のように、スペースのない英数字の文字列である必要があります。
- host は、ocspResponder.example.com または IPv4 または IPv6 アドレスなどの完全修飾ドメイン名を使用できます。
- デフォルトのパスは、
/ocsp/agent/ocsp/addCRL
のように CRL を送信するディレクトリーです。 - クライアント認証が使用されている (enableClientAuth が選択されている) 場合は、nickname フィールドに認証に使用する証明書のニックネームを指定します。この証明書は OCSP セキュリティーデータベースに存在している必要があります。これは通常 CA サブシステム証明書です。
- OCSP Manager で CA のユーザーエントリーを作成します。ユーザーは、新しい CRL を送信するときに OCSP への認証に使用されます。必要なものは 2 つあります。
- CA-hostname-EEport などの CA サーバーの後に OCSP ユーザーエントリーに名前を付けます。
- パブリッシャー設定で指定された証明書を、OCSP ユーザーアカウントのユーザー証明書として使用します。通常、これは CA のサブシステム証明書です。
サブシステムユーザーの設定については、「ユーザーの作成」 で説明されています。
8.4. LDAP ディレクトリーへの公開設定
- 公開される証明書の Directory Server を設定します。特定の属性をエントリーに追加し、ID をバインドし、認証方法を設定する必要があります。
- 公開された各オブジェクトのパブリッシャーを設定します (CA 証明書、クロスペア証明書、CRL、およびユーザー証明書)。パブリッシャーは、オブジェクトを格納する属性を宣言します。デフォルトで設定される属性は、各オブジェクトタイプを保存する X.500 標準属性です。この属性はパブリッシャーで変更できますが、通常は LDAP パブリッシャーを変更する必要はありません。
- エントリーの DN が証明書のサブジェクト名から派生できるようにマッパーを設定します。通常、CA 証明書、CRL、およびユーザー証明書にを設定する必要はありません。証明書タイプに複数のマッパーを設定できます。これは、たとえば、ディレクトリーツリーの異なる部分にある会社の異なる部門の 2 組のユーザーの証明書を公開する場合に役立ちます。グループごとにマッパーが作成され、ツリーの異なるブランチを指定します。マッパーの設定に関する詳細は、「マッパーの作成」 を参照してください。
- 「ルールの作成」 で説明されているように、パブリッシャーをマッパーに接続するルールを作成します。
- 「公開の有効化」 の説明に従って、パブリッシュを有効にします。
8.4.1. LDAP ディレクトリーの設定
- CA のエントリーを設定します。Certificate Manager が CA 証明書および CRL を公開するには、ディレクトリーには CA のエントリーが含まれている必要があります。ヒントLDAP 公開が設定されている場合、Certificate Manager はディレクトリー内の CA のエントリーを自動的に作成または変換します。このオプションは CA マッパーインスタンスおよび CRL マッパーインスタンスの両方で設定され、デフォルトで有効になっています。ディレクトリーが Certificate Manager がディレクトリーでエントリーを作成しないようにする場合は、これらのマッパーインスタンスでこのオプションを無効にし、CA を手動でディレクトリーに追加します。CA のエントリーをディレクトリーに追加する場合は、CA の DN に基づいてエントリータイプを選択します。
- CA の DN が cn コンポーネントで開始する場合は、CA の新規 person エントリーを作成します。別のタイプのエントリーを選択すると、cn コンポーネントが指定されない場合があります。
- CA の DN が ou コンポーネントで開始する場合は、CA の新規 organizationalunit エントリーを作成します。
このエントリーは、pkiCA または certificationAuthority オブジェクトクラスにはありません。証明書マネージャーは、このエントリーを CA の署名証明書を公開して、pkiCA または certificationAuthority オブジェクトクラスに自動的に変換します。注記pkiCA オブジェクトクラスは RFC 4523 に定義されていますが、certificationAuthority オブジェクトクラスは (obsolete) RFC 2256 に定義されています。Directory Server が使用するスキーマ定義に応じて、いずれかのオブジェクトクラスは受け入れ可能です。場合によっては、両方のオブジェクトクラスを同じ CA エントリーに使用できます。ディレクトリーエントリーの作成に関する詳細は、Red Hat Directory Server のドキュメントを参照してください。 - CA およびユーザーディレクトリーエントリーに正しいスキーマ要素を追加します。
オブジェクトタイプ スキーマ 理由 エンドエンティティー証明書 userCertificate;binary (属性) これは、証明書マネージャーが証明書をパブリッシュする属性です。これは多値の属性で、各値は DER でエンコードされたバイナリー X.509 証明書です。inetOrgPerson という名前の LDAP オブジェクトクラスによりこの属性が許可されます。strongAuthenticationUser オブジェクトクラスはこの属性を許可し、他のオブジェクトクラスと組み合わせて、証明書を他のオブジェクトクラスのディレクトリーエントリーに公開できるようにすることができます。Certificate Manager は、このオブジェクトクラスを対応する Directory Server のスキーマテーブルに自動的に追加しません。見つかったディレクトリーオブジェクトが userCertificate;binary 属性を許可しないと、証明書の追加または削除に失敗します。CA 証明書 caCertificate;binary (属性) これは、証明書マネージャーが証明書をパブリッシュする属性です。Certificate Manager は、サーバーの起動時に独自の CA ディレクトリーエントリーに独自の CA 証明書を公開します。エントリーは、Certificate Manager の発行者名に対応します。これは、pkiCA または certificationAuthority オブジェクトクラスの必須の属性です。Certificate Manager は、CA のディレクトリーエントリーを見つけると、このオブジェクトクラスを CA のディレクトリーエントリーに追加します。CRL certificateRevocationList;binary (属性) これは、Certificate Manager が CRL を公開する属性です。Certificate Manager は、CRL を独自の LDAP ディレクトリーエントリーに公開します。エントリーは、Certificate Manager の発行者名に対応します。これは、pkiCA または certificationAuthority オブジェクトクラスの属性です。属性の値は DER でエンコードされたバイナリー X.509 CRL です。CA のエントリーには、エントリーに CRL を公開するために、pkiCAまたはcertificationAuthority オブジェクトクラスがすでに含まれている必要があります。デルタ CRL deltaRevocationList;binary (属性) これは、Certificate Manager が証明書を公開する属性です。Certificate Manager は、フル CRL とは別に、デルタ CRL を独自の LDAP ディレクトリーエントリーに公開します。デルタ CRL エントリーは、Certificate Manager の発行者名に対応します。この属性は、deltaCRL または certificationAuthority-V2 オブジェクトクラスに属します。属性の値は DER でエンコードされたバイナリー X.509 delta CRL です。 - Directory Server にアクセスするために使用する Certificate Manager のバインド DN を設定します。Certificate Manager は、証明書と CRL をディレクトリーに公開するために、ディレクトリーへの読み取り/書き込み権限を持っている必要があります。これにより、Certificate Manager は、証明書関連情報を含むユーザーエントリーと、CA の証明書および CRL 関連情報を含む CA エントリーを変更できます。バインド DN エントリーは、以下のいずれかになります。
- Directory Manager などの書き込みアクセスを持つ既存の DN。
- 書き込みアクセスが付与された新規ユーザー。エントリーは、Certificate Manager の DN で識別することができます (例: cn=testCA, ou=Research Dept, o=Example Corporation, st=California, c=US)。注記このユーザーに付与される特権を慎重に検討してください。このユーザーは、アカウントの ACL を作成して、そのディレクトリーに書き込みできます。Certificate Manager のエントリーへの書き込みアクセス権限を付与する方法については、Directory Server のドキュメントを参照してください。
- Certificate Manager が Directory Server に対して認証する方法のディレクトリー認証方法を設定します。Basic 認証 (簡易ユーザー名およびパスワード)、クライアント認証なしの SSL、およびクライアント認証を使用する SSL (証明書ベース) の 3 つのオプションがあります。サーバーとの通信方法の設定は、Red Hat Directory Server のドキュメントを参照してください。
8.4.2. LDAP パブリッシャーの設定
表8.1 LDAP パブリッシャー
パブリッシャー | 説明 |
---|---|
LdapCaCertPublisher | CA 証明書を LDAP ディレクトリーに公開します。 |
LdapCrlPublisher | CRL を LDAP ディレクトリーに公開します。 |
LdapDeltaCrlPublisher | デルタ CRL を LDAP ディレクトリーに公開します。 |
LdapUserCertPublisher | すべての種類のエンドエンティティー証明書を LDAP ディレクトリーに公開します。 |
LdapCrossCertPairPublisher | 相互署名付き証明書を LDAP ディレクトリーに公開します。 |
8.4.3. マッパーの作成
表8.2 デフォルトのマッパー
マッパー | 説明 |
---|---|
LdapUserCertMap | ユーザー証明書を公開するために、ディレクトリーでユーザーエントリーの正しい属性を見つけます。 |
LdapCrlMap | CRL を公開するために、ディレクトリーで CA のエントリーの正しい属性を見つけます。 |
LdapCaCertMap | CA 証明書を公開するために、ディレクトリーで CA のエントリーの正しい属性を見つけます。 |
- Certificate Manager コンソールにログインします。
pkiconsole https://server.example.com:8443/ca
- Configuration タブで、左側のナビゲーションツリーから Certificate Manager を選択します。Publishing を選択し、Mappers を選択します。設定されたマッパーを一覧表示する Mappers Management タブが右側で開きます。
- 新しいマッパーインスタンスを作成するには、Add をクリックします。Select Mapper Plugin Implementation ウィンドウが開き、登録されたマッパーモジュールが一覧表示されます。モジュールを選択し、そのモジュールを編集します。これらのモジュールに関する詳細は、「マッパープラグインモジュール 」 を参照してください。
- マッパーインスタンスを編集し、OK をクリックします。各マッパーに関する詳細は、「マッパープラグインモジュール 」 を参照してください。
8.4.4. 設定の完了: ルールおよび有効化
8.5. ルールの作成
- Certificate Manager コンソールにログインします。
pkiconsole https://server.example.com:8443/ca
- Configuration タブで、左側のナビゲーションツリーから Certificate Manager を選択します。Publishing を選択し、Rules を選択します。設定したルールを一覧表示する Rules Management タブが右側で開きます。
- 既存のルールを編集するには、一覧からそのルールを選択し、Edit をクリックします。これにより、Rule Editor ウィンドウが開きます。
- ルールを作成するには、Add をクリックします。これにより、Select Rule Plug-in Implementation ウィンドウが開きます。Rule モジュールを選択します。これは唯一のデフォルトモジュールです。カスタムモジュールが登録されている場合は、それらも利用できます。
- ルールを編集します。
- type。これは、ルールが適用される証明書のタイプです。CA 署名証明書の場合、値は cacert です。自己署名証明書の場合、値は xcert です。その他すべてのタイプの証明書の場合、値は certs です。CRL には crl を指定します。
- predicate。これにより、このルールが適用される証明書または CRL 発行ポイントのタイプに述語の値を設定します。CRL 発行ポイント、デルタ CRL、および証明書の述語値の一覧は 表8.3「述語式」 に表示されます。
- enable。
- mapper。ファイルに公開する場合、マッパーは必要ありません。LDAP 公開にのみ必要です。このルールが LDAP ディレクトリーに公開されるパブリッシャーに関連付けられている場合は、ここに適切なマッパーを選択します。他のすべての形式の発行では空白のままにします。
- publisher。ルールに関連付けるパブリッシャーを設定します。
表8.3 述語式
述語タイプ | 述語 |
---|---|
CRL 発行ポイント |
issuingPointId==Issuing_Point_Instance_ID && isDeltaCRL==[true|false]
マスター CRL だけを公開するには、isDeltaCRL==false を設定します。delta CRL だけを公開するには、isDeltaCRL==true を設定します。両方を公開するには、マスター CRL のルールとデルタ CRL の別のルールを設定します。
|
証明書プロファイル |
profileId==profile_name
使用するプロファイルに基づいて証明書を公開するには、profileId== を caServerCert などのプロファイル名に設定します。
|
8.6. 公開の有効化
- Certificate Manager コンソールにログインします。
pkiconsole https://server.example.com:8443/ca
- Configuration タブで、左側のナビゲーションツリーから Certificate Manager を選択します。Publishing を選択します。右側のペインには、LDAP 準拠のディレクトリーに公開するための詳細情報が表示されます。
- ファイルの公開のみを有効にするには、Enable Publishing を選択します。
- LDAP 公開を有効にするには、Enable Publishing および Enable Default LDAP Connection の両方を選択します。Destination セクションで、Directory Server インスタンスの情報を設定します。
- Host name。Directory Server が SSL クライアント認証通信用に設定されている場合、名前は Directory Server の SSL サーバー証明書のサブジェクト DN 内の cn コンポーネントに一致する必要があります。ホスト名は完全修飾ドメイン名または IPv4 アドレスまたは IPv6 アドレスになります。
- Port number。
- Directory Manager DN。これは、Directory Manager 権限を持つディレクトリーエントリーの識別名 (DN) です。Certificate Manager はこの DN を使用してディレクトリーツリーにアクセスし、そのディレクトリーに公開します。この DN に設定されたアクセス制御は、Certificate Manager が公開できるかどうかを判断します。公開システムが実際に書き込む必要のある属性に対してのみ読み取り/書き込み権限が制限されている別の DN を作成することができます。
- Password。これは、CA が証明書または CRL の公開先の LDAP ディレクトリーにバインドするために使用するパスワードです。Certificate Manager は、このパスワードを
password.conf
ファイルに保存します。以下に例を示します。CA LDAP Publishing:password
注記パブリッシュパスワード (CA LDAP Publishing) を識別するパラメーター名は、ca.publish.ldappublish.ldap.ldapauth.bindPWPrompt パラメーターの Certificate Manager のCS.cfg
ファイルで設定されます。 - Client certificate。これにより、SSL クライアント認証に Certificate Manager が使用する証明書がパブリッシュディレクトリーに設定されます。デフォルトでは、証明書マネージャーは SSL サーバー証明書を使用します。
- LDAP version。LDAP バージョン 3 を選択します。
- Authentication。Certificate Manager が Directory Server に対して認証する方法。Basic authentication と SSL client authentication を選択できます。Directory Server が基本認証またはクライアント認証なしの SSL 通信用に設定されている場合は、Basic authentication を選択して、Directory マネージャーの DN とパスワードの値を指定します。Directory Server がクライアント認証を使用した SSL 通信用に設定されている場合は、SSL client authentication と Use SSL communication オプションを選択し、Certificate Manager がディレクトリーへの SSL クライアント認証に使用する必要のある証明書を識別します。
8.7. 公開キューの有効化
図8.1 公開キューの有効化

CS.cfg
ファイルを編集してパブリッシュキューを有効にすると、管理者はパブリッシュ操作に使用するスレッドの数やキューページサイズなど、パブリッシュする他のオプションを設定できます。
CS.cfg
ファイルを編集してこの機能を設定する方法は、『Red Hat Certificate System 計画、インストール、およびデプロイメントのガイド』の『公開キューの有効化』セクションを参照してください。
8.8. 再開可能な CRL ダウンロードの設定
8.8.1. wget を使用した CRL の取得
[root@server ~]# wget --no-check-certificate -d https://server.example.com:8443/ca/ee/ca/crl/MasterCRL.bin
表8.4 CRL の取得に使用する wget オプション
引数 | 説明 |
---|---|
引数なし | 完全な CRL を取得します。 |
-N | ローカルコピー (delta CRL) よりも新しい CRL を取得します。 |
-c | 部分的にダウンロードしたファイルを取得します。 |
--no-check-certificate | 接続の SSL を省略するため、ホストとクライアント間で SSL を設定する必要はありません。 |
-d | デバッグ情報を出力します。 |
8.9. ペア間の証明書の公開
- CA コンソールを開きます。
pkiconsole https://server.example.com:8443/ca
- Configuration タブで、左側のペインの Certificate Manager リンクを選択してから、Publishing リンクを選択します。
- Publishing の Rules リンクをクリックし ます。これにより、右側に Rules Management ペインが開きます。
- ルールが存在し、無効になっている場合は、enable チェックボックスを選択します。ルールが削除された場合は、Add クリックして新しいルールを作成します。
- type ドロップダウンメニューから xcerts を選択します。
- 有効 のチェックボックスが選択されていることを確認してください。
- mapper ドロップダウンメニューから、LdapCaCertMap を選択します。
- publisher ドロップダウンメニューから LdapCrossCertPairPublisher を選択します。