2.2. 证书系统子系统概述


2.2.1. 与共享实例分开

Red Hat Certificate System 支持为所有子系统部署单独的 PKI 实例:

  • 单独的 PKI 实例作为基于 Java 的 Apache Tomcat 实例运行。
  • 单独的 PKI 实例包含一个 PKI 子系统(CA、KRA、OCSP、TKS 或 TPS)。
  • 如果在同一物理机或虚拟机(VM)上共存,则单独的 PKI 实例必须使用唯一的端口。

或者,证书系统支持部署共享 PKI 实例:

  • 共享 PKI 实例也作为基于 Java 的 Apache Tomcat 实例运行。
  • 包含单个 PKI 子系统的共享 PKI 实例与单独的 PKI 实例相同。
  • 共享 PKI 实例可能包含每种 PKI 子系统之一的组合:

    • 仅限 CA
    • 仅限 TKS
    • CA 和 KRA
    • CA 和 OCSP
    • TKS 和 TPS
    • CA、KRA、TKS 和 TPS
    • CA, KRA, OCSP, TKS, 和 TPS
    • etc.
  • 共享 PKI 实例允许其实例中包含的所有子系统共享同一端口。
  • 如果多个端口位于同一台物理机或虚拟机上,则共享 PKI 实例必须使用唯一端口。

2.2.2. 实例安装先决条件

2.2.2.1. 目录服务器实例可用性

在安装证书系统实例之前,必须使用本地或远程红帽目录服务器 LDAP 实例。有关安装红帽目录服务器的说明,请参阅 红帽目录服务器安装指南

2.2.2.2. PKI 软件包

Red Hat Certificate System 由以下列出的软件包组成:

  • 以下基本软件包形成了证书系统的核心,并可用于基本 Red Hat Enterprise Linux 软件仓库:

    • pki-core

      • pki-base
      • pki-base-java
      • pki-ca
      • pki-javadoc
      • pki-kra
      • pki-server
      • pki-symkey
      • pki-tools
  • 以下列出的软件包在基本 Red Hat Enterprise Linux 订阅频道 中不可用。要安装这些软件包,您必须附加一个 Red Hat Certificate System 订阅池并启用 RHCS 存储库。如需更多信息,请参阅 第 6.4.3 节 “附加红帽订阅并启用证书系统软件包存储库”

    • pki-core

      • pki-console
      • pki-ocsp
      • pki-tks
      • pki-tps
    • redhat-pki

      • redhat-pki: 包含 pki-core 模块的所有软件包。如果要单独选择 redhat-pki 软件包,建议禁用 pki-core 模块。
      • redhat-pki-console-theme
      • redhat-pki-server-theme

使用 Red Hat Enterprise Linux 8 系统(可选,使用 中列出的受支持硬件安全模块配置了一个硬件安全模块),并在安装 Red Hat Certificate System 前确保所有软件包都为最新版本。

要安装所有证书系统软件包( pki-javadoc除外),请使用 dnf 安装 redhat-pki metapackage:

# dnf install redhat-pki

或者,您也可以根据需要安装一个或多个顶级 PKI 子系统软件包;请参阅上面的列表。如果使用此方法,请确保还要安装 redhat-pki-server-theme 软件包,以及可选的 redhat-pki-console-themepki-console 以使用 PKI 控制台。

最后,开发人员和管理员可能还想安装 JSS 和 PKI javadoc ( jss-javadocpki-javadoc)。

注意

jss-javadoc 软件包要求您在 Subscription Manager 中启用 Server-Optional 存储库。

2.2.2.3. 实例安装和配置

pkispawn 命令行工具用于安装和配置新的 PKI 实例。它消除了对独立安装和配置步骤的需求,并可以作为批处理进程以交互方式运行,或者全部组合(带有提示密码的批量进程)。实用程序不提供安装或配置基于浏览器的图形界面的方法。

如需用法信息,请使用 pkispawn --help 命令。

pkispawn 命令:

  1. 从纯文本配置文件(/usr/share/pki/server/etc/default.cfg)读取其默认 name=value 对。
  2. 以互动方式或自动覆盖指定的任何对,并以 Python 字典的形式存储最终结果。
  3. 执行有序的 Scriptlets 来执行 子系统和实例安装。
  4. 配置 scriptlet 将 Python 字典打包为 JavaScript Object Notation (JSON)数据对象,然后传递给基于 Java 的配置 servlet。
  5. 配置 servlet 使用这个数据来配置新的 PKI 子系统,然后将控制传递给 pkispawn 可执行文件,后者可完成 PKI 设置。

