7.4. OCSP インスタンス (RootCA) の作成と設定


このセクションでは、RootCA に対する OCSP インスタンスのインストールと設定を説明します。
OCSP システム証明書は RootCA によって発行され、OCSP は RootCA セキュリティードメインに参加します。
この例では、RootCA の OCSP は rhcs10.example.com にインストールされ、その内部ディレクトリーサーバーは rhds11.example.com にあります。

注記

これは任意です。一般的に、ルート CA は日常的な証明書発行には推奨されません。したがって、ルート CA の OCSP は必要ありません。この例では、RootCA の OCSP はデモンストレーション目的でのみ提示されています。

注記

/opt/pki_rsa/ca-chain.pem ファイルに完全な CA 証明書チェーン (この時点では RootCA 証明書のみ) が含まれていることを確認します。

# ls -l /opt/pki_rsa/ca-chain.pem

# cat /opt/pki_rsa/ca-chain.pem

7.4.1. 一時的な DS 証明書 (OCSP-rootca) を置き換えます

RootCA の OCSP をインストールする前に、OCSP の Directory Server の公式 SSL サーバー証明書を発行します。これは一時的なブートストラップ証明書を置き換えるためのものです。そのためには、まず Directory Server 証明書の証明書署名要求 (CSR) を作成し、次にこの要求を CA に送信します。

注記

必ず DS サーバーの FQDN (例: cn=rhds11.example.com / host=rhds11.example.com) を使用してください。

実際の DS 証明書の CSR を生成する

rhds11.example.com で、実際の DS 証明書の PKCS10 証明書署名要求を生成します。

  1. DS を停止します。

    # dsctl slapd-CC-RSA-OCSP-rootca-LDAP stop
    注記

    DS インスタンスの名前がわからない場合は、dsctl -l を使用してすべてのインスタンスをリスト表示します。

  2. certutil ツールを使用して CSR を生成します。

    # certutil -R -d /etc/dirsrv/slapd-CC-RSA-OCSP-rootca-LDAP -s "CN=rhds11.example.com" -g 2048 -f /etc/dirsrv/slapd-CC-RSA-OCSP-rootca-LDAP/pwdfile.txt -a -o /etc/dirsrv/slapd-CC-RSA-OCSP-rootca-LDAP/Server-Cert-ocsp-rootca.csr -z /etc/dirsrv/slapd-CC-RSA-OCSP-rootca-LDAP/noise.txt
    重要

    上記で取得した Server-Cert-ocsp-rootca.csr 出力ファイルを編集して、"Begin Certificate Request" の前の数行を削除します。以下に例を示します。

    # vi /etc/dirsrv/slapd-CC-RSA-OCSP-rootca-LDAP/Server-Cert-ocsp-rootca.csr

    CSR ファイルは、"-----BEGIN CERTIFICATE REQUEST-----" の行で始まり、"-----END CERTIFICATE REQUEST-----" の行で終わる必要があります。

  3. CA が置かれているシステムに Server-Cert-ocsp-rootca.csr ファイルをリモートコピーします。以下に例を示します。

    # scp /etc/dirsrv/slapd-CC-RSA-OCSP-rootca-LDAP/Server-Cert-ocsp-rootca.csr root@rhcs10.example.com:/root/.dogtag/pki_rsa_bootstrap/certs_db/Server-Cert-ocsp-rootca.csr

実際の DS 証明書を発行する

