15.4. 配置 LDAP 数据库
证书系统执行证书和密钥管理功能以响应它收到的请求。这些功能包括:
- 存储和检索证书请求
- 存储和检索证书记录
- 存储 CRL
- 存储 ACL
- 存储特权用户和角色信息
- 存储和检索最终用户的加密密钥记录
为履行这些功能,证书系统与红帽目录服务器集成,称为内部数据库或 本地数据库 。目录服务器作为证书系统配置的一部分引用;当配置了证书系统子系统时,会在 Directory Server 中创建一个新数据库。此数据库作为嵌入式数据库,完全由证书系统实例使用,可以使用 Directory Server 附带的目录管理工具进行管理。
证书系统实例数据库使用 serverRoot/slapd-DS_name/db/
目录中的其他目录服务器数据库列出。这些数据库由 /usr/share/ pki/server/etc/default.cfg 文件(CS_ instance_name-CA
, CS_instance_name-CA , CS_instance_name-CA ,CS_instance_name-KRA,CS_instance_name-OCSP,CS_instance_name-TKS, CS_instance_name-CA, CS_instance_name- KRA , CS_instance_name-OCSP , CS_instance_name-TKS
例如,对于名为 ca1
的证书管理器,数据库名称为 ca1-CA
。同样,数据库名称由 /usr/share/ pki/server/etc/default.cfg 文件(o=CS_
instance_name-CA, o=CS_instance_name-CA, o=CS_instance_name-KRA, o=CS_instance_name-KRA, o=CS_instance_name-OCSP, o=CS_instance_name-TKS, 或 o=CS_instance_name-KRA, o=CS_instance_name-KRA 决定。
子系统使用数据库来存储不同的对象。证书管理器存储所有数据、证书请求、证书、CRL 和相关信息,而 KRA 仅存储密钥记录和相关数据。
内部数据库架构配置为仅存储证书系统数据。不要对其进行任何更改,或者将证书系统配置为使用任何其他 LDAP 目录。这样做可能会导致数据丢失。
此外,请勿将内部 LDAP 数据库用于任何其他目的。
15.4.1. 更改内部数据库配置
要更改子系统实例用作其内部数据库的 Directory 服务器实例:
登录子系统管理控制台。
pkiconsole https://server.example.com:admin_port/<subsystem_type>
注意pkiconsole
已被弃用。- 在 Configuration 选项卡中,选择 Internal Database 选项卡。
通过更改主机名、端口和绑定 DN 字段来更改目录服务器实例。
hostname 是安装 Directory 服务器的机器的完全限定主机名,如 certificate.
example.com
。证书系统使用此名称来访问目录。默认情况下,用作内部数据库的目录服务器实例的主机名显示为
localhost
,而不是实际主机名。这样做的目的是使内部数据库从系统外部可见,因为localhost
上的服务器只能从本地计算机访问。因此,默认配置可最小化从本地机器连接到这个目录服务器实例的人员的风险。如果内部数据库的可见性可以限制为本地子网,可以将主机名更改为
localhost
以外的内容。例如,如果证书系统和目录服务器安装在单独的机器上以进行负载平衡,请指定安装 Directory 服务器的机器的主机名。端口号是用来与目录服务器进行非 SSL 通信的 TCP/IP 端口。
DN 应该是目录管理器 DN。当证书系统子系统访问目录树与目录通信时,它会使用此 DN。
点击
。配置会被修改。如果更改需要重启服务器,则会显示包含该消息的提示。在这种情况下,重启服务器。
15.4.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
显示目录服务器证书的序列号:
# 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 服务器和 CA 证书的证书复制到目录服务器主机上。例如:
# scp ~/ds.crt ~/certs_db/CA.pem ds.example.com:~/
停止证书系统:
# pki-server stop <instance_name>
在 Directory Server 主机上:
启动证书系统:
# pki-server stop <instance_name>
- (可选)配置基于证书的身份验证。详情请查看 第 15.4.3 节 “使用内部数据库启用 SSL/TLS 客户端身份验证”。
15.4.3. 使用内部数据库启用 SSL/TLS 客户端身份验证
客户端身份验证 允许一个实体通过提供证书来对另一个实体进行身份验证。证书系统代理使用这种身份验证方法登录到代理服务页面,例如:
要在证书系统实例和它用作其内部数据库的 LDAP 目录实例之间使用 SSL/TLS 连接,必须启用客户端身份验证,以允许证书系统实例进行身份验证并绑定到 LDAP 目录。
设置客户端身份验证有两个部分。第一个是配置 LDAP 目录,如设置 SSL/TLS 并设置 ACI 来控制证书系统实例访问。第二个是在证书系统实例上创建用户,它将用于绑定到 LDAP 目录并设置其证书。
要为 PKI 实例配置 LDAPS,请参阅 pkispawn (8)
手册页(例如:安装具有安全 LDAP 连接的 PKI 子系统)。
15.4.3.1. 限制访问内部数据库
Red Hat Directory Server Console 显示证书系统用作其内部数据库的 Directory 服务器实例的条目或图标。
与证书系统控制台(访问仅限于具有证书系统管理员特权的用户)不同,目录服务器控制台可以被任何用户访问。用户可以为内部数据库打开目录服务器控制台,并更改到其中存储的数据,例如从证书系统管理员组删除用户或向组添加自己的条目。
访问权限只能限制为知道目录管理器 DN 和密码的用户。可以通过修改单点登录密码缓存来更改此密码。
- 登录到目录服务器控制台。
- 选择证书系统内部数据库条目,然后单击 。
- 选择 Configuration 选项卡。
- 在导航树中,展开 插件,然后选择 Pass-Through Authentication。
- 在右侧窗格中,取消选择 Enable plugin 复选框。
点击
。服务器提示重新启动服务器。
- 单击 Tasks 选项卡,然后单击 。
- 关闭目录服务器控制台。
服务器重启时,打开内部数据库实例的 Directory 服务器控制台。
此时会出现 Login to Directory 对话框 ; Distinguished Name 字段显示 Directory Manager DN; 输入密码。
只有在输入了正确的密码时,内部数据库的 Directory Server Console 才会打开。