最终部署文件的副本存储在 /var/lib/pki/instance_name/ <subsystem> /registry/&lt;subsystem>/deployment.cfg

详情请查看 pkispawn 手册页。

默认配置文件 /usr/share/pki/server/etc/default.cfg 是包含默认安装和配置值的纯文本文件,这些值在上述过程开始时读取。它由 name=value 对组成,[DEFAULT], [Tomcat], [CA], [KRA], [OCSP], [TKS], 和 [TPS] 部分。

如果您将 use -s 选项与 pkispawn 一起使用并指定子系统名称,则只有该子系统的部分会被读取。

这些部分有一个层次结构:一个在 subsystem 部分中指定的 name=value 对将覆盖 [Tomcat] 部分中的对,后者又覆盖 [DEFAULT] 部分中的对。默认对可以通过交互式输入或指定 PKI 实例配置文件中的对覆盖。

注意

每当使用非交互式文件覆盖默认 name=value 对时,它们可能会存储在任意位置,并随时指定。这些文件在 pkispawn man page 中称为 myconfig.txt,但它们通常也称为 .ini 文件,或者更常见的是 PKI 实例配置覆盖文件。

如需更多信息,请参阅 pki_default.cfg 手册页。

配置 Servlet 由存储在 /usr/share/java/pki/pki-certsrv.jar 中的 Java 字节码组成,作为 com/netscape/certsrv/system/ConfigurationRequest.class。servlet 使用 pkispawn 来处理作为 JSON 对象传递的数据,然后使用与 com/netscape/certsrv/system/ConfigurationResponse.class 相同的文件中提供的 Java 字节码返回 pkispawn

交互式安装示例仅涉及以 root 用户身份在命令行上运行 pkispawn 命令:

# pkispawn
重要

目前,交互式安装仅存在于非常基本的部署中。例如,在使用克隆、Elliptic Curve Curve Cryptography (ECC)、外部 CA、硬件安全模块(HSM)、子 CA 和其他级 CA 等高级功能时,必须在单独的配置文件中提供必要的覆盖参数。

非交互式安装需要 PKI 实例配置覆盖文件,进程可能类似以下示例:

  1. 创建 pki 目录:

    # mkdir -p /root/pki
  2. 使用文本编辑器,如 vim,使用以下内容创建名为 /root/pki/ca.cfg 的配置文件:

    [DEFAULT]
    pki_admin_password=<password>
    pki_client_pkcs12_password=<password>
    pki_ds_password=<password>
  3. # pkispawn -s CA -f /root/pki/ca.cfg

有关各种配置示例,请参阅 pkispawn 手册页。

2.2.2.4. 实例删除

要删除现有的 PKI 实例,请使用 pkidestroy 命令。它可以以交互方式运行,也可以作为批处理运行。使用 pkidestroy -h 来显示命令行的详细用法信息。

pkidestroy 命令在 PKI 子系统部署配置文件中读取,该文件在创建子系统时存储(/var/lib/pki/instance_name/ <subsystem&gt;/registry/<subsystem> /deployment.cfg),使用 read-in 文件来删除 PKI 子系统,如果它不包含额外的子系统,则删除 PKI 实例。如需更多信息,请参阅 pkidestroy 手册页。

使用 pkidestroy 进行交互式删除过程可能类似如下:

# pkidestroy
Subsystem (CA/KRA/OCSP/TKS/TPS) [CA]:
Instance [pki-tomcat]:

Begin uninstallation (Yes/No/Quit)? Yes

Log file: /var/log/pki/pki-ca-destroy.20150928183547.log
Loading deployment configuration from /var/lib/pki/pki-tomcat/ca/registry/ca/deployment.cfg.
Uninstalling CA from /var/lib/pki/pki-tomcat.
rm '/etc/systemd/system/multi-user.target.wants/pki-tomcatd.target'

Uninstallation complete.

非互动删除过程可能类似以下示例:

# pkidestroy -s CA -i pki-tomcat
Log file: /var/log/pki/pki-ca-destroy.20150928183159.log
Loading deployment configuration from /var/lib/pki/pki-tomcat/ca/registry/ca/deployment.cfg.
Uninstalling CA from /var/lib/pki/pki-tomcat.
rm '/etc/systemd/system/multi-user.target.wants/pki-tomcatd.target'