rhcs10.example.com で、実際の SSL サーバー証明書を発行します。

  1. CMC 要求を生成します。

    1. CMCRequest 設定ファイルを作成します。以下に例を示します。

      # vim /root/.dogtag/pki_rsa_bootstrap/certs_db/cmc.dirsrv-ocsp-rootca_pkcs10.cfg
      ### 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.
      ### Multiple files are supported. They must be separated by a space.
      ### For input on a different host, specify where to find the CSR.
      input=/root/.dogtag/pki_rsa_bootstrap/certs_db/Server-Cert-ocsp-rootca.csr
      
      ### output: full path for the CMC request in binary format
      ### For output on a different host, specify the destination.
      output=/root/.dogtag/pki_rsa_bootstrap/certs_db/cmc.dirsrv-ocsp-rootca_pkcs10.req
      
      ### tokenname: name of the token where the agent signing cert can be found (default is internal)
      tokenname=internal
      
      ### nickname: nickname for the agent certificate that will be used to sign the CMC full request.
      nickname=PKI Bootstrap Administrator for RSA-RootCA
      
      ### dbdir: directory for cert8.db, key3.db and secmod.db
      dbdir=/root/.dogtag/pki_rsa_bootstrap/certs_db
      
      ### password: password for cert8.db that stores the agent certificate
      password=SECret.123
      
      ### format: request format, either pkcs10 or crmf
      format=pkcs10
    2. CMCRequest コマンドを使用してリクエストを生成します。

      # CMCRequest /root/.dogtag/pki_rsa_bootstrap/certs_db/cmc.dirsrv-ocsp-rootca_pkcs10.cfg
      
      cert/key prefix =
      path = /root/.dogtag/pki_rsa_bootstrap/certs_db
      CryptoManger initialized
      token internal logged in...
      got signerCert: PKI Bootstrap Administrator for RSA-RootCA
      createPKIData: begins
      k=0
      createPKIData:  format: pkcs10
      useSharedSecret is false...
      signData: begins:
      getPrivateKey: got signing cert
      signData:  got signer privKey
      createSignedData: begins
      getSigningAlgFromPrivate: begins.
      getSigningAlgFromPrivate: found signingKeyType=RSA
      getSigningAlgFromPrivate: using SignatureAlgorithm: RSASignatureWithSHA256Digest
      createSignedData: digest created for pkidata
      createSignedData: digest algorithm =RSASignatureWithSHA256Digest
      createSignedData: building cert chain
      signData: signed request generated.
      getCMCBlob: begins
      getCMCBlob: generating signed data
      
      The CMC enrollment request in base-64 encoded format:
      
      . . . Output omitted . . .
      
      The CMC enrollment request in binary format is stored in
      /root/.dogtag/pki_rsa_bootstrap/certs_db/cmc.dirsrv-ocsp-rootca_pkcs10.req
  2. CMC 要求を送信します。

    1. HttpClient 設定ファイルを作成します。以下に例を示します。

      # vim /root/.dogtag/pki_rsa_bootstrap/certs_db/HttpClient_dirsrv-ocsp-rootca.cfg
      ### host: host name for the http server
      host=rhcs10.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=/root/.dogtag/pki_rsa_bootstrap/certs_db/cmc.dirsrv-ocsp-rootca_pkcs10.req
      
      ### output: full path for the response in binary format
      output=/root/.dogtag/pki_rsa_bootstrap/certs_db/cmc.dirsrv-ocsp-rootca_pkcs10.resp
      
      ### tokenname: name of the token where the SSL 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=/root/.dogtag/pki_rsa_bootstrap/certs_db
      
      ### 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=SECret.123
      
      ### nickname: nickname for client certificate
      ### This parameter will be ignored if clientmode=false
      nickname=PKI Bootstrap Administrator for RSA-RootCA
      
      ### servlet: servlet name
      servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCserverCert
    2. HttpClient コマンドを使用して要求を送信します。

      # HttpClient /root/.dogtag/pki_rsa_bootstrap/certs_db/HttpClient_dirsrv-ocsp-rootca.cfg
      
      Total number of bytes read = 3096
      after SSLSocket created, thread token is NSS FIPS 140-2 User Private Key
      client cert is not null
      handshake happened
      writing to socket
      
      ##Response Headers begin##
      HTTP/1.1 200
      Content-Type: application/pkcs7-mime
      Content-Length: 2492
      Date: Tue, 29 Sep 2020 15:20:21 GMT
      Connection: close
      ##end##
      
      . . . Output omitted . . .
      
      The response in binary format is stored in
      /root/.dogtag/pki_rsa_bootstrap/certs_db/cmc.dirsrv-ocsp-rootca_pkcs10.resp
  3. CMC 応答を処理します。

    1. CMCResponse を使用して応答を処理し、チェーン内のすべての証明書を PEM 形式で個別に表示します。

      重要

      "-v" オプションを指定して CMCResponse を実行すると、チェーン内の各証明書の PEM が Cert:0、Cert:1 などとして返されます。この出力では、すべての PEM の下に、チェーン内の各証明書も整った出力形式で表示されます。証明書は決まった順序で表示されないため、チェーン内での位置を確認するには、各 "Certificate" の下にある "Subject:" を確認する必要があります。対応する PEM が上と同じ位置に表示されます。

      # CMCResponse -d /root/.dogtag/pki_rsa_bootstrap/certs_db -i /root/.dogtag/pki_rsa_bootstrap/certs_db/cmc.dirsrv-ocsp-rootca_pkcs10.resp -v
      
      Cert:0
      ...
      ===
      Cert:1
      ...
      ===
      Cert:2
      ...
      ===
      Certificates:
      
        Certificate:
            Data:
                Version:  v3
                Serial Number: 0xA383694
                Signature Algorithm: SHA256withRSA - 1.2.840.113549.1.1.11
                Issuer: CN=CA Signing Certificate,OU=rhcs10-RSA-OCSP-rootca,O=Example-rhcs10-RSA-OCSP-rootca
                Validity:
                    Not Before: Tuesday, April 5, 2022 8:41:36 AM EDT America/New_York
                    Not  After: Monday, March 25, 2024 8:41:36 AM EDT America/New_York
                Subject: CN=rhds11.example.com
      
      . . . Output omitted . . .
      
          Certificate:
              Data:
                  Version:  v3
                  Serial Number: 0x5C8FAD4
                  Signature Algorithm: SHA256withRSA - 1.2.840.113549.1.1.11
                  Issuer: CN=CA Signing Certificate,OU=rhcs10-RSA-RootCA,O=Example-rhcs10-RSA-RootCA
                  Validity:
                      Not Before: Tuesday, April 5, 2022 8:36:21 AM EDT America/New_York
                      Not  After: Saturday, April 5, 2042 8:36:21 AM EDT America/New_York
                  Subject: CN=CA Signing Certificate,OU=rhcs10-RSA-RootCA,O=Example-rhcs10-RSA-RootCA
      
      . . . Output omitted . . .
      
          Certificate:
              Data:
                  Version:  v3
                  Serial Number: 0x80296C3
                  Signature Algorithm: SHA256withRSA - 1.2.840.113549.1.1.11
                  Issuer: CN=CA Signing Certificate,OU=rhcs10-RSA-RootCA,O=Example-rhcs10-RSA-OCSP-rootca
                  Validity:
                      Not Before: Tuesday, April 5, 2022 8:39:43 AM EDT America/New_York
                      Not  After: Friday, April 5, 2041 8:39:43 AM EDT America/New_York
                  Subject: CN=CA Signing Certificate,OU=rhcs10-RSA-OCSP-rootca,O=Example-rhcs10-RSA-RootCA
      
      . . . Output omitted . . .
      
      Number of controls is 1
      Control #0: CMCStatusInfoV2
      OID: {1 3 6 1 5 5 7 7 25}
      BodyList: 1
      Status: SUCCESS
      CMC Full Response.
    2. 新しい Server-Cert DS 証明書を、適切な名前でブートストラップ証明書ディレクトリー (例: /root/.dogtag/pki_rsa_bootstrap/certs_db/) 内のファイルに保存します。.pem ファイルは、ヘッダー -----BEGIN CERTIFICATE----- で開始し、フッター -----END CERTIFICATE----- で終了する必要があります。以下に例を示します。

      # vi /root/.dogtag/pki_rsa_bootstrap/certs_db/Server-Cert-ocsp-rootca.pem

      この場合の Server-Cert-ocsp-rootca.pem は、Directory Server インスタンスの新しい Server-Cert 証明書で、RootCA の OCSP の内部データベースとして機能します。

      注記

      RootCA の署名証明書は、次のコマンドからの出力と一致する必要があります。

      # certutil -L -d /var/lib/pki/rhcs10-RSA-RootCA/alias/ -n "CA Signing Cert - rhcs10-RSA-RootCA" -a
  4. 新しい Server-Cert 証明書を rhds11.example.com にリモートコピーします。以下に例を示します。

    # scp /root/.dogtag/pki_rsa_bootstrap/certs_db/Server-Cert-ocsp-rootca.pem root@rhds11.example.com:/etc/dirsrv/slapd-CC-RSA-OCSP-rootca-LDAP/

一時 DS 証明書を置き換える

