第21章 Certificate System 9 から Certificate System 10 へのアップグレード

ユーザーは、Errata-Support チャネルを通じてセキュリティーとバグ修正を入手するために、Red Hat Certificate System の最新バージョンにアップグレードすることを推奨します。現在、最新バージョンは RHEL 7.9 の RHCS 9.7 と RHEL 8.6 の RHCS 10.4 です。

21.1. CA の移行

既存の証明書ファイルを使用した Certificate System の移行には、以下の手順が必要です。

21.1.1. 以前のシステムからのデータのエクスポート

新しい Certificate System インスタンスをセットアップする前に、以下の手順を使用して、現在の認証局 (CA) のデータをエクスポートします。この例では、CA のインスタンス名は <pki-rootCA> で、/var/lib/pki/<instance_name> にあります。
  1. CA 署名証明書とキーをエクスポートします。
    # grep internal= /var/lib/pki/<instance_name>/conf/password.conf | awk -F= '{print $2;}' > internal.txt
    # echo <Secret.123> > password.txt
    # PKCS12Export -d /var/lib/pki/<instance_name>/alias -p internal.txt -o ca.p12 -w password.txt
  2. 証明書署名要求 (CSR) をエクスポートします。
    # echo "-----BEGIN NEW CERTIFICATE REQUEST-----" > ca_signing.csr
    # sed -n "/^ca.signing.certreq=/ s/^[^=]*=// p" < /var/lib/pki/<instance_name>/ca/conf/CS.cfg >> ca_signing.csr
    # echo "-----END NEW CERTIFICATE REQUEST-----" >> ca_signing.csr
  3. 古い CA が (チェーン内に単一のルート CA を持つ) 中間 CA である場合は、NSS データベースからルート CA を抽出します。
    # certutil -L -d /var/lib/pki/<instance_name>/alias/ -n root_CA_nickname -a > ca_rootca_signing.crt
  4. 内部 LDAP データベースをバックアップします。
    • CA の CS.cfginternaldb.database の値を確認して、CA データベースの名前を見つけます。
      # grep internaldb.database /etc/pki/<instance_name>/ca/CS.cfg
      internaldb.database=<CS_database_name>
    • インスタンスが作成されたら、setup-ds.pl によって生成されたインスタンス固有のスクリプトを使用して、このデータベースを .ldif ファイルにエクスポートします。
      # cd /usr/lib64/dirsrv/<instance_name>
      # ./db2ldif -n "<CS_database_name>" -a /tmp/old_ca.ldif
      db2ldif コマンドは DB ユーザーとして実行されるため、書き込みパーミッションを持つ宛先フォルダーが必要になります。
  5. old_ca.ldifca.p12ca_signing.csr ファイルを新しい CA マシンに転送します。移行する CA が中間 CA でもある場合は、ca_rootca_signing.crt も転送します。

21.1.2. PKCS12 ファイルの確認

新しい CA では、新しいデータベースインスタンスが標準ポート (389) で実行されます。PKCS12 ファイルには、古いシステムのすべてのシステム証明書が含まれています。ファイルに CA 署名証明書およびキーが含まれていることを確認します。
注記
FIPS モードでは、NSS データベースを使用して pki pkcs12 コマンドを実行する必要があります。詳細は、pki-pkcs12 CLI を参照してください。
  1. CA 署名証明書およびキーを見つけます。
    $ echo "<Secret.123>" > password.txt
    $ pki pkcs12-cert-find --pkcs12-file ca.p12 --pkcs12-password-file password.txt
    $ pki pkcs12-key-find --pkcs12-file ca.p12 --pkcs12-password-file password.txt
  2. CA 署名証明書の信頼フラグが存在することを確認します。フラグが "CTu,Cu,Cu" ではない、またはそれらがない場合は追加します。
    $ pki pkcs12-cert-mod "<caSigningCert cert-pki-rootCA>" \ --pkcs12-file ca.p12 --pkcs12-password-file password.txt \ --trust-flags "CTu,Cu,Cu"
  3. 他の証明書およびキーを削除します。
    $ pki pkcs12-cert-del "<Server-Cert cert-pki-rootCA>" --pkcs12-file ca.p12 --pkcs12-password-file password.txt
    $ pki pkcs12-cert-del "<subsystemCert cert-pki-rootCA>" --pkcs12-file ca.p12 --pkcs12-password-file password.txt
    $ pki pkcs12-cert-del "<ocspSigningCert cert-pki-rootCA>" --pkcs12-file ca.p12 --pkcs12-password-file password.txt
    $ pki pkcs12-cert-del "<auditSigningCert cert-pki-rootCA>" --pkcs12-file ca.p12 --pkcs12-password-file password.txt
  4. 移行する CA も中間 CA の場合は、ルート CA 証明書を PKCS#12 ファイルから削除します。
    $ pki pkcs12-cert-del "<Top-level Root CA Signing Certificate>" --pkcs12-file ca.p12 --pkcs12-password-file password.txt

21.1.3. 新規ホストでの CA の設定

既存のインスタンスからデータをエクスポートしたら、新しいホストに認証局 (CA) を作成してセットアップします。
  1. 古い CA のパラメーターを使用して、pkispawn の設定ファイル (CA.cfg など) を作成します。このインスタンスは標準ポート (389) で実行されます。
    [DEFAULT]
    pki_instance_name=<new_instance_name>
    pki_admin_password=<caadmin_password>
    pki_client_pkcs12_password=<pkcs12_file_password>
    pki_ds_password=<DS_password>
    pki_ds_ldap_port=389
    pki_existing=True
    
    [CA]
    pki_ca_signing_csr_path=<path/to/ca_signing.csr>
    pki_ca_signing_cert_path=<path/to/ca_signing.crt>
    pki_ca_signing_nickname=<caSigningCert cert-nickname>
    pki_ds_base_dn=<o=pki-tomcat-CA>
    pki_ds_database=<instance_name-CA>
    pki_serial_number_range_start=<starting_number_for_cert_serial_numbers>
    pki_request_number_range_start=<starting_number_for_request_IDs>
    pki_master_crl_enable=False
    
    古い CA が中間 CA の場合は、以下の 2 行を設定ファイルに追加します。これらは、ルート CA 証明書へのパスと、NSS データベースに証明書を保存するときに使用するニックネームに対応します。
    pki_cert_chain_path=<rootca_signing.crt>
    pki_cert_chain_nickname=<caSigningCert cert-pki-ca>
    詳細およびパラメーターの説明は、pkispawn(8) の man ページを参照してください。
  2. 新規ホストで pkispawn を実行して、新規 CA インスタンスを作成します。
    # pkispawn -s CA -f ca.cfg -v
注記
新規 CA 用に新しい DS インスタンスをセットアップする方法は、Red Hat Directory Server のインストール を参照してください。

21.1.4. 古いデータの新規 CA へのインポート

新しい CA インスタンスを作成した後、データを新しい CA データベースにインポートします。
  1. CA サービスを停止します。
    # systemctl stop pki-tomcatd@<instance_name>.service
  2. オプション: 新しいホストで CA データベースをバックアップします。
    # dsctl -v idm-qe-01 db2bak
    バックアップは、/var/lib/dirsrv/<instance_name>/bak/<host_name-time_stamp>/ ディレクトリーに保存されます。
  3. 新しい RHEL 8 内部データベースから、署名証明書の証明書エントリーを削除します。
    # ldapdelete -x -w <password< -D 'cn=Directory Manager' "cn=<serial_number<,ou=certificateRepository,ou=ca,o=pki-tomcat-CA"
    エントリーが古いデータからインポートされ、そのエントリーの CRL 属性が正しいエントリーをポイントするようになりました。
  4. データを新しいデータベースにインポートします。
    # ldapmodify -x -W <password> -D 'cn=Directory Manager' -a -c -f <path/to/old_ca.ldif>
    ldapmodify ユーティリティーは新しいエントリーのみを追加し、CA のインストール時に作成された既存のエントリーを更新しません。
  5. オプション: import.log ファイルの出力を確認します。ldap_add: Invalid syntax (21) など、失敗したアクションを検索できます。
  6. 古いセキュリティードメインのディレクトリーエントリーを削除します。
    # ldapmodify -W <password> -x -D "cn=Directory Manager"
    dn: cn=<server.example.com:9445>,cn=CAList,ou=Security Domain,<o=pki-tomcat-CA>
    changetype: delete
    
  7. /etc/pki/<instance_name>/ca/CS.cfg ファイルの ca.crl.MasterCRL.enable パラメーターを有効にして、CA が証明書失効リスト (CRL) マスターとして機能するようにします。
    ca.crl.MasterCRL.enable=true
  8. CA サービスを起動します。
    # systemctl start pki-tomcatd@<instance_name>

21.1.5. デフォルトグループにユーザーの再割り当て

ldapmodify または pki ユーティリティーを使用して、デフォルトのグループにメンバーを手動で追加します。
  1. クライアントを設定します。
    # pki -c <password> client-init
    Client initialized
    
    # pk12util -i ~/.dogtag/<instance_name>/ca_admin_cert.p12 -d ~/.dogtag/nssdb/
    Enter Password or Pin for "NSS Certificate DB":
    Enter password for PKCS12 file:
    pk12util: PKCS12 IMPORT SUCCESSFUL
    ...
    
  2. ユーザー アカウントを Administrators および Security Domain Administrators グループに追加します。
    # pki -n "<PKI Administrator for example.com>" -c <password> \
    user-membership-add <user_name> "Certificate Manager Agents"
    
    RHCS 9 と RHCS 10 のデフォルト (ブートストラップ) 管理者ユーザーは、同じデフォルトのロール、つまり同じグループメンバーシップを持っています。ただし、デフォルト以外の管理者ユーザーがいる場合や、RHCS 9 で管理者ロールをカスタマイズしている場合は、これらの変更が適切に移行されない可能性があります。この場合は、RHCS 10 でロールを再設定します。
    # pki -n "<PKI Administrator for example.com>" -c <password> \
    user-membership-add <user> "Administrators"
    # pki -n "<PKI Administrator for example.com>" -c <password> \
    user-membership-add <user> "Security Domain Administrators"
    
証明書が正常に移行されたことを確認する場合は、ca-cert-find コマンドを実行して、新しいホストに存在することを確認します。