18.6. 管理证书数据库
每个证书系统实例都有一个证书数据库,在其内部令牌中维护。此数据库包含属于证书系统实例中安装的子系统的证书,以及子系统用来验证它们接收的证书的各种 CA 证书。
即使外部令牌用于生成和存储密钥对,证书系统也始终在其内部令牌中维护其可信和不受信任的 CA 证书的列表。
本节介绍如何查看证书数据库的内容,删除不需要的证书,以及使用证书系统窗口更改数据库中安装的 CA 证书的信任设置。有关向数据库添加证书的详情,请参考 第 18.6.1 节 “在证书系统数据库中安装证书”。
证书系统命令行工具 certutil
可以用来通过编辑信任设置和删除证书来管理证书数据库。有关此工具的详情,请参考 http://www.mozilla.org/projects/security/pki/nss/tools/。
管理员应定期检查证书数据库的内容,以确保它不包含任何不需要的 CA 证书。例如,如果数据库包含应在 PKI 设置中不被信任的 CA 证书,请删除它们。
18.6.1. 在证书系统数据库中安装证书
如果为子系统发布新的服务器证书,则必须安装到该子系统数据库中。此外,必须在子系统数据库中安装用户和代理证书。如果证书由外部 CA 发布,则通常需要安装对应的 CA 证书或证书链。
证书可以通过控制台的证书设置向导或者在子系统证书数据库中 安装
。
18.6.1.1. 通过控制台安装证书
pkiconsole
已被弃用。
证书设置向导可安装或将以下证书导入到证书系统实例使用的内部或外部令牌中:
- 证书系统子系统使用的任何证书
- 来自外部 CA 或其他证书系统 CA 的任何可信 CA 证书
- 证书链
证书链包含一组证书:主题证书、可信 root CA 证书以及将主题证书链接到可信 root 所需的任何中间 CA 证书。但是,向导导入的证书链必须只包含 CA 证书;任何证书都不能是用户证书。
在证书链中,链中的每个证书编码为单独的 DER 编码对象。当向导导入证书链时,它会在另一个对象后导入这些对象,所有方法都导入到最后一个证书,也可能不是 root CA 证书。如果链中的任何证书已安装在本地证书数据库中,向导会将现有证书替换为链中的证书。如果链包含中间 CA 证书,向导将它们添加到证书数据库中,作为 不受信任的 CA 证书。
子系统控制台使用相同的向导来安装证书和证书链。要在本地安全数据库中安装证书,请执行以下操作:
打开控制台。
pkiconsole https://server.example.com:secure_port/subsystem_type
- 在 Configuration 选项卡中,从左侧导航树中选择 System Keys 和 Certificates。
有两个选项卡可以安装证书,具体取决于子系统类型和证书的类型。
- CA Certificates 选项卡用于安装 CA 证书和证书链。对于证书管理器,此选项卡用于第三方 CA 证书或其他证书系统 CA 证书;所有本地 CA 证书都安装在本地 证书 选项卡中。对于所有其他子系统,所有 CA 证书和密钥都通过此选项卡安装。
- Local Certificates 选项卡安装所有服务器证书、子系统证书和本地证书,如 OCSP 签名或 KRA 传输。
选择适当的选项卡。
要在 本地证书选项卡中安装证书,请单击 。要在 CA Certificates 选项卡中安装证书,请点 。两者都将打开证书设置向导。
- 打开向导后,选择 Install a certificate 单选按钮,然后单击 。
- 选择要安装的证书类型。下拉菜单的选项与创建证书的选项相同,具体取决于子系统类型,以及安装跨对证书的附加选项。
粘贴证书正文,包括
-----BEGIN CERTIFICATE-----
和-----END CERTIFICATE-----
、文本区域或指定绝对文件位置;这必须是本地文件。证书类似如下:
-----BEGIN CERTIFICATE----- MIICKzCCAZSgAwIBAgIBAzANgkqkiG9w0BAQQFADA3MQswCQYDVQQGEw JVUzERMA8GA1UEChMITmV0c2NhcGUxFTATBgNVBAsTDFN1cHJpeWEncy BDQTAeFw05NzEwMTgwMTM2MjVaFw05OTEwMTgwMTM2MjVaMEgxCzAJBg NVBAYTAlVTMREwDwYDVQQKEwhOZXRzY2FwZTENMAsGA1UECxMEUHawcz EXMBUGA1UEAxMOU3Vwcml5YSBTaGV0dHkwgZ8wDQYJKoZIhdfNAQEBBQ ADgY0AMIGJAoGBAMr6eZiPGfjX3uRJgEjmKiqG7SdATYzBcABu1AVyd7 chRFOGD3wNktbf6hRo6EAmM5R1Askzf8AW7LiQZBcrXpc0k4du+2j6xJ u2MPm8WKuMOTuvzpo+SGXelmHVChEqooCwfdiZywyZNmgaMa2MS6pUkf QVAgMBAAGjNjA0MBEGCWCGSAGG+EIBAQQEAwIAgD -----END CERTIFICATE-----
向导显示证书详情。检查指纹,以确保这是正确的证书,或者使用
按钮返回并提交不同的证书。为证书指定 nickname。向导会安装证书。
任何签署证书的 CA 都必须被子系统信任。确保这个 CA 的证书存在于子系统的证书数据库(内部或外部)中,并且被信任。
如果没有列出 CA 证书,请将证书作为可信 CA 添加到证书数据库中。如果列出 CA 的证书但不被信任,请将信任设置改为可信,如 第 18.7 节 “更改 CA 证书的信任设置” 所示。
安装未存储在证书系统证书数据库的 CA 发布的证书时,将该 CA 的证书链添加到数据库中。要将 CA 链添加到数据库,请将 CA 链复制到文本文件,再次启动向导并安装 CA 链。
18.6.1.2. 使用 certutil
安装证书
要使用 certutil
在证书系统实例的安全数据库中安装子系统证书,请执行以下操作:
打开子系统的安全数据库目录。
cd /var/lib/pki/ instance_name/alias
使用 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。
18.6.1.3. 关于 CA 证书链
支持证书的任何客户端或服务器软件在其证书数据库中维护一组可信 CA 证书。这些 CA 证书决定了软件可以验证的其他证书。在最简单的情形中,软件只能验证其具有证书的 CA 发布的证书。可信 CA 证书也可以是 CA 证书链的一部分,每个证书都使用证书层次结构中的 CA 发布。
链中的第一个证书以特定于上下文的方式进行处理,这因导入的方式而异。对于 Mozilla Firefox,这种处理取决于所下载对象的 MIME 内容类型。对于红帽服务器,它取决于服务器管理界面中选择的选项。
后续证书都被视为相同。如果证书在 Netscape 证书类型证书扩展中包含 SSL-CA 位,且本地证书数据库中尚不存在,则它们会被添加为不受信任的 CA。只要链中存在信任的 CA,它们就可以进行证书链验证。
18.6.1.4. 查看数据库内容
存储在子系统证书数据库 cert9.db
中的证书可以通过子系统管理控制台查看。或者,可以使用 certutil
工具列出证书。必须使用 certutil
来查看 TPS 证书,因为 TPS 子系统不使用管理控制台。
cert9.db
数据库中列出的证书是用于子系统操作的子系统证书。客户端证书与 LDAP 内部数据库中的用户条目一起存储。
18.6.1.4.1. 通过控制台查看数据库内容
pkiconsole
已被弃用。
要通过管理控制台查看数据库的内容,请执行以下操作:
打开子系统控制台。
pkiconsole https://server.example.com:secure_port/subsystem_type
- 在 Configuration 选项卡中,从左侧导航树中选择 System Keys 和 Certificates。
有两个选项卡: CA 证书 和本地 证书,它们列出了不同类型的证书。
- CA 证书列出了对应的私钥材料不可用的 CA 证书,如第三方 CA 发布的证书,如 Entrust 或 Verisign 或外部证书系统证书管理器。
- 本地 证书列出证书系统子系统实例保存的证书,如 KRA 传输证书或 OCSP 签名证书。
.Certificate database tab image::cert-db1.png[]
证书数据库管理 表列出了子系统上安装的所有证书。每个证书都会提供以下信息:
- 证书名称
- 序列号
-
签发者名称,这是此证书签发者的通用名称(
cn
)。 -
令牌名称,包含证书的加密令牌名称;对于数据库中存储的证书,这是
内部的
。
要查看有关证书的更多详细信息,请选择证书,然后单击
。这会打开一个窗口,显示证书的序列号、有效期、主题名称、签发者名称和证书指纹。18.6.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。
18.6.2. 从数据库中删除证书
删除不需要的证书可减少证书数据库的大小。
从证书数据库中删除 CA 证书时,请小心不要删除 中间 CA 证书,这有助于将子系统链到可信 CA 证书。如果不确定,请将数据库中的证书保留为 不受信任的 CA 证书;请参阅 第 18.7 节 “更改 CA 证书的信任设置”。
18.6.2.1. 通过控制台删除证书
pkiconsole
已被弃用。
要通过控制台删除证书,请执行以下操作:
打开子系统控制台。
pkiconsole https://server.example.com:secure_port/subsystem_type
- 在 Configuration 选项卡中,从左侧导航树中选择 System Keys 和 Certificates。
- 选择要删除的证书,然后单击 。
- 出现提示时,确认删除。
18.6.2.2. 使用 certutil
删除证书
使用 certutil
从数据库中删除证书:
打开实例的证书数据库目录。
/var/lib/pki/ instance_name/alias
使用
-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
使用
-D
选项运行certutil
来删除证书。certutil -D -d . -n certificate_nickname
例如:
certutil -D -d . -n "ServerCert cert-instance_name"
再次列出证书以确认证书已被删除。
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。