第 15 章 管理证书/密钥加密策略
本章介绍了如何在加密令牌上管理证书/密钥令牌数据库的说明,特别是如何为各种场景导入和验证证书。
关于加密令牌
有关 NSS 软令牌的详情,请参考 第 2.3.7.1 节 “NSS 软令牌(内部令牌)”。
有关 HSM 的详情,请参考 第 2.3.7.2 节 “硬件安全模块(HSM、外部令牌)”。
15.1. 关于 certutil 和 PKICertImport
certutil 命令由网络安全服务(NSS)提供。certutil 用于验证和导入证书。以下是使用 certutil 的基本信息,但 PKICertImport 是我们的 wrapper 脚本,用于安全验证和导入证书。使用 certutil 来这样做,需要多个命令调用,并正确用法超出了本文档的范围。
15.1.1. certutil 基本用法
certutil [command]
[options]
每个 certutil 调用都使用命令标志,通常由大写字母表示,以及控制命令的作用的一系列选项。如果某个选项使用值,则该值将在 "<" 和 ">" 符号之间命名。
15.1.2. PKICertImport 基础知识使用
PKICertImport
[options]
每个 PKICertImport 调用都使用一系列选项来验证和导入指定证书。与 certutil 的广泛用例不同,PKICertImport 仅专注于安全导入和验证证书。有关可用选项的更多信息,请参阅 第 15.1.4 节 “Common certutil 和 PKICertImport 选项”。
注意
PKICertImport 在执行过程中多次提示输入 NSS DB 和/或 HSM 密码。这应该会因为 PKICertImport 必须多次与 NSS DB 交互。要避免重复输入 NSS DB 密码,请通过 -f <filename> 指定密码文件。完成后,请确保删除密码文件。
15.1.3. certutil 常用命令
以下命令特定于 certutil,并概述了几个常用命令。PKICertImport 不兼容,也不需要这些命令标志。
certutil -A
a 表示 "添加"证书。它要求证书导入(-i)、证书的别名(-n)和证书的一系列信任标志(-t)。
certutil -V
-V 命令表示"验证"证书。它需要证书别名来验证(-n)以及要执行的验证类型(-u)。
certutil -D
-D 命令表示"删除"证书。它需要一个证书别名(-n)才能删除。
请注意,它只删除证书的 PUBLIC KEY 部分,如果存在,则 WILL 不会删除任何私钥。
certutil -M
-M 命令表示"修改"证书。它要求修改证书别名(-n),以及一系列信任标志(-t)来为其提供证书。
certutil -L
-L 命令表示证书或所有证书。如果给出 nickname 选项(-n),它将列出该证书的详细信息,否则如果省略,它将列出所有证书的常规信息。
certutil -L 的结果会按 nickname 及其信任信息显示每个证书。例如:
证书 Nickname
|
Trust Attributes |
---|---|
caSigningCert pki-ca1
|
CT, C, C
|
注意
certutil -L 显示的信任属性与使用 -t 选项指定的内容对应。
certutil -L 不修改数据库,因此可以根据需要安全地执行。
15.1.4. Common certutil 和 PKICertImport 选项
遵循以下步骤时,请确保值与您的特定部署场景相关且正确。其中一些选项也可用于 PKICertImport。
-n <nickname>
-n <nickname > 选项指定证书的 nickname。这可以是任何文本,仅用作证书的引用。它必须是唯一的。
根据您的配置更新这个值。
-d <directory>
-d <directory > 选项指定正在使用的 NSS DB 目录的路径。通常,我们假设您已在这个目录中,并使用 "." 引用当前目录。
根据您的配置更新这个值。
-t <trust>
-t <trust > 选项指定证书的信任级别。
信任有三种主要类别:
- TLS 的信任
- 对电子邮件的信任
- 对象签名的信任
每个信任位置可以有一个或多个信任字母,用于指定所需的信任级别。我们使用以下信任字母是 c、C 和 T。
- c 指出此证书应该是证书颁发机构(CA)。
- c 表示这是用于签名服务器证书的可信证书颁发机构( C 表示小写 c,因此您不需要同时指定这两个证书)。
- T 表示此证书是签名客户端证书的可信颁发机构(T 表示小写 c,因此您不需要同时指定 T 和 c)。
要为每个位置指定信任标志,请使用逗号分隔字母。例如,选项 -t CT,C,c 表示为客户端和服务器 TLS 证书签名证书、签名服务器电子邮件证书(S/MIME)并且是用于对象签名的有效 CA (尽管不受信任的)。
- 这样可确保如果此证书为另一个证书签名,则该证书用于对象签名,它将被视为无效。
使用 -t、、 可以指定信任(或缺少信任)。
要查看数据库中所有证书的信任级别,请运行:
- certutil -L -d
- 将列出每个证书的 nickname,并在行末尾指定信任标志。
请参阅 -h 选项中的 HSMs 备注。
请注意,在 certutil man page 中指定更多信任级别。要参考本文档,请在正确安装了 certutil 的系统中运行 man certutil 命令。
-h <HSM>
-h <HSM > 选项指定要执行操作的 HSM 名称。
-h 选项与 -t 选项不兼容,因为 HSM 无法存储信任。只有 NSS DB 可以存储信任,因此使用 certutil -A 命令或 certutil -M 命令以及 -h <HSM> 将失败。反之,在没有 -h 选项的情况下,在单独的 certutil -M 命令中指定所需的信任级别。
根据您的配置更新这个值。
-e
-e 选项指定检查签名的有效性,与 certutil -V 命令一起使用时。PKICertImport 始终执行证书签名请求验证,且不知道
-e
选项。
-a
a 选项指定问题中的键采用 PEM (ASCII)格式。
-i <certificate>
-i <certificate > 选项指定证书的路径。这只在 certutil -A 命令中使用,以指定要导入的证书的路径。
根据您的配置更新这个值。
-u <usage>
-u < usage> 选项指定使用证书与 certutil -V 命令一起使用时进行验证。
以下部分介绍了几个使用字母。
- -U C 代表验证客户端 TLS 证书。请注意,这主要接受任何证书,但会检查过期日期和签名。
- -U V 代表验证服务器 TLS 证书。请注意,这将拒绝 CA 证书,并将检查过期日期和签名。
- -U L 代表验证 CA TLS 证书。请注意,这将验证信任标志(查看是否存在 c ),并将检查密钥的使用以确保密钥是 CA 密钥。这也检查过期和签名。
- -U O 代表验证 OCSP 状态响应器证书。请注意,这会检查到期和签名。
- -u J 代表验证对象签名证书。请注意,这会检查到期和签名。
如果指定了错误使用选项,或者证书上的信任标记错误(如缺少 CA TLS 证书的 c 标志),certutil -V 将给出不正确的结果。
注意
在 certutil manpage 中指定更多用法选项。要参考本文档,请在正确安装了 certutil 的系统中运行 man certutil 命令。