13.5.2. 在目录服务器中使用证书系统发布的证书

要在安装证书系统时使用加密连接,需要使用外部证书颁发机构(CA)或自签名证书签发的证书。但是,在设置证书系统 CA 后,管理员通常希望用证书系统发布的证书替换此证书。
将目录服务器使用的 TLS 证书替换为证书系统发布的证书:
  1. 在 Directory Server 主机上:
    1. 停止 Directory 服务器实例:
      # systemctl stop dirsrv@instance_name
    2. 生成证书签名请求(CSR)。
      例如,生成一个使用 2048 位 RSA 加密的 CSR,并将其存储在 ~/ds.csr 文件中:
      # PKCS10Client -d /etc/dirsrv/slapd-instance_name/ -p password -a rsa -l 2048 -o ~/ds.csr -n "CN=$HOSTNAME"
      PKCS10Client: Debug: got token.
      PKCS10Client: Debug: thread token set.
      PKCS10Client: token Internal Key Storage Token logged in...
      PKCS10Client: key pair generated.
      PKCS10Client: CertificationRequest created.
      PKCS10Client: b64encode completes.
      Keypair private key id: -3387b397ebe254b91c5d6c06dc36618d2ea8b7e6
      
      -----BEGIN CERTIFICATE REQUEST-----
      ...
      -----END CERTIFICATE REQUEST-----
      PKCS10Client: done. Request written to file: ~/ds.csr
    3. 启动 Directory 服务器实例,以启用 CA 来处理请求:
      # systemctl start dirsrv@instance_name
    4. 将 CSR 提交到证书系统的 CA。例如:
      # pki -d /etc/dirsrv/slapd-instance_name/ ca-cert-request-submit --profile caServerCert --csr-file ~/ds.csr
      -----------------------------
      Submitted certificate request
      -----------------------------
        Request ID: 13
        Type: enrollment
        Request Status: pending
        Operation Result: success
  2. 在证书系统主机上:
    1. 将 CA 代理证书导入到网络安全服务(NSS)数据库中以签署 CMC 完整请求:
      1. 创建新目录。例如:
        # mkdir ~/certs_db/
      2. 在新创建的目录中初始化数据库:
        # certutil -N -d ~/certs_db/
      3. 显示 CA 签名证书的序列号:
        # pki -p 8080 ca-cert-find --name "CA Signing Certificate"
        ---------------
        1 entries found
        ---------------
        Serial Number: 0x87bbe2d
        ...
      4. 使用上一步中的序列号,将 CA 签名证书下载到 ~/certs_db/CA.pem 文件中:
        # pki -p 8080 ca-cert-show 0x87bbe2d --output ~/certs_db/CA.pem
      5. 将 CA 签名证书导入到 NSS 数据库中:
        # pki -d ~/certs_db/ -c password client-cert-import "CA Certificate" --ca-cert ~/certs_db/CA.pem
      6. 导入代理证书:
        # pk12util -d ~/certs_db/ -i ~/.dogtag/instance_name/ca_admin_cert.p12
        Enter Password or Pin for "NSS FIPS 140-2 Certificate DB": password
        Enter password for PKCS12 file: password
        pk12util: PKCS12 IMPORT SUCCESSFUL
        
    2. 通过 CMS(CMC)请求创建证书管理:
      1. 创建一个配置文件,如 ~/sslserver-cmc-request.cfg,其中包含以下内容:
        # NSS database directory where the CA agent certificate is stored.
        dbdir=~/certs_db/
        
        # NSS database password.
        password=password
        
        # Token name (default is internal).
        tokenname=internal
        
        # Nickname for CA agent certificate.
        nickname=caadmin
        
        # 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=~/ds.csr
        
        # Path for the CMC request.
        output=~/sslserver-cmc-request.bin
      2. 创建 CMC 请求:
        # CMCRequest ~/sslserver-cmc-request.cfg
        ...
        The CMC enrollment request in base-64 encoded format:
        ...
        The CMC enrollment request in binary format is stored in ~/sslserver-cmc-request.bin
    3. 提交 CMC 请求:
      1. 创建一个配置文件,如 ~/sslserver-cmc-submit.cfg,其中包含以下内容:
        # 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=~/certs_db/
        
        # NSS database password.
        password=password
        
        # Token name (default: internal).
        tokenname=internal
        
        # Nickname of CA agent certificate.
        nickname=caadmin
        
        # CMC servlet path
        servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCserverCert
        
        # Path for the CMC request.
        input=~/sslserver-cmc-request.bin
        
        # Path for the CMC response.
        output=~/sslserver-cmc-response.bin
      2. 提交请求:
        # HttpClient sslserver-cmc-submit.cfg
        ...
        The response in binary format is stored in
        ~/sslserver-cmc-response.bin
      3. (可选)验证结果:
        # CMCResponse -d ~/certs_db/ -i ~/sslserver-cmc-response.bin
        ...
        Number of controls is 1
        Control #0: CMCStatusInfoV2
           OID: {1 3 6 1 5 5 7 7 25}
           BodyList: 1
           Status: SUCCESS
        
    4. 显示 Directory 服务器证书的序列号:
      # pki -p 8080 ca-cert-find --name "DS Certificate"
      ---------------
      1 entries found
      ---------------
      Serial Number: 0xc3eeb0c
      ...
    5. 使用上一步中的序列号下载证书:
      # pki -p 8080 ca-cert-show 0xc3eeb0c --output ~/ds.crt
    6. 将 Directory Server 和 CA 证书的证书复制到 Directory Server 主机上。例如:
      # scp ~/ds.crt ~/certs_db/CA.pem ds.example.com:~/
    7. 停止证书系统:
      # systemctl stop pki-tomcatd@instance_name.service
  3. 在 Directory Server 主机上:
    1. 停止 Directory 服务器实例:
      # systemctl stop dirsrv@instance_name
    2. 替换证书。详情请查看 Red Hat Directory Server Administration Guide 中的对应部分:
      1. 删除旧的证书和密钥 CA 证书。请参阅 删除证书
      2. 安装证书系统发布的 CA 证书。请参阅安装 CA 证书
      3. 为证书系统发布的目录服务器安装证书。请参阅安装证书
    3. 启动 Directory 服务器实例:
      # systemctl start dirsrv@instance_name
  4. 启动证书系统:
    # systemctl stop pki-tomcatd@instance_name.service
  5. 另外,还可配置基于证书的身份验证。详情请查看 第 13.5.3 节 “使用内部数据库启用 SSL/TLS 客户端身份验证”