17.6. 管理证书数据库


每个证书系统实例都有一个证书数据库,在其内部令牌中维护。此数据库包含属于证书系统实例中安装的子系统的证书,以及子系统用来验证它们接收的证书的各种 CA 证书。
即使外部令牌用于生成和存储密钥对,证书系统也始终在其内部令牌中维护其可信和不受信任的 CA 证书的列表。
本节介绍如何查看证书数据库的内容,删除不需要的证书,以及使用证书系统窗口更改数据库中安装的 CA 证书的信任设置。有关向数据库添加证书的详情,请参考 第 17.6.1 节 “在证书系统数据库中安装证书”
注意
证书系统命令行工具 certutil 可以用来通过编辑信任设置和添加和删除证书来管理证书数据库。有关此工具的详情,请参考 http://www.mozilla.org/projects/security/pki/nss/tools/
管理员应定期检查证书数据库的内容,以确保它不包含任何不需要的 CA 证书。例如,如果数据库包含应在 PKI 设置中不被信任的 CA 证书,请删除它们。

17.6.1. 在证书系统数据库中安装证书

如果为子系统发布新的服务器证书,则必须安装到该子系统数据库中。此外,必须在子系统数据库中安装用户和代理证书。如果证书由外部 CA 发布,则通常需要安装对应的 CA 证书或证书链。
证书可以通过控制台的证书设置向导或使用 certutil 工具在子系统证书数据库中安装。

17.6.1.1. 通过控制台安装证书

注意
pkiconsole 已被弃用。
证书设置向导可安装或将以下证书导入到证书系统实例使用的内部或外部令牌中:
  • 证书系统子系统使用的任何证书
  • 来自外部 CA 或其他证书系统 CA 的任何可信 CA 证书
  • 证书链
证书链包含一组证书:主题证书、可信 root CA 证书以及将主题证书链接到可信 root 所需的任何中间 CA 证书。但是,向导导入的证书链必须只包含 CA 证书;任何证书都不能是用户证书。
在证书链中,链中的每个证书编码为单独的 DER 编码对象。当向导导入证书链时,它会在另一个对象后导入这些对象,所有方法都导入到最后一个证书,也可能不是 root CA 证书。如果链中的任何证书已安装在本地证书数据库中,向导会将现有证书替换为链中的证书。如果链包含中间 CA 证书,向导会将它们作为 不受信任的 CA 证书添加到证书数据库中。
子系统控制台使用相同的向导来安装证书和证书链。要在本地安全数据库中安装证书,请执行以下操作:
  1. 打开控制台。
    pkiconsole https://server.example.com:secure_port/subsystem_type
  2. Configuration 选项卡中,从左侧导航树中选择 System Keys and Certificates
  3. 有两个选项卡可以安装证书,具体取决于子系统类型和证书的类型。
    • CA 证书 选项卡用于安装 CA 证书和密钥链。对于证书管理器,此选项卡用于第三方 CA 证书或其他证书系统 CA 证书;所有本地 CA 证书都安装在本地 证书 选项卡中。对于所有其他子系统,所有 CA 证书和密钥都通过此选项卡安装。
    • Local Certificates 选项卡安装了所有服务器证书、子系统证书和本地证书,如 OCSP 签名或 KRA 传输。
    选择适当的选项卡。
  4. 要在 Local Certificates 选项卡中安装证书,请单击 Add/Renew。要在 CA Certificates 选项卡中安装证书,请单击 Add。两者都将打开证书设置向导。
    1. 当向导打开时,选择 Install a certificate 单选按钮,然后点 Next
    2. 选择要安装的证书类型。下拉菜单的选项与创建证书的选项相同,具体取决于子系统类型,以及安装跨对证书的附加选项。
    3. 粘贴到证书正文中,包括 -----BEGIN CERTIFICATE----------END CERTIFICATE-----、文本区域,或者指定绝对文件位置;这必须是本地文件。
      证书类似如下:
      -----BEGIN CERTIFICATE-----
      MIICKzCCAZSgAwIBAgIBAzANgkqkiG9w0BAQQFADA3MQswCQYDVQQGEw
      JVUzERMA8GA1UEChMITmV0c2NhcGUxFTATBgNVBAsTDFN1cHJpeWEncy
      BDQTAeFw05NzEwMTgwMTM2MjVaFw05OTEwMTgwMTM2MjVaMEgxCzAJBg
      NVBAYTAlVTMREwDwYDVQQKEwhOZXRzY2FwZTENMAsGA1UECxMEUHawcz
      EXMBUGA1UEAxMOU3Vwcml5YSBTaGV0dHkwgZ8wDQYJKoZIhdfNAQEBBQ
      ADgY0AMIGJAoGBAMr6eZiPGfjX3uRJgEjmKiqG7SdATYzBcABu1AVyd7
      chRFOGD3wNktbf6hRo6EAmM5R1Askzf8AW7LiQZBcrXpc0k4du+2j6xJ
      u2MPm8WKuMOTuvzpo+SGXelmHVChEqooCwfdiZywyZNmgaMa2MS6pUkf
      QVAgMBAAGjNjA0MBEGCWCGSAGG+EIBAQQEAwIAgD
      -----END CERTIFICATE-----
  5. 向导显示证书详情。查看指纹以确保这是正确的证书,或使用 Back 按钮返回并提交不同的证书。为证书指定 nickname。
    向导会安装证书。
  6. 任何签署证书的 CA 都必须被子系统信任。确保此 CA 的证书数据库(内部或外部)中存在,并且它被信任。
    如果没有列出 CA 证书,请将证书作为可信 CA 添加到证书数据库中。如果列出 CA 的证书但不被信任,请将信任设置改为 trusted,如 第 17.7 节 “更改 CA 证书的信任设置” 所示。
    当安装不是由证书系统证书数据库中存储的 CA 发布的证书时,请将该 CA 的证书链添加到数据库中。要将 CA 链添加到数据库,请将 CA 链复制到文本文件,再次启动向导并安装 CA 链。

17.6.1.2. 使用 certutil 安装证书

要使用 certutil 在证书系统实例的安全数据库中安装子系统证书,请执行以下操作:
  1. 打开子系统的安全数据库目录。
    cd /var/lib/pki/instance_name/alias
    
  2. 使用 -A 运行 certutil 命令,以添加证书,-i 指向包含 CA 发布的证书的文件。
    certutil -A -n cert-name -t trustargs
       -d . -a -i certificate_file
    注意
    如果证书系统实例的证书和密钥存储在 HSM 上,则使用 -h 选项指定令牌名称。
    例如:
    certutil -A -n "ServerCert cert-instance_name" -t u,u,u -d . -a -i /tmp/example.cert
    
有关使用 certutil 命令的详情,请参考 http://www.mozilla.org/projects/security/pki/nss/tools/certutil.html

17.6.1.3. 关于 CA 证书链

支持证书的任何客户端或服务器软件在其证书数据库中维护一组可信 CA 证书。这些 CA 证书决定了软件可以验证的其他证书。在最简单的情形中,软件只能验证其具有证书的 CA 发布的证书。可信 CA 证书也可以是 CA 证书链的一部分,每个证书都使用证书层次结构中的 CA 发布。
链中的第一个证书以特定于上下文的方式进行处理,这因导入的方式而异。对于 Mozilla Firefox,这种处理取决于所下载对象的 MIME 内容类型。对于红帽服务器,它取决于服务器管理界面中选择的选项。
后续证书都被视为相同。如果证书在 Netscape 证书类型证书扩展中包含 SSL-CA 位,且本地证书数据库中尚不存在,则它们会被添加为不受信任的 CA。只要链中存在信任的 CA,它们就可以进行证书链验证。

17.6.2. 查看数据库内容

可以通过子系统管理控制台查看存储在子系统证书数据库 cert9.db 的证书。或者,可以使用 certutil 工具列出证书。必须使用 certutil 来查看 TPS 证书,因为 TPS 子系统不使用管理控制台。
注意
cert9.db 数据库中列出的证书是用于子系统操作的子系统证书。客户端证书与 LDAP 内部数据库中的用户条目一起存储。

17.6.2.1. 通过控制台查看数据库内容

注意
pkiconsole 已被弃用。
要通过管理控制台查看数据库的内容,请执行以下操作:
  1. 打开子系统控制台。
    pkiconsole https://server.example.com:secure_port/subsystem_type
  2. Configuration 选项卡中,从左侧导航树中选择 System Keys and Certificates
  3. CA 证书和本地证书 有两种选项卡,它列出了不同类型的证书。
    • CA 证书列出了对应的私钥材料不可用的 CA 证书,如第三方 CA 发布的证书,如 Entrust 或 Verisign 或外部证书系统证书管理器。
    • 本地 证书列出了证书系统子系统实例保存的证书,如 KRA 传输证书或 OCSP 签名证书。

    图 17.2. 证书验证 Tab

    证书验证 Tab
  4. 证书数据库管理 表列出了子系统上安装的所有证书。每个证书都会提供以下信息:
    • 证书名称
    • 序列号
    • 签发者名称,这是此证书签发者的通用名称(cn)。
    • 令牌名称,包含证书的加密令牌的名称;对于数据库中存储的证书,这是 内部的
要查看有关证书的更多详细信息,请选择证书,然后单击 View。这会打开一个窗口,显示证书的序列号、有效期、主题名称、签发者名称和证书指纹。

17.6.2.2. 使用 certutil 查看数据库内容

要使用 certutil 查看子系统数据库中的证书,请打开实例的证书数据库目录,并使用 -L 选项运行 certutil。例如:
cd /var/lib/pki/instance_name/alias

certutil -L -d .

Certificate Authority - Example Domain    CT,c,
subsystemCert cert-instance name          u,u,u
Server-Cert cert-instance_name            u,u,u
要使用 certutil 查看存储在子系统数据库中的密钥,请使用 -K 选项运行 certutil。例如:
cd /var/lib/pki/instance_name/alias

certutil -K -d .

Enter Password or Pin for "NSS Certificate DB":
<0> subsystemCert cert-instance_name
<1>
<2> Server-Cert cert-instance_name
有关使用 certutil 命令的详情,请参考 http://www.mozilla.org/projects/security/pki/nss/tools/certutil.html

17.6.3. 从数据库中删除证书

删除不需要的证书可减少证书数据库的大小。
注意
从证书数据库中删除 CA 证书时,要小心不要删除 中间 CA 证书,这有助于将子系统链到可信 CA 证书。如果有疑问,请将数据库中的证书保留为 不受信任的 CA 证书;请参阅 第 17.7 节 “更改 CA 证书的信任设置”

17.6.3.1. 通过控制台删除证书

注意
pkiconsole 已被弃用。
要通过控制台删除证书,请执行以下操作:
  1. 打开子系统控制台。
    pkiconsole https://server.example.com:secure_port/subsystem_type
  2. Configuration 选项卡中,从左侧导航树中选择 System Keys and Certificates
  3. 选择要删除的证书,然后单击 Delete
  4. 出现提示时,确认删除。

17.6.3.2. 使用 certutil 删除证书

使用 certutil 从数据库中删除证书:
  1. 打开实例的证书数据库目录。
    /var/lib/pki/instance_name/alias
    
  2. 使用 -L 选项运行 certutil,列出数据库中的证书。例如:
    certutil -L -d .
    
    Certificate Authority - Example Domain    CT,c,
    subsystemCert cert-instance_name          u,u,u
    Server-Cert cert-instance_name            u,u,u
    
  3. 使用 -D 选项运行 certutil 来删除证书。
    certutil -D -d . -n certificate_nickname
    例如:
    certutil -D -d . -n "ServerCert cert-instance_name"
  4. 再次列出证书以确认证书已被删除。
    certutil -L -d .
    
    Certificate Authority - Example Domain    CT,c,
    subsystemCert cert-instance_name          u,u,u
    
有关使用 certutil 命令的详情,请参考 http://www.mozilla.org/projects/security/pki/nss/tools/certutil.html
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.