13.5. 管理证书数据库


每个证书系统实例都有一个证书数据库,在其内部令牌中维护。此数据库包含属于在证书系统实例中安装的子系统的证书,以及用来验证它们接收的证书的各种 CA 证书。

即使使用外部令牌生成和存储密钥对,证书系统始终在其内部令牌中维护其可信和不受信任的 CA 证书的列表。

本节介绍如何查看证书数据库的内容,删除不需要的证书,以及使用证书系统窗口更改数据库中安装的 CA 证书的信任设置。有关向数据库添加证书的详情,请参考 第 13.5.1 节 “在证书系统数据库中安装证书”

注意

证书系统命令行工具 certutil 可以用来通过编辑信任设置和删除证书来管理证书数据库。有关此工具的详情,请参考 http://www.mozilla.org/projects/security/pki/nss/tools/

管理员应定期检查证书数据库的内容,以确保它不包含任何不需要的 CA 证书。例如,如果数据库包含不应信任在 PKI 设置中的 CA 证书,请删除它们。

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

如果为子系统发布新的服务器证书,则必须在该子系统数据库中安装它们。此外,用户和代理证书必须安装在子系统数据库中。如果证书由外部 CA 发布,则通常需要安装相应的 CA 证书或证书链。

证书可以通过控制台的证书设置向导或者在子系统证书数据库中 安装

13.5.1.1. 通过控制台安装证书

注意

pkiconsole 已被弃用,并将在以后的主发行版本中被新的基于浏览器的 UI 替代。虽然 pkiconsole 在发布替代 UI 之前继续可用,但我们鼓励在此鼓励使用命令行与 pkiconsole 等效,因为 pki CLI 将继续支持并在将来有新的基于浏览器的 UI 时受到改进。

证书设置向导可以安装或将以下证书导入到证书系统实例使用的内部或外部令牌中:

  • 证书系统子系统使用的任何证书
  • 来自外部 CA 或其他证书系统 CA 的任何可信 CA 证书
  • 证书链

证书链包括证书集合:主题证书、可信根 CA 证书以及将主题证书链接到可信根所需的任何中间 CA 证书。但是,证书链导入向导只能包含 CA 证书;任何证书都不能是一个用户证书。

在证书链中,链中的每个证书都编码为单独的 DER 编码的对象。当向导导入证书链时,它会逐个导入这些对象,所有这些对象都是将链到最后一个证书(可能或不是 root CA 证书)的所有方式。如果链中任何证书已安装在本地证书数据库中,向导会将现有证书替换为链中的现有证书。如果链包含中间 CA 证书,向导将它们添加到证书数据库中,作为 不受信任的 CA 证书。

子系统控制台使用相同的向导来安装证书和证书链。要在本地安全数据库中安装证书,请执行以下操作:

  1. 打开控制台。

    # pkiconsole -d nssdb -n 'optional client cert nickname' https://server.example.com:secure_port/subsystem_type
  2. Configuration 选项卡中,从左侧导航树中选择 System Keys 和 Certificates
  3. 根据子系统类型和证书的类型,可以安装证书的两个选项卡。

    • CA Certificates 选项卡用于安装 CA 证书和证书链。对于证书管理器,此选项卡用于第三方 CA 证书或其他证书系统 CA 证书;所有本地 CA 证书都安装在本地 证书 选项卡中。对于所有其他子系统,通过此选项卡安装所有 CA 证书和链。
    • Local Certificates 选项卡安装所有服务器证书、子系统证书和本地证书,如 OCSP 签名或 KRA 传输。

    选择适当的选项卡。

  4. 要在 本地证书选项卡中安装证书,请单击 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 的证书但不被信任,请将信任设置改为可信,如 第 13.6 节 “更改 CA 证书的信任设置” 所示。

    安装未存储在证书系统证书数据库的 CA 发布的证书时,将该 CA 的证书链添加到数据库中。要将 CA 链添加到数据库,请将 CA 链复制到文本文件,再次启动向导,并安装 CA 链。

13.5.1.2. 使用 certutil安装证书

要使用 certutil 在证书系统实例的安全数据库中安装子系统证书,请执行以下操作:

  1. 打开子系统的安全数据库目录。

    # cd /var/lib/pki/instance_name/alias
  2. 使用 a -A 运行 certutil 命令,以添加证书 and -i 指向包含 CA 发布的证书的文件。

    # certutil -A -n cert-name -t trustargs -d . -a -i certificate_file
    注意

    如果证书系统实例的证书和密钥存储在 HSM 中,则使用 the -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

13.5.1.3. 关于 CA 证书链

支持证书的任何客户端或服务器软件都会在其证书数据库中维护一组可信 CA 证书。这些 CA 证书决定了软件可以验证的其他证书。在最简单的情形中,软件只能验证其具有证书的 CA 发布的证书。可信 CA 证书也可以成为 CA 证书链的一部分,每个证书都由 CA 在证书层次结构中发布。

链中的第一个证书以特定上下文的方式处理,这因导入方式的不同。对于 Mozilla Firefox,此处理取决于所下载对象中使用的 MIME 内容类型。对于红帽服务器,它取决于服务器管理界面中选择的选项。

后续证书都处理相同的证书。如果证书包含 Netscape 证书类型证书扩展中的 SSL-CA 位,且本地证书数据库中不存在它们,则会将它们添加为不受信任的 CA。只要链中有一些可信 CA,它们就可以用于证书链验证。

13.5.1.4. 查看数据库内容

存储在子系统证书数据库 cert9.db 中的证书可以通过子系统管理控制台查看。或者,可以使用 certutil 工具列出证书。必须使用 certutil 来查看 TPS 证书,因为 TPS 子系统不使用管理控制台。

注意

cert9.db 数据库中列出的证书是用于子系统操作的子系统证书。用户证书与 LDAP 内部数据库中的用户条目存储。

13.5.1.4.1. 通过控制台查看数据库内容
注意

pkiconsole 已被弃用,并将在以后的主发行版本中被新的基于浏览器的 UI 替代。虽然 pkiconsole 在发布替代 UI 之前继续可用,但我们鼓励在此鼓励使用命令行与 pkiconsole 等效,因为 pki CLI 将继续支持并在将来有新的基于浏览器的 UI 时受到改进。

要通过管理控制台查看数据库的内容,请执行以下操作:

  1. 打开子系统控制台。

    # pkiconsole -d nssdb -n 'optional client cert nickname' https://server.example.com:secure_port/subsystem_type
  2. Configuration 选项卡中,从左侧导航树中选择 System Keys 和 Certificates
  3. 有两个选项卡: CA 证书 和本地 证书,它们列出了不同类型的证书。

    • CA 证书列出了对应的私钥材料不可用的 CA 证书,如第三方 CA 发布的证书,如 Entrust 或 Verisign 或外部证书系统证书管理器。
    • 本地 证书列出证书系统子系统实例保存的证书,如 KRA 传输证书或 OCSP 签名证书。

    .Certificate database tab image::cert-db1.png[]

  4. 证书数据库管理 表列出了子系统上安装的所有证书。为每个证书提供以下信息:

    • 证书名称
    • 序列号
    • 签发者名称,这是此证书签发者的通用名称(cn)。
    • 令牌名称,包含证书的加密令牌名称;对于数据库中存储的证书,这是 内部的

要查看有关证书的更多详细信息,请选择证书,然后单击 查看。这会打开一个窗口,其中显示证书的序列号、有效期周期、主题名称、签发者名称和证书指纹。

13.5.1.5. 使用 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

13.5.2. 从数据库中删除证书

删除不需要的证书可减少证书数据库的大小。

注意

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

13.5.2.1. 通过控制台删除证书

注意

pkiconsole 已被弃用,并将在以后的主发行版本中被新的基于浏览器的 UI 替代。虽然 pkiconsole 在发布替代 UI 之前继续可用,但我们鼓励在此鼓励使用命令行与 pkiconsole 等效,因为 pki CLI 将继续支持并在将来有新的基于浏览器的 UI 时受到改进。

要通过控制台删除证书,请执行以下操作:

  1. 打开子系统控制台。

    # pkiconsole -d nssdb -n 'optional client cert nickname' https://server.example.com:secure_port/subsystem_type
  2. Configuration 选项卡中,从左侧导航树中选择 System Keys 和 Certificates
  3. 选择要删除的证书,然后单击 Delete
  4. 出现提示时,确认删除。

13.5.2.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.