Uninstallation complete.

当使用硬件令牌或硬件安全模块(HSM)时,密钥对不会被删除,因为您可以克隆实例。只有在使用软令牌时,才会删除密钥对。

这很重要,因为您可以在不实现令牌的情况下轻松重新创建实例并填充 HSM 内存。

在这种情况下,您的 certutil 命令输出可能类似以下示例,使用环境变量 $nssdb 指向本地 NSS 数据库,以访问 HSM,这与 PKI 的 NSS DB 不同:

# certutil -L -d /etc/pki/2023-10-03-0139-10.4-rootca1/alias/ -h   thalesLunaDEV -f ${nssdb}/hsm.password.txt
Certificate Nickname Trust Attributes
SSL,S/MIME,JAR/XPI
thalesLunaDEV:Server-Cert cert-2023-10-03-0139-10.4-rootca1 CA u,u,u
thalesLunaDEV:caSigningCert cert-2023-10-03-0139-10.4-rootca1 CA CTu,Cu,Cu
thalesLunaDEV:ocspSigningCert cert-2023-10-03-0139-10.4-rootca1 CA u,u,u
thalesLunaDEV:subsystemCert cert-2023-10-03-0139-10.4-rootca1 u,u,u
thalesLunaDEV:auditSigningCert cert-2023-10-03-0139-10.4-rootca1 CA u,u,Pu

销毁实例,例如:

# pkidestroy -v -i 2023-10-03-0139-10.4-rootca1 -s CA 2>&1 | tee ~/pkidestroy.2023-10-03-0139-10.4-rootca1.out.1.txt

验证实例已被删除,例如:

pki-server instance-find

验证硬件令牌中是否存在来自已删除 PKI 实例 till 的私钥:

# certutil -K -d ${nssdb} -h thalesLunaDEV -f ${nssdb}/hsm.password.txt
certutil: Checking token "thalesLunaDEV" in slot "LunaNet Slot"
< 0> rsa 6ba7e14b85cf5bf0433658bbdd207298bc7083b1 auditSigningCert cert-2023-10-03-0139-10.4-rootca1 CA
< 1> rsa e23a6a9f4d545617240a551703eeec4c9da74dd2 ocspSigningCert cert-2023-10-03-0139-10.4-rootca1 CA
< 2> rsa c47758d7246a9d89705e149a79d69cc70e78b12f caSigningCert cert-2023-10-03-0139-10.4-rootca1 CA
< 3> rsa b570420fc93a4a108109c5eed4ddefa1c7548495 Server-Cert cert-2023-10-03-0139-10.4-rootca1 CA
< 4> rsa 3ea53e3e227a0b0a070479b741221c474467ca35 subsystemCert cert-2023-10-03-0139-10.4-rootca1

如果您确实需要删除这些私钥,可以使用 certutil -F 命令或 manufacturer 工具,例如 Luna Client cmu listcmu delete 带有一些选项。

以下是一个 certutil 示例,它已初始化了 NSS db 目录:

certutil -F -d ${nssdb} -f ${nssdb}/hsm.password.txt -h thalesLunaDEV -n "thalesLunaDEV:auditSigningCert cert-2023-10-03-0139-10.4-rootca1 CA"
certutil -F -d ${nssdb} -f ${nssdb}/hsm.password.txt -h thalesLunaDEV -n "thalesLunaDEV:Server-Cert cert-2023-10-03-0139-10.4-rootca1 CA"
certutil -F -d ${nssdb} -f ${nssdb}/hsm.password.txt -h thalesLunaDEV -n "thalesLunaDEV:subsystemCert cert-2023-10-03-0139-10.4-rootca1 CA"
certutil -F -d ${nssdb} -f ${nssdb}/hsm.password.txt -h thalesLunaDEV -n "thalesLunaDEV:ocspSigningCert cert-2023-10-03-0139-10.4-rootca1 CA"
certutil -F -d ${nssdb} -f ${nssdb}/hsm.password.txt -h thalesLunaDEV -n "thalesLunaDEV:caSigningCert cert-2023-10-03-0139-10.4-rootca1 CA"

