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