rhds11.example.com で、一時的な DS 証明書を実際の DS 証明書に置き換えます。

  1. dirsrv ディレクトリーの内容をバックアップディレクトリーに保存します。

    # cp -r /etc/dirsrv/slapd-CC-RSA-OCSP-rootca-LDAP/ /etc/dirsrv/save-rsa/slapd-CC-RSA-OCSP-rootca-LDAP/
  2. 古い DS 証明書を削除します。

    # certutil -D -d /etc/dirsrv/slapd-CC-RSA-OCSP-rootca-LDAP/ -f /etc/dirsrv/slapd-CC-RSA-OCSP-rootca-LDAP/pwdfile.txt -n "Server-Cert"
    # certutil -D -d /etc/dirsrv/slapd-CC-RSA-OCSP-rootca-LDAP/ -f /etc/dirsrv/slapd-CC-RSA-OCSP-rootca-LDAP/pwdfile.txt -n "Self-Signed-CA"
  3. 新しく作成した DS 証明書とチェーン内の CA 証明書を 1 つずつインポートします。以下に例を示します。

    # certutil -d /etc/dirsrv/slapd-CC-RSA-OCSP-rootca-LDAP/ -f /etc/dirsrv/slapd-CC-RSA-OCSP-rootca-LDAP/pwdfile.txt -A -t "CT,C,C" -n "CA Signing Cert - rhcs10-RSA-RootCA" -i /opt/pki_rsa/rootCA.pem
    # certutil -d /etc/dirsrv/slapd-CC-RSA-OCSP-rootca-LDAP/ -f /etc/dirsrv/slapd-CC-RSA-OCSP-rootca-LDAP/pwdfile.txt -A -t "u,u,u" -n "Server-Cert" -i /etc/dirsrv/slapd-CC-RSA-OCSP-rootca-LDAP/Server-Cert-ocsp-rootca.pem
  4. 証明書をリスト表示します。

    # certutil -L -d /etc/dirsrv/slapd-CC-RSA-OCSP-rootca-LDAP/
    
    Certificate Nickname                           Trust Attributes
                                                   SSL,S/MIME,JAR/XPI
    CA Signing Cert - rhcs10-RSA-RootCA            CT,C,C
    Server-Cert                                    u,u,u
  5. DS を起動します。

    # dsctl slapd-CC-RSA-OCSP-rootca-LDAP start
  6. LDAP サーバーが稼働していることをテストして確認します (別のシステムの場合は、CA ホストでもテストします)。

    # ldapsearch -x -D "cn=Directory Manager" -H ldaps://rhds11.example.com:6636 -b "dc=example,dc=com" -w SECret.123

    別のシステムでテストする場合は、次のように CA 証明書チェーンを ldapsearch コマンドの前に追加します。

    # LDAPTLS_CACERT=/opt/pki_rsa/ca-chain.pem ldapsearch -x -D "cn=Directory Manager" -H ldaps://rhds11.example.com:6636 -b "dc=example,dc=com" -w SECret.123

7.4.2. RootCA の OCSP インスタンスをインストールする

RootCA の OCSP インスタンスをインストールするには、シングルステップ方式とツーステップ方式の いずれか 1 つ を使用します。次の手順では、シングルステップ方式を説明します。ツーステップ方式でインストールする場合は、「インストール方法 (シングルステップまたはツーステップ)」 および 「RootCA インスタンスのインストール (ツーステップ方式)」 を参照してください。

前提条件

手順

  1. 選択した場所 (例: /root/pki_rsa) に OCSP インストールファイルを作成して、証明書要求を生成します。

    # cd /root/pki_rsa
    # vi ocsp_rootca_inst.cfg
    注記

    明示的に指定されていない限り、システム証明書のニックネームは、pki_instance_name に指定された値を使用して自動的に名前が付けられます。共有 HSM での証明書のニックネームの競合を回避するには、インスタンスを作成するたびに一意のインスタンス名を使用します。

    以下のインストールファイルでは、例となる値を指定しています。HSM パスワードの変更に加えて、たとえばポート、ディレクトリー、ニックネーム、ドメインなどの値を適宜変更します。

    [DEFAULT]
    pki_instance_name=rhcs10-RSA-OCSP-rootca
    pki_https_port=33443
    pki_http_port=33080
    
    ### Crypto Token
    pki_hsm_enable=True
    pki_hsm_libfile=/opt/nfast/toolkits/pkcs11/libcknfast.so
    pki_hsm_modulename=nfast
    pki_token_name=NHSM-CONN-XC
    pki_token_password=<YourHSMpassword>
    
    pki_audit_signing_token=NHSM-CONN-XC
    pki_audit_signing_key_algorithm=SHA256withRSA
    pki_audit_signing_key_size=2048
    pki_audit_signing_key_type=rsa
    pki_audit_signing_signing_algorithm=SHA256withRSA
    
    pki_subsystem_token=NHSM-CONN-XC
    pki_subsystem_key_algorithm=SHA256withRSA
    pki_subsystem_signing_algorithm=SHA256withRSA
    pki_subsystem_key_size=2048
    pki_subsystem_key_type=rsa
    
    pki_sslserver_token=NHSM-CONN-XC
    pki_sslserver_key_algorithm=SHA256withRSA
    pki_sslserver_signing_algorithm=SHA256withRSA
    pki_sslserver_key_size=2048
    pki_sslserver_key_type=rsa
    
    ### CA cert chain concatenated in PEM format
    pki_cert_chain_path=/opt/pki_rsa/ca-chain.pem
    
    ### Bootstrap Admin
    pki_admin_password=SECret.123
    pki_admin_key_type=rsa
    pki_admin_key_size=2048
    pki_admin_key_algorithm=SHA256withRSA
    
    ### Bootstrap Admin client dir
    pki_client_admin_cert_p12=/opt/pki_rsa/rhcs10-RSA-OCSP-rootca/ocsp_admin_cert.p12
    pki_client_database_dir=/opt/pki_rsa/rhcs10-RSA-OCSP-rootca/certs_db
    pki_client_database_password=SECret.123
    pki_client_database_purge=False
    pki_client_dir=/opt/pki_rsa/rhcs10-RSA-OCSP-rootca
    pki_client_pkcs12_password=SECret.123
    
    ### Internal LDAP
    pki_ds_bind_dn=cn=Directory Manager
    pki_ds_ldap_port=6389
    pki_ds_ldaps_port=6636
    pki_ds_password=SECret.123
    pki_ds_remove_data=True
    pki_ds_secure_connection=True
    pki_ds_secure_connection_ca_pem_file=/opt/pki_rsa/ca-chain.pem
    pki_ds_secure_connection_ca_nickname=CA Signing Cert - rhcs10-RSA-RootCA
    
    ### Security Domain
    pki_security_domain_hostname=rhcs10.example.com
    pki_security_domain_https_port=8443
    pki_security_domain_password=SECret.123
    pki_security_domain_user=caadmin
    
    
    [Tomcat]
    pki_ajp_port=33009
    pki_tomcat_server_port=33005
    
    [OCSP]
    pki_import_admin_cert=False
    
    pki_ocsp_signing_token=NHSM-CONN-XC
    pki_ocsp_signing_key_algorithm=SHA256withRSA
    pki_ocsp_signing_key_size=3072
    pki_ocsp_signing_key_type=rsa
    pki_ocsp_signing_signing_algorithm=SHA256withRSA
    
    pki_admin_nickname=PKI Bootstrap Administrator for RSA-OCSP-rootca
    pki_admin_name=ocspadmin
    pki_admin_uid=ocspadmin
    pki_admin_email=ocspadmin@example.com
    
    pki_ds_hostname=rhds11.example.com
    pki_ds_base_dn=dc=RSA-OCSP-rootca
    pki_ds_database=CC-RSA-OCSP-rootca-LDAP
    pki_share_db=False
  2. pkispawn ツールを実行して、OCSP サブシステムをインストールします。

    # pkispawn -s OCSP -f ocsp_rootca_inst.cfg --debug

    これにより、OCSP インスタンスが /var/lib/pki/rhcs10-RSA-OCSP-rootca に作成されます。

注記