可选。删除与删除的 CA 签名证书关联的系统信任证书或签发者或信任链(例如:

trust list | grep -B 3 -A 3 "CA Signing Certificate"
 pkcs11:id=%1D%D6%80%D7%C9%29%56%85%73%63%F4%A1%DE%EF%19%3A%E4%5B%BB%97;type=cert
 type: certificate
 label: CA Signing Certificate
 trust: anchor
 category: authority
trust anchor --remove "pkcs11:id=%1D%D6%80%D7%C9%29%56%85%73%63%F4%A1%DE%EF%19%3A%E4%5B%BB%97;type=cert"
trust list | grep -c "CA Signing Certificate"
 0

2.2.3. 执行管理(systemctl)

2.2.3.1. 启动、停止、重启和获取状态

Red Hat Certificate System 子系统实例可以使用 Red Hat Enterprise Linux 8 上的 systemctl 执行管理系统工具停止并启动:

# systemctl start <unit-file>@instance_name.service
# systemctl status <unit-file>@instance_name.service
# systemctl stop <unit-file>@instance_name.service
# systemctl restart <unit-file>@instance_name.service

<unit-file> 具有以下值之一:

pki-tomcatd 			With watchdog disabled
pki-tomcatd-nuxwdog 		With watchdog enabled

有关 watchdog 服务的详情,请参考 Red Hat Certificate System Administration Guide 中的 第 2.3.9 节 “密码和 watchdog (nuxwdog)” 和使用证书系统 Watchdog Service 部分。

注意

在 RHCS 10 中,这些 systemctl 操作支持 pki-server 别名: pki-server <command> subsystem_instance_namesystemctl <command> pki-tomcatd@<instance>.service 的别名。

2.2.3.2. 自动启动实例

Red Hat Enterprise Linux 中的 systemctl 工具管理服务器上每个进程的自动启动和关闭设置。这意味着,当系统重启时,一些服务可以被自动重启。系统单元文件控制服务启动,以确保服务以正确顺序启动。systemd 服务和 systemctl 工具在 Red Hat Enterprise Linux 8 的配置基本系统设置指南中进行了描述。

证书系统实例可由 systemctl 管理,因此此实用程序可以设置是否自动重启实例。创建证书系统实例后,它会在引导时启用。这可以通过使用 systemctl 进行修改:

# systemctl disable pki-tomcatd@instance_name.service

重新启用实例:

# systemctl enable pki-tomcatd@instance_name.service
注意

systemctl enablesystemctl disable 命令不会立即启动或停止证书系统。

2.2.4. 进程管理(pki-server 和 pkidaemon)

2.2.4.1. pki-server 命令行工具

Red Hat Certificate System 的主要进程管理工具是 pki-server。使用 pki-server --help 命令,并查看 pki-server 手册页。

pki-server 命令行界面(CLI)管理本地服务器实例(如服务器配置或系统证书)。按如下方式调用 CLI:

$ pki-server [CLI options] <command> [command parameters]

CLI 使用服务器实例的配置文件和 NSS 数据库,因此 CLI 不需要任何之前的初始化。由于 CLI 直接访问文件,它只能由 root 用户执行,而且不需要客户端证书。此外,无论服务器的状态如何,CLI 都可以运行;它不需要正在运行的服务器。

CLI 支持以分级结构组织的多个命令。要列出顶级命令,请在没有任何附加命令或参数的情况下执行 CLI:

$ pki-server

某些命令包含子命令。若要列出它们,可使用命令名称执行 CLI,并且无附加选项。例如:

$ pki-server ca
$ pki-server ca-audit

要查看命令用法信息,请使用 the -help 选项:

$ pki-server --help
$ pki-server ca-audit-event-find --help

2.2.4.2. 使用 pki-server启用和禁用已安装的子系统

要启用或禁用已安装的子系统,请使用 pki-server 工具。

# pki-server subsystem-disable -i instance_id subsystem_id
# pki-server subsystem-enable -i instance_id subsystem_id

使用有效的子系统标识符替换 subsystem_idcakratksocsptps

注意

一个实例只能具有每种类型的子系统之一。

例如,要在名为 pki-tomcat 的实例上禁用 OCSP 子系统:

# pki-server subsystem-disable -i pki-tomcat ocsp

列出实例的已安装的子系统:

# pki-server subsystem-find -i instance_id

显示特定子系统的状态:

# pki-server subsystem-find -i instance_id subsystem_id

2.2.4.3. pkidaemon 命令行工具

Red Hat Certificate System 的另一个进程管理工具是 pkidaemon 工具:

pkidaemon {start|status} instance-type [instance_name]
  • pkidaemon status tomcat - 提供状态信息,如 on/off、port、系统上所有 PKI 实例的每个 PKI 子系统的 URL。
  • pkidaemon status tomcat instance_name - 提供状态信息,如 on/off、port、特定实例的每个 PKI 子系统的 URL。
  • pkidaemon 使用 systemctl 启动 tomcat instance_name.service - Used。

详情请查看 pkidaemon 手册页。

2.2.4.4. 查找子系统 Web 服务 URL

CA, KRA, OCSP, OCSP, TKS, 和 TPS 子系统有用于代理的 Web 服务页面,以及常规用户和管理员(如果适用)。可以通过打开子系统的安全最终用户端口到子系统主机的 URL 来访问这些 Web 服务。例如,对于 CA:

https://server.example.com:8443/ca/services
注意

要获取实例的所有接口、URL 和端口的完整列表,请检查该服务的状态。例如:

pkidaemon status instance_name

每个子系统的主要 Web 服务页面包含可用服务页面列表;下表中概述了这些页面。要特别访问任何服务,请访问适当的端口,并将相应的目录附加到 URL。例如,要访问 CA 的最终实体(普通用户)Web 服务:

https://server.example.com:8443/ca/ee/ca

如果没有配置 DNS,则可以使用 IPv4 或 IPv6 地址来连接到服务页面。例如:

https://192.0.2.1:8443/ca/services
https://[2001:DB8::1111]:8443/ca/services
注意

任何人都可以访问子系统的最终用户页面。但是,访问代理或管理 Web 服务页面要求在 Web 浏览器中发布代理或管理员证书并安装代理或管理员证书。否则,对 Web 服务的身份验证会失败。

表 2.1. 默认 Web 服务页面
port用于 SSL/TLS用于带有客户端身份验证值的 Client AuthenticationServices 可以被重新配置为需要客户端身份验证。没有 Yes 或 No 值的服务无法配置为使用客户端身份验证。Web 服务Web 服务位置

证书管理器

8080

 

结束实体

ca/ee/ca

8443

结束实体

ca/ee/ca

8443

代理

ca/agent/ca

8443

服务

ca/services

8443

控制台(Console)

pkiconsole https://host:port/ca

密钥恢复授权机构

8080

 

结束实体

kra/ee/kra

8443

结束实体

kra/ee/kra

8443

代理

kra/agent/kra

8443

服务

kra/services

8443

控制台(Console)

pkiconsole https://host:port/kra

在线证书状态管理器

8080

 

结束实体

ocsp/ee/ocsp

8443

结束实体

ocsp/ee/ocsp

8443

代理

ocsp/agent/ocsp

8443

服务

ocsp/services

8443

控制台(Console)

pkiconsole https://host:port/ocsp

令牌密钥服务

8080

 

结束实体

tks/ee/tks

8443

结束实体

tks/ee/tks

8443

代理

tks/agent/tks

8443

服务

tks/services

8443

控制台(Console)

pkiconsole https://host:port/tks

令牌处理系统

8080

 

未安全的服务

tps/tps

8443

 

安全服务

tps/tps

8080

 

企业安全客户端电话主页

tps/phoneHome

8443

 

企业安全客户端电话主页

tps/phoneHome

8443

管理、代理和 Operator 服务

tps/ui

2.2.4.5. 启动证书系统控制台

重要

此控制台已弃用。

CA、KRA、OCSP 和 TKS 子系统有一个 Java 接口,它可以被访问来执行管理功能。对于 KRA、OCSP 和 TKS,这包括配置日志记录和管理用户和组等非常基本的任务。对于 CA,这包括创建证书配置集和配置发布等其他配置设置。

控制台通过 pkiconsole 工具通过 SSL/TLS 端口连接到子系统实例来打开。这个工具使用以下格式:

pkiconsole https://server.example.com:admin_port/subsystem_type

subsystem_type 可以是 cakraocsptks。例如,这将打开 KRA 控制台:

pkiconsole https://server.example.com:8443/kra

如果没有配置 DNS,则可以使用 IPv4 或 IPv6 地址来连接到控制台。例如:

https://192.0.2.1:8443/ca
https://[2001:DB8::1111]:8443/ca
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat, Inc.