13.5.2. 在目录服务器中使用证书系统发布的证书
要在安装证书系统时使用加密连接,需要使用外部证书颁发机构(CA)或自签名证书签发的证书。但是,在设置证书系统 CA 后,管理员通常希望用证书系统发布的证书替换此证书。
将目录服务器使用的 TLS 证书替换为证书系统发布的证书:
- 在 Directory Server 主机上:
- 停止 Directory 服务器实例:
# systemctl stop dirsrv@instance_name
- 生成证书签名请求(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
- 启动 Directory 服务器实例,以启用 CA 来处理请求:
# systemctl start dirsrv@instance_name
- 将 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
- 在证书系统主机上:
- 将 CA 代理证书导入到网络安全服务(NSS)数据库中以签署 CMC 完整请求:
- 创建新目录。例如:
# mkdir ~/certs_db/
- 在新创建的目录中初始化数据库:
# certutil -N -d ~/certs_db/
- 显示 CA 签名证书的序列号:
# pki -p 8080 ca-cert-find --name "CA Signing Certificate" --------------- 1 entries found --------------- Serial Number: 0x87bbe2d ...
- 使用上一步中的序列号,将 CA 签名证书下载到
~/certs_db/CA.pem
文件中:# pki -p 8080 ca-cert-show 0x87bbe2d --output ~/certs_db/CA.pem
- 将 CA 签名证书导入到 NSS 数据库中:
# pki -d ~/certs_db/ -c password client-cert-import "CA Certificate" --ca-cert ~/certs_db/CA.pem
- 导入代理证书:
# 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
- 通过 CMS(CMC)请求创建证书管理:
- 创建一个配置文件,如
~/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
- 创建 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
- 提交 CMC 请求:
- 创建一个配置文件,如
~/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
- 提交请求:
# HttpClient sslserver-cmc-submit.cfg ... The response in binary format is stored in ~/sslserver-cmc-response.bin
- (可选)验证结果:
# 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
- 显示 Directory 服务器证书的序列号:
# pki -p 8080 ca-cert-find --name "DS Certificate" --------------- 1 entries found --------------- Serial Number: 0xc3eeb0c ...
- 使用上一步中的序列号下载证书:
# pki -p 8080 ca-cert-show 0xc3eeb0c --output ~/ds.crt
- 将 Directory Server 和 CA 证书的证书复制到 Directory Server 主机上。例如:
# scp ~/ds.crt ~/certs_db/CA.pem ds.example.com:~/
- 停止证书系统:
# systemctl stop pki-tomcatd@instance_name.service
- 在 Directory Server 主机上:
- 停止 Directory 服务器实例:
# systemctl stop dirsrv@instance_name
- 替换证书。详情请查看 Red Hat Directory Server Administration Guide 中的对应部分:
- 删除旧的证书和密钥 CA 证书。请参阅 删除证书。
- 安装证书系统发布的 CA 证书。请参阅安装 CA 证书。
- 为证书系统发布的目录服务器安装证书。请参阅安装证书。
- 启动 Directory 服务器实例:
# systemctl start dirsrv@instance_name
- 启动证书系统:
# systemctl stop pki-tomcatd@instance_name.service
- 另外,还可配置基于证书的身份验证。详情请查看 第 13.5.3 节 “使用内部数据库启用 SSL/TLS 客户端身份验证”。