この OCSP をツーステップ方法を使用してインストールする場合は以下を実行します。

  1. まず、--skip-configuration オプションを指定して pkispawn ツールを実行し、RootCA の OCSP インスタンスをインストールします。

    # pkispawn -s OCSP -f ocsp_rootca_inst.cfg --skip-configuration --debug
  2. 2 つのインストールステップの間に設定ファイルをカスタマイズします。
  3. pkispawn ツールを実行して OCSP を設定します。

    # pkispawn -s OCSP -f ocsp_rootca_inst.cfg --skip-installation --debug

検証

  • インストールされている OCSP インスタンスのステータスを表示します。

    # pki-server status rhcs10-RSA-OCSP-rootca

7.4.3. RootCA の OCSP pkiconsole タイムアウトを増やす

  1. rhcs10.example.com に root としてログインします。
  2. RootCA の OCSP サービスを停止します。

    pki-server stop rhcs10-RSA-OCSP-rootca
  3. /var/lib/pki/rhcs10-RSA-OCSP-rootca/conf/server.xml を編集して、タイムアウトの時間を増やします。

    <Connector name="Secure" port="33443" …
    connectionTimeout="3000000"
  4. RootCA の OCSP サービスを開始します。

    # pki-server start rhcs10-RSA-OCSP-rootca

7.4.4. この OCSP を指すようにデフォルトの AIA 拡張機能を設定します

デフォルトでは、明示的に指定されていない限り、CA は、CA 自身の内部 OCSP を指す AIA (Authority Information Access) 拡張を持つ証明書を発行します。OCSP インスタンスのセットアップを完了したため、RootCA を設定して、代わりに OCSP インスタンスを指す AIA 拡張機能を使用して証明書の発行を開始できます。

root として、rhcs10.example.com で以下を実行します。

  1. RootCA を停止します。

    # pki-server stop rhcs10-RSA-RootCA
  2. RootCA の CS.cfg を編集し、ca.defaultOcspUri 変数が OCSP を指すように設定します。以下に例を示します。

    ca.defaultOcspUri=http://rhcs10.example.com:33080/ocsp/ee/ocsp
  3. RootCA を開始します。

    # pki-server start rhcs10-RSA-RootCA
注記

各サブシステム (KRA など) の OCSP URL は、デフォルトで server.xml ファイルに設定されています。これを有効にすると、ピア証明書に埋め込まれた AIA 拡張ではなく、証明書のステータスを検索するときに静的 URL を使用するように RHCS インスタンスに指示します。AIA 拡張を使用するには、サブシステムのインストール時に 「CA/KRA/TKS/TPS の OCSP を有効にする」 を実行するように指示されます。

7.4.5. OCSP ロールユーザーの作成

  • 「PKI ロールユーザーの作成」 の手順を実行して、OCSP で単一ロールの管理者、エージェント、監査ユーザーを作成します。そのためには、RootCA の OCSP ブートストラップ管理者証明書 ocsp_admin_cert.p12 をインポートする必要があります。以下はその例です。

    # pki -d /root/.dogtag/pki_rsa_bootstrap/certs_db -c SECret.123 client-cert-import --pkcs12 /opt/pki_rsa/rhcs10-RSA-OCSP-rootca/ocsp_admin_cert.p12 --pkcs12-password SECret.123
    
    ----------------------------------------
    Imported certificates from PKCS #12 file
    ----------------------------------------

7.4.6. クライアント認証を使用した OCSP pkiconsole へのログイン

  1. OCSP を authType=sslclientauth で設定し、「クライアント認証を使用した pkiconsole ログイン設定」 に記載された手順でロールユーザー証明書をインポートします。
  2. ロールユーザーのクライアント認証証明書を使用して pkiconsole にログインします。

    # pkiconsole -d <home .redhat-idm-console dir> -n <client cert> https://rhcs10.example.com:33443/ocsp

    そして、リストからロールユーザー証明書のニックネームを選択します (例: OCSP adminV)。コンソールへのログインは成功するはずです。

7.4.7. CRL 公開の設定

Red Hat Certificate System では、CA 外部の OCSP インスタンスで使用される CRL を 2 つの方法で公開できます。

  • CA から OCSP CRL への直接公開
  • CA から LDAP、LDAP から OCSP への間接公開

デフォルトでは、OCSP インスタンスが設定されると最初の CRL 公開方法も自動的に設定され、CA から OCSP CRL への直接公開が可能になります。

このセクションでは、CA が CRL を LDAP サーバーに公開し、OCSP が LDAP サーバーから CRL を取得する 2 番目の方法を詳しく説明します。

7.4.7.1. CRL 公開用の LDAP サーバーの設定

rhds11.example.com で root として以下を実行します。

  1. CA が CRL の公開に使用する Directory Server インスタンスをインストールします。Red Hat Directory Server は、LDAP/LDAPS ポート (それぞれ 12389 および 12636 ) をリッスンしています。

    1. dscreate create-template コマンドを使用して、選択した場所 (例: /root/pki_rsa) にテンプレート .cfg ファイルを作成します。

      # dscreate create-template /root/pki_rsa/rootca-crl-publish-ldap.cfg
    2. 前の手順で作成した .cfg ファイルを編集します。以下のパラメーターのコメントを解除し、インストールをカスタマイズするように設定します。

      full_machine_name = rhds11.example.com
      port = 12389
      secure_port = 12636
      instance_name = CC-RSA-RootCA-CRL-PUBLISH
      root_password = SECret.123
      suffix = dc=example,dc=com
      create_suffix_entry = True
    3. Directory Server インスタンスをインストールします。

      # dscreate from-file /root/pki_rsa/rootca-crl-publish-ldap.cfg
      
      Starting installation...
      
      Completed installation for CC-RSA-RootCA-CRL-PUBLISH
  2. ACI(アクセス制御命令) ルールを追加して、匿名のバインドアクセスを許可します。デフォルトでは、これは無効になっています。

    1. 選択した場所 (例: /root/pki_rsa/dirsrv/) に次の内容の ldapaci.ldif ファイルを作成します。

      dn: dc=example,dc=com
      changetype: modify
      add: aci
      aci: (targetattr!="userPassword || aci")(version 3.0; acl "Enable anonymous access"; allow (read, search, compare) userdn="ldap:///anyone";)
    2. ldapmodify コマンドを実行して、ACI を追加します。

      # ldapmodify -x -h rhds11.example.com -p 12389 -D 'cn=Directory Manager' -W -f /root/pki_rsa/dirsrv/ldapaci.ldif
  3. CRL 公開サブツリーを準備します。

    1. /root/pki_rsa/dirsrv ディレクトリーに次の内容の 2 つのファイルを作成します。

      • rootca_pki_subtree.ldif ファイルの場合:

        dn: dc=pki,dc=example,dc=com
        objectClass: domain
        dc: pki
      • rootca_crl_subtree.ldif ファイルの場合:

        dn: dc=crl,dc=pki,dc=example,dc=com
        objectClass: domain
        dc: crl
    2. 両方のエントリーを CRL インスタンスに追加します。

      # ldapadd -x -H ldap://rhds11.example.com:12389 -D "cn=Directory Manager" -W -f /root/pki_rsa/dirsrv/rootca_pki_subtree.ldif
      # ldapadd -x -H ldap://rhds11.example.com:12389 -D "cn=Directory Manager" -W -f /root/pki_rsa/dirsrv/rootca_crl_subtree.ldif

7.4.7.2. RootCA での CRL 公開の設定

CRL 公開を設定するには、以下を実行します。

  1. ca.publish. プロパティーを追加します。

    1. RootCA インスタンスを停止します。

      # pki-server stop rhcs10-RSA-RootCA
    2. RootCA の CS.cfg 設定ファイル (例: /var/lib/pki/rhcs10-RSA-RootCA/ca/conf/CS.cfg) で次のプロパティーを設定します。

      ca.publish.ldappublish.enable=true
      ca.publish.ldappublish.ldap.ldapauth.authtype=BasicAuth
      ca.publish.ldappublish.ldap.ldapauth.bindDN=cn=Directory Manager
      ca.publish.ldappublish.ldap.ldapauth.bindPWPrompt=CA LDAP Publishing
      ca.publish.ldappublish.ldap.ldapconn.host=rhds11.example.com
      ca.publish.ldappublish.ldap.ldapconn.port=12389
      ca.publish.ldappublish.ldap.ldapconn.secureConn=false
      ca.publish.publisher.instance.LdapCaCertPublisher.caCertAttr=cACertificate;binary
      ca.publish.publisher.instance.LdapCaCertPublisher.caObjectClass=pkiCA
      ca.publish.publisher.instance.LdapCaCertPublisher.pluginName=LdapCaCertPublisher
      ca.publish.mapper.instance.LdapCaCertMap.createCAEntry=true
      ca.publish.mapper.instance.LdapCaCertMap.dnPattern=cn=$subj.cn,dc=crl,dc=pki,dc=example,dc=com
      ca.publish.mapper.instance.LdapCaCertMap.pluginName=LdapCaSimpleMap
      ca.publish.rule.instance.LdapCaCertRule.enable=true
      ca.publish.rule.instance.LdapCaCertRule.mapper=LdapCaCertMap
      ca.publish.rule.instance.LdapCaCertRule.pluginName=Rule
      ca.publish.rule.instance.LdapCaCertRule.predicate=
      ca.publish.rule.instance.LdapCaCertRule.publisher=LdapCaCertPublisher
      ca.publish.rule.instance.LdapCaCertRule.type=cacert
      ca.publish.publisher.instance.LdapCrlPublisher.crlAttr=certificateRevocationList;binary
      ca.publish.publisher.instance.LdapCrlPublisher.crlObjectClass=pkiCA
      ca.publish.publisher.instance.LdapCrlPublisher.pluginName=LdapCrlPublisher
      ca.publish.mapper.instance.LdapCrlMap.createCAEntry=true
      ca.publish.mapper.instance.LdapCrlMap.dnPattern=cn=$subj.cn,dc=crl,dc=pki,dc=example,dc=com
      ca.publish.mapper.instance.LdapCrlMap.pluginName=LdapCaSimpleMap
      ca.publish.rule.instance.LdapCrlRule.enable=true
      ca.publish.rule.instance.LdapCrlRule.mapper=LdapCrlMap
      ca.publish.rule.instance.LdapCrlRule.pluginName=Rule
      ca.publish.rule.instance.LdapCrlRule.predicate=issuingPointId==MasterCRL
      ca.publish.rule.instance.LdapCrlRule.publisher=LdapCrlPublisher
      ca.publish.rule.instance.LdapCrlRule.type=crl
      ca.publish.enable=true
      注記

      または、ca-config-set コマンドを使用してプロパティーを更新することもできます。以下に例を示します。

      # pki-server ca-config-set -i rhcs10-RSA-RootCA ca.publish.ldappublish.ldap.ldapconn.host rhds11.example.com; pki-server ca-config-set -i rhcs10-RSA-RootCA ca.publish.ldappublish.ldap.ldapconn.port 12389; pki-server ca-config-set -i rhcs10-RSA-RootCA ca.publish.mapper.instance.LdapCaCertMap.dnPattern "cn=\$subj.cn,dc=crl,dc=pki,dc=example,dc=com"; pki-server ca-config-set -i rhcs10-RSA-RootCA ca.publish.mapper.instance.LdapCrlMap.dnPattern cn=\$subj.cn,dc=crl,dc=pki,dc=example,dc=com

      上記は一例です。

      ca-config-show コマンドを使用して、パラメーターが正常に更新されたことを確認できます。以下に例を示します。

      # pki-server ca-config-show -i rhcs10-RSA-RootCA ca.publish.ldappublish.ldap.ldapconn.host rhds11.example.com; pki-server ca-config-show -i rhcs10-RSA-RootCA ca.publish.ldappublish.ldap.ldapconn.port 12389; pki-server ca-config-show -i rhcs10-RSA-RootCA ca.publish.mapper.instance.LdapCaCertMap.dnPattern "cn=\$subj.cn,dc=crl,dc=pki,dc=example,dc=com"; pki-server ca-config-show -i rhcs10-RSA-RootCA ca.publish.mapper.instance.LdapCrlMap.dnPattern cn=\$subj.cn,dc=crl,dc=pki,dc=example,dc=com
    3. RootCA インスタンスを起動します。

      pki-server start rhcs10-RSA-RootCA
  2. curl を介して、CRL および CA 証明書を LDAP ディレクトリーにプッシュします。以下に例を示します。

    # curl \
        -d "xml=true" \
        --cert-type P12 \
        --cert /opt/pki_rsa/rhcs10-RSA-RootCA/ca_admin_cert.p12:SECret.123 \
        -k \
        https://rhcs10.example.com:8443/ca/agent/ca/updateCRL \
        | xmllint --format -
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <xml>
      <header>
        <crlIssuingPoint>MasterCRL</crlIssuingPoint>
        <crlUpdate>Scheduled</crlUpdate>
      </header>
      <fixed/>
      <records/>
    </xml>
  3. CA→OCSP CRL の直接公開方式を無効にします。

    1. RootCA を停止します。

      pki-server stop rhcs10-RSA-RootCA
    2. CA の CS.cfg 設定ファイル (例: /var/lib/pki/rhcs10-RSA-RootCA/ca/conf/CS.cfg) を編集し、以下を false に設定します。

      ca.publish.rule.instance.ocsprule-<host/port info>.enable=false

      以下に例を示します。

      ca.publish.rule.instance.ocsprule-rhcs10-example-com-33443.enable=false
    3. 設定の変更を有効にするには、CA を起動します。

      # pki-server start rhcs10-RSA-RootCA
  4. curl を使用して Directory Server を更新します。以下に例を示します。

    # curl \
      -d "updateCRL=yes&updateCA=yes&xml=true" \
      --cert-type P12 --cert /opt/pki_rsa/rhcs10-RSA-RootCA/ca_admin_cert.p12:SECret.123 \
      -k https://rhcs10.example.com:8443/ca/agent/ca/updateDir | xmllint --format -
  5. curl を使用して CRL を表示します。

    # curl \
       -d "pageSize=50&crlIssuingPoint=MasterCRL&pageStart=1&crlDisplayType=entireCRL&xml=true" \
       --cert-type P12 \
       --cert /opt/pki_rsa/rhcs10-RSA-RootCA/ca_admin_cert.p12:SECret.123 \
       -k \
       https://rhcs10.example.com:8443/ca/agent/ca/displayCRL | xmllint --format -
  6. ldapsearch を実行して、CRL と CA 証明書が LDAP ディレクトリーにプッシュされていることを確認します。

    # ldapsearch -x -D "cn=Directory Manager" -h "rhds11.example.com" -p 12389 -b "dc=example,dc=com" -w SECret.123
    . . . Output omitted . . .
    
    # CA Signing Certificate, crl.pki.example.com
    dn: cn=CA Signing Certificate,dc=crl,dc=pki,dc=example,dc=com
    cn: CA Signing Certificate
    sn: CA Signing Certificate
    objectClass: top
    objectClass: person
    objectClass: organizationalPerson
    objectClass: inetOrgPerson
    objectClass: pkiCA
    
    
    cACertificate;binary::
    MIICBzCB8AIBATANBgkqhkiG9w0BAQ0FADBdMRYwFAYDVQQKEw1FeGFtcGxlLVN1YkNBMSIwIAYDVQQLExlyaGNzOTMtVE1TLVN1YkNBLWFha2tpYW5nMR8wHQYDVQQDExZDQSBTaWduaW5nIENlcnRpZmljYXRlFw0xODAzMDkxODA
    
    . . . Output omitted . . .
    
    certificateRevocationList;binary::
    IID9DCCAtygAwIBAgIEBwa6XDANBgkqhkiG9w0BAQsFADBiMR4wHAYDVQQKDBVFeGFtcGxlLXJoY3M5My1UTVMtQ0ExHzAdBgNVBAsMFnJoY3M5My1UTVMtQ
    
    . . . Output omitted . . .
  7. RootCA の証明書公開を無効にします (オプション)。
注記

次の手順は、以下のようなデバッグログの警告メッセージを防ぐためのものです。

2024-01-29 00:04:10 [Thread-18] INFO: CAPublisherProcessor: No rules enabled
2024-01-29 00:04:10 [Thread-18] SEVERE: PublishProcessor::publishCert : Failed to publish using rule: No rules enabled
2024-01-29 00:04:10 [Thread-18] WARNING: Could not publish certificate serial number 0x9c2762c. Error Failed to publish using rule: No rules enabled
Failed to publish using rule: No rules enabled
  1. RootCA を停止します。

    # pki-server stop rhcs10-RSA-RootCA
  2. /var/lib/pki/rhcs10-RSA-RootCA/ca/conf/CS.cfg を編集し、以下を設定します。

    ca.publish.cert.enable=false
  3. 設定の変更を有効にするには、RootCA を起動します。

    # pki-server start rhcs10-RSA-RootCA

7.4.7.3. LDAP サーバーから CRL を取得するように OCSP を設定する

代替の CRL 公開方法を選択した場合は、CRL を取得する場所を OCSP が認識できるように設定する必要があります。そのためには、OCSP 失効情報ストア情報を、CRL 発行 LDAP インスタンス (この章の前半で設定したインスタンス) を指すように事前に設定する必要があります。

OCSP 失効情報ストアを設定するには、以下を実行します。

  1. OCSP を停止します。

    # pki-server stop rhcs10-RSA-OCSP-rootca
  2. OCSP の CS.cfg 設定ファイル (例: /var/lib/pki/rhcs10-RSA-OCSP-rootca/ocsp/conf/CS.cfg) で ldapStore プロパティーを設定します。ocsp.storeId パラメーターを defStore から ldapStore に変更し、次のパラメーターを追加します。

    ocsp.storeId=ldapStore
    ocsp.store.ldapStore.numConns=1
    ocsp.store.ldapStore.host0=rhds11.example.com
    ocsp.store.ldapStore.port0=12389
    ocsp.store.ldapStore.baseDN0=dc=crl,dc=pki,dc=example,dc=com
    ocsp.store.ldapStore.refreshInSec0=120
    ocsp.store.ldapStore.byName=true
    ocsp.store.ldapStore.caCertAttr=cACertificate;binary
    ocsp.store.ldapStore.crlAttr=certificateRevocationList;binary
    ocsp.store.ldapStore.notFoundAsGood=true
    注記

    refreshInSec0 のデフォルト値は 86400 ですが、テスト目的で 120 に設定したため、CRL の更新は 2 分ごとに行われます。

  3. オプションとして、より適切に観察するために、OCSP の CS.cfg 設定ファイルでデバッグレベルを 0 に設定して、LDAPStore の更新がデバッグログに表示されるようにできます。それ以外では、更新がない場合にのみステータスが表示されます。

    debug.level=0

    これを適用すると、特に OCSP システムではデバッグログのサイズが急速に増加することに注意してください。この点を考慮して、短期間のテスト期間のみに推奨されます。

  4. OCSP を起動して、ldapStore 設定を適用します。

    # pki-server start rhcs10-RSA-OCSP-rootca

7.4.7.4. CRL 公開のテスト

このセクションでは、2 つのユーザー証明書を作成し、そのうちの 1 つを取り消して、CRL の公開をテストします。次に、有効な証明書と取り消された証明書の両方を OCSP インスタンスと照合して、応答が想定どおりかどうかを確認します。

CMC 証明書の作成

user1user2 のエージェント署名付き CMC 証明書を作成します。CMC 要求はブートストラップ管理者証明書によって署名されます。たとえば、user1 の場合は以下を行います。

  1. データベースの証明書をリスト表示します。

    # certutil -d /root/.dogtag/pki_rsa_bootstrap/certs_db -L
    
    Certificate Nickname                          Trust Attributes
                                                  SSL,S/MIME,JAR/XPI
    
    PKI Bootstrap Administrator for RSA-RootCA    u,u,u
    CA Signing Cert - rhcs10-RSA-RootCA           CT,C,C
    
    . . . Output omitted . . .
  2. PKCS10Client ツールを使用して、PKCS10 証明書要求を生成します。

    # PKCS10Client -d /root/.dogtag/pki_rsa_bootstrap/certs_db -p SECret.123 -n "cn=test user1, uid=user1" -o /root/.dogtag/pki_rsa_bootstrap/certs_db/user1.req
    
    PKCS10Client: Certificate request written into /root/.dogtag/pki_rsa_bootstrap/certs_db/user1.req
    PKCS10Client: PKCS#10 request key id written into /root/.dogtag/pki_rsa_bootstrap/certs_db/user1.req.keyId
  3. キー ID を表示するには、.keyID ファイルで cat を使用します。これは、次のステップの request.privKeyId= フィールドで必要になります。

    # cat /root/.dogtag/pki_rsa_bootstrap/certs_db/user1.req.keyId; echo
  4. CMC 要求を生成します。

    1. 前の手順で取得した PKCS#10 要求と秘密鍵 ID を使用して、CMCRequest 設定ファイルを作成します。以下に例を示します。

      # vi cmcRequest_p10_user1.cfg
      ### 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.
      ### Multiple files are supported. They must be separated by a space.
      input=/root/.dogtag/pki_rsa_bootstrap/certs_db/user1.req
      
      ### output: full path for the CMC request in binary format
      output=/root/.dogtag/pki_rsa_bootstrap/certs_db/cmc.user1_pkcs10.req
      
      ### tokenname: name of the token where the agent signing cert can be found (default is internal)
      tokenname=internal
      
      ### nickname: nickname for the certificate that will be used to sign the CMC full request.
      ### nickname=caaadmin
      nickname=PKI Bootstrap Administrator for RSA-RootCA
      
      ### dbdir: directory for cert8.db, key3.db and secmod.db
      dbdir=/root/.dogtag/pki_rsa_bootstrap/certs_db
      
      ### password: password for cert8.db that stores the user signing certificate and keys
      password=SECret.123
      
      ### format: request format, either pkcs10 or crmf
      format=pkcs10
      
      ### identityProofV2.enable: if true, then the request will contain this control. Otherwise, false.
      ### Note that if both identityProof and identityProofV2 are enabled,
      ### identityProofV2 takes precedence; Only one of them can be active at a time
      ### Supported hashAlg are:
      ### SHA-256, SHA-384, and SHA-512
      ### Supported macAlg are:
      ### SHA-256-HMAC, SHA-384-HMAC, and SHA-512-HMAC
      identityProofV2.enable=false
      identityProofV2.hashAlg=SHA-512
      identityProofV2.macAlg=SHA-256-HMAC
      request.privKeyId=<key id output from the PKCS10Client|CRMFPopClient cert request>
    2. CMCRequest コマンドを使用してリクエストを生成します。

      # CMCRequest cmcRequest_p10_user1.cfg
      
      cert/key prefix =
      path = /root/.dogtag/pki_rsa_bootstrap/certs_db
      CryptoManger initialized
      token internal logged in...
      got signerCert: PKI Bootstrap Administrator for RSA-RootCA
      createPKIData: begins
      k=0
      createPKIData:  format: pkcs10
      PKCS10: PKCS10: begins
      PKCS10: PKCS10: ends
      selfSign is false...
      signData: begins:
      getPrivateKey: got signing cert
      signData:  got signer privKey
      createSignedData: begins
      getSigningAlgFromPrivate: begins.
      getSigningAlgFromPrivate: found signingKeyType=RSA
      getSigningAlgFromPrivate: using SignatureAlgorithm: RSASignatureWithSHA256Digest
      createSignedData: digest created for pkidata
      createSignedData: digest algorithm =RSASignatureWithSHA256Digest
      createSignedData: building cert chain
      signData: signed request generated.
      getCMCBlob: begins
      getCMCBlob: generating signed data
      
      The CMC enrollment request in base-64 encoded format:
      
      . . . Output omitted . . .
      
      The CMC enrollment request in binary format is stored in
      /root/.dogtag/pki_rsa_bootstrap/certs_db/cmc.user1_pkcs10.req
  5. CMC 要求を送信します。

    1. HttpClient 設定ファイルを作成します。以下に例を示します。

      # vim /root/.dogtag/pki_rsa_bootstrap/certs_db/HttpClient_cmc_p10_user1.cfg
      ### host: host name for the http server
      host=rhcs10.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=/root/.dogtag/pki_rsa_bootstrap/certs_db/cmc.user1_pkcs10.req
      
      ### output: full path for the response in binary format
      output=/root/.dogtag/pki_rsa_bootstrap/certs_db/cmc.user1_pkcs10.resp
      
      ### tokenname: name of the token where the SSL 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=/root/.dogtag/pki_rsa_bootstrap/certs_db/
      
      ### 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=SECret.123
      
      ### nickname: nickname for client certificate
      ### This parameter will be ignored if clientmode=false
      nickname=PKI Bootstrap Administrator for RSA-RootCA
      
      ### servlet: servlet name
      servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caFullCMCUserCert
    2. HttpClient コマンドを使用して要求を送信します。

      # HttpClient /root/.dogtag/pki_rsa_bootstrap/certs_db/HttpClient_cmc_p10_user1.cfg
      
      Total number of bytes read = 3453
      after SSLSocket created, thread token is NSS FIPS 140-2 User Private Key
      client cert is not null
      handshake happened
      writing to socket
      Total number of bytes read = 2590
      
      . . . Output omitted . . .
      
      The response in binary format is stored in
      /root/.dogtag/pki_rsa_bootstrap/certs_db/cmc.user1_pkcs10.resp
  6. CMCResponse コマンドを使用して応答を処理します。

    # CMCResponse -d /root/.dogtag/pki_rsa_bootstrap/certs_db -i /root/.dogtag/pki_rsa_bootstrap/certs_db/cmc.user1_pkcs10.resp
    
    . . . Output omitted . . .
    
    Number of controls is 1
    Control #0: CMCStatusInfoV2
       OID: {1 3 6 1 5 5 7 7 25}
       BodyList: 1
       Status: SUCCESS
  7. 同様に、適切な値で上記の手順を繰り返して、user2 の証明書を作成します。

取り消しの設定

ここで、user2 証明書を取り消すための設定を行います。

  1. CRL および CA 証明書を LDAP ディレクトリーにプッシュします。

    1. ブラウザーで RootCA のエージェント UI にログインします。
    2. Update Revocation List を選択し、Update をクリックします。
    3. Update Directory Server をクリックして、次を選択します。

      • Update the certificate revocation list to the directory (証明書失効リストのディレクトリーへの更新)
      • Update Certificate Manager certificate to the directory (Certificat Manager 証明書のディレクトリーへの更新)
    4. Update Directory をクリックします。
    5. OCSP の ldapStore の更新が行われるのを待ちます (/var/lib/pki/rhcs10-RSA-OCSP-rootca/ocsp/logs/debug のデバッグファイルを確認します)。
  2. OCSPClient ツールを使用して証明書のステータスを確認します。たとえば、user1 の証明書のシリアル番号 (10 進数) を使用すると、次のようになります。

    # OCSPClient -v -d /root/.dogtag/pki_rsa_bootstrap/certs_db -h rhcs10.example.com -p 33080 -c "CA Signing Cert - rhcs10-RSA-RootCA" --serial 245832201
    
    Initializing security database
    Creating request for serial number 245832201
    Submitting OCSP request
    URL: http://rhcs10.example.com:33080/ocsp/ee/ocsp
    Request Length: 71
    Request: MEUwQzBBMD8wPTAJBgUrDgMCGgUABBRA+gjEGo4W0lUiC/Ve/oO8CrXQLQQUK4Bf
    o2u6SW0p6q58dlNCXxOVw30CBA7kEiA=
    
    Response Length: 3546
    Response: <blob>
    CertID.serialNumber=245832201
    CertStatus=Good
  3. user2 の証明書を取り消します。

    1. CMCRequest 設定ファイルを作成します。以下に例を示します。

      # vi cmc-agent-signed-revoke.cfg
      ### numRequests: Total number of PKCS10 requests or CRMF requests.
      numRequests=1
      
      ### output: full path for the CMC request in binary format
      output=/root/.dogtag/pki_rsa_bootstrap/certs_db/cmc.revoke.agentSigned.req
      
      ### tokenname: name of the token where the user signing cert can be found (default is internal)
      tokenname=internal
      
      ### nickname: nickname for the signing certificate which will be used to sign the CMC full request.
      nickname=PKI Bootstrap Administrator for RSA-RootCA
      
      ### dbdir: directory for cert8.db, key3.db and secmod.db
      dbdir=/root/.dogtag/pki_rsa_bootstrap/certs_db
      
      ### password: password for cert8.db which stores the user signing certificate and keys
      password=SECret.123
      
      ### format: request format, either pkcs10 or crmf
      format=pkcs10
      
      ### revocation parameters
      revRequest.enable=true
      revRequest.serial=245832201
      revRequest.reason=unspecified
      revRequest.comment=test user2 certificate revocation
    2. CMCRequest コマンドを使用してリクエストを生成します。

      # CMCRequest cmc-agent-signed-revoke.cfg
      
      cert/key prefix =
      path = /root/.dogtag/pki_rsa_bootstrap/certs_db
      CryptoManger initialized
      token internal logged in...
      got signerCert: PKI Bootstrap Administrator for RSA-RootCA
      addRevRequestAttr: no sharedSecret found; request will be signed;
      addRevRequestAttr: RevokeRequest control created.
      selfSign is false...
      signData: begins:
      getPrivateKey: got signing cert
      signData:  got signer privKey
      createSignedData: begins
      getSigningAlgFromPrivate: begins.
      getSigningAlgFromPrivate: found signingKeyType=RSA
      getSigningAlgFromPrivate: using SignatureAlgorithm: RSASignatureWithSHA256Digest
      createSignedData: digest created for pkidata
      createSignedData: digest algorithm =RSASignatureWithSHA256Digest
      createSignedData: building cert chain
      signData: signed request generated.
      getCMCBlob: begins
      getCMCBlob: generating signed data
      
      The CMC enrollment request in base-64 encoded format:
      
      . . . Output omitted . . .
      
      The CMC enrollment request in binary format is stored in
      /root/.dogtag/pki_rsa_bootstrap/certs_db/cmc.revoke.agentSigned.req
    3. HttpClient 設定ファイルを作成します。以下に例を示します。

      # vi HttpClient.revoke.agentSigned.cfg
      ### CA server host name.
      host=rhcs10.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=/root/.dogtag/pki_rsa_bootstrap/certs_db/cmc.revoke.agentSigned.req
      
      ### output: full path for the response in binary format
      output=/root/.dogtag/pki_rsa_bootstrap/certs_db/cmc.revoke.agentSigned.resp
      
      ### tokenname: name of the token where the SSL 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=/root/.dogtag/pki_rsa_bootstrap/certs_db
      
      ### 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=SECret.123
      
      ### nickname: nickname for client certificate
      ### This parameter will be ignored if clientmode=false
      nickname=PKI Bootstrap Administrator for RSA-RootCA
      
      ### servlet: servlet name
      servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caFullCMCUserCert
    4. HttpClient コマンドを使用して要求を送信します。

      # HttpClient HttpClient.revoke.agentSigned.cfg
      
      Total number of bytes read = 2793
      after SSLSocket created, thread token is NSS FIPS 140-2 User Private Key
      client cert is not null
      handshake happened
      writing to socket
      Total number of bytes read = 1638
      
      . . . Output omitted . . .
      
      The response in binary format is stored in
      /root/.dogtag/pki_rsa_bootstrap/certs_db/cmc.revoke.agentSigned.resp
    5. CMC 応答を処理します。

      # CMCResponse -d /root/.dogtag/pki_rsa_bootstrap/certs_db -i /root/.dogtag/pki_rsa_bootstrap/certs_db/cmc.revoke.agentSigned.resp
      
      . . . Output omitted . . .
      
      Number of controls is 1
      Control #0: CMCStatusInfoV2
        OID: {1 3 6 1 5 5 7 7 25}
        BodyList: 1
        Status: SUCCESS

検証

  1. CA 署名付き監査ログ (例: /var/log/pki/rhcs10-RSA-RootCA/ca/signedAudit/ca_audit) で、user2 証明書が実際に取り消されたことを確認します。
  2. 次の CRL 自動更新まで待機します (更新間隔 (分単位) は RootCA の CS.cfg ファイルの ca.crl.MasterCRL.autoUpdateInterval で設定されており、デフォルトは 240 分に設定されています)。

    注記

    または、CRL をすぐに手動で更新する場合は、ブラウザーで RootCA のエージェント UI にログインし、次の手順を実行します。

    1. Update Revocation List を選択し、Update をクリックします。
    2. Update Directory Server をクリックして、次を選択します。

      • Update the certificate revocation list to the directory (証明書失効リストのディレクトリーへの更新)
      • Update Certificate Manager certificate to the directory (Certificat Manager 証明書のディレクトリーへの更新)
    3. Update Directory をクリックします。

    ldapStore の更新が完了したら、/var/lib/pki/rhcs10-RSA-OCSP-rootca/ocsp/logs/debug にあるデバッグファイルを確認します。

  3. OCSPCLient ツールを使用して、10 進数のシリアル番号で user2 の証明書が失効していることを確認します (-c は署名する CA のニックネームを指します)。

    # OCSPClient -v -d /root/.dogtag/pki_rsa_bootstrap/certs_db -h rhcs10.example.com -p 33080 -c "CA Signing Cert - rhcs10-RSA-RootCA" --serial 245832201
    
    Initializing security database
    Creating request for serial number 245832201
    Submitting OCSP request
    URL: http://rhcs10.example.com:33080/ocsp/ee/ocsp
    Request Length: 71
    Request: MEUwQzBBMD8wPTAJBgUrDgMCGgUABBRA+gjEGo4W0lUiC/Ve/oO8CrXQLQQUK4Bf
    o2u6SW0p6q58dlNCXxOVw30CBA7kEiA=
    
    Response Length: 3563
    Response: <blob>
    CertID.serialNumber=245832201
    CertStatus=Revoked

ocsp.store.ldapStore.refreshInSec0 を、目的の値に戻します。

以前は、テスト目的で CRL の更新間隔を短く (2 分) するために、ocsp.store.ldapStore.refreshInSec0=120 を設定していました。

  • OCSP の CS.cfg の値を目的の値 (秒単位) に変更し、デバッグレベルを 10 に戻して OCSP を再起動してください。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.