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-KRACS_instance_name-OCSPCS_instance_name-TKSCS_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 仅存储密钥记录和相关数据。
警告
内部数据库架构配置为仅存储证书系统数据。不要对其进行任何更改,或者将证书系统配置为使用任何其他 LDAP 目录。这样做可能会导致数据丢失。
此外,请勿将内部 LDAP 数据库用于任何其他目的。

14.5.1. 更改内部数据库配置

更改子系统实例用作其内部数据库的 Directory 服务器实例:
  1. 登录子系统管理控制台。
    pkiconsole https://server.example.com:admin_port/subsystem_type
  2. Configuration 选项卡中,选择 Internal Database 选项卡。
  3. 通过更改主机名、端口和绑定 DN 字段来更改 Directory 服务器实例。
    hostname 是安装目录服务器的机器的完全限定域名,如 certificate. example.com。证书系统使用此名称来访问目录。
    默认情况下,用作内部数据库的目录服务器实例的主机名显示为 localhost 而不是实际主机名。这样做是为了使内部数据库在系统外可见,因为 localhost 上的服务器只能从本地计算机访问。因此,默认配置可最小化从本地机器外部连接到此目录服务器实例的风险。
    如果内部数据库的可见性限制为本地子网,可以将主机名更改为 localhost 以外的内容。例如,如果证书系统和目录服务器安装在用于负载平衡的独立机器上,请指定安装目录服务器的机器的主机名。
    端口号是用于与目录服务器非 SSL 通信的 TCP/IP 端口。
    DN 应该是目录管理器 DN。当证书系统子系统访问目录树与目录通信时,它会使用此 DN。
  4. 点击 Save
    配置会被修改。如果更改需要重启服务器,则会显示包含该消息的提示。在这种情况下,重启服务器。
注意
pkiconsole 已被弃用。

14.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. 显示目录服务器证书的序列号:
      # 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 服务器和 CA 证书的证书复制到目录服务器主机上。例如:
      # scp ~/ds.crt ~/certs_db/CA.pem ds.example.com:~/
    7. 停止证书系统:
      # pki-server stop instance_name
  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. 启动证书系统:
    # pki-server stop instance_name
  5. (可选)配置基于证书的身份验证。详情请查看 第 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. 限制对内部数据库的访问

Red Hat Directory Server 控制台显示证书系统用作其内部数据库的 Directory 服务器实例的条目或图标。
与证书系统控制台不同,其访问仅限于具有证书系统管理员特权的用户,目录服务器控制台可以被任何用户访问。用户可以为内部数据库打开目录服务器控制台,并更改到其中存储的数据,例如从证书系统管理员组中删除用户或向组中添加自己的条目。
访问权限只能限制为知道目录管理器 DN 和密码的用户。可以通过修改单点登录密码缓存来更改此密码。
  1. 登录目录服务器控制台。
  2. 选择 Certificate System internal database 条目,然后单击 Open
  3. 选择 Configuration 选项卡。
  4. 在导航树中,展开 Plug-ins,然后选择 Pass-Through Authentication
  5. 在右侧窗格中,取消选择 Enable plugin 复选框。
  6. 点击 Save
    服务器提示重新启动服务器。
  7. Tasks 选项卡,然后点 重启 Directory Server
  8. 关闭 Directory 服务器控制台。
  9. 服务器重启时,为内部数据库实例打开 Directory Server 控制台。
    此时会出现 Login to Directory 对话框; Distinguished Name 字段显示 Directory Manager DN;输入密码。
    只有在输入了正确的密码时,内部数据库的目录服务器控制台才会打开。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.