第 14 章 管理证书/密钥加密令牌
本章介绍了如何在加密令牌上管理证书/密钥令牌数据库的说明,特别是如何为各种场景导入和验证证书。
- 有关 NSS 软令牌的详情,请参考 第 2.3.7.1 节 “NSS 软令牌(内部令牌)”。
- 有关 HSM 的详情,请参考 第 2.3.7.2 节 “硬件安全模块(HSM,外部令牌)”。
14.1. 关于 certutil
和 PKICertImport
certutil
命令由网络安全服务(NSS)提供。certutil
用于验证和导入证书。下面介绍了使用 certutil
的基本概述,但 PKICertImport
是我们的打包程序脚本,用于安全地验证和导入证书。使用 certutil
执行此操作需要多个命令调用,正确的用法超出了本文档的范围。
14.1.1. certutil
基本用法
certutil [command] [opt][options]
每个 certutil
调用都使用命令标志,通常由大写字母表示,以及控制命令的作用的一系列选项。如果某个选项使用值,则该值将在 "<" 和 ">" 符号之间命名。
14.1.2. PKICertImport 基本用法
PKICertImport [opt][options]
每个 PKICertImport
调用都使用一系列选项来验证和导入指定的证书。与 certutil
的广泛用例不同,PKICertImport
仅专注于安全导入和验证证书。有关可用选项的更多信息,请参阅 第 14.1.4 节 “常见 certutil
和 PKICertImport
选项”。
PKICertImport
在整个执行过程中多次提示输入 NSS DB 和/或 HSM 密码。这应该是 PKICertImport
必须多次与 NSS DB 交互。为避免必须重复输入 NSS DB 密码,请通过 < filename> 指定密码文件
。完成后,请确保删除密码文件。
14.1.3. certutil
常用命令
以下命令特定于 certutil
,并提供了几个常见命令的简要概述。PKICertImport
与 or 不兼容,也需要这些命令标志。
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 | 信任属性 SSL, S/MIME, JAR/XPI |
---|---|
caSigningCert pki-ca1 | CT, C, C |
certutil -L
显示的信任属性与使用 -t
选项指定的内容对应。
certutil -L
不修改数据库,因此可以根据需要多次执行。
14.1.4. 常见 certutil
和 PKICertImport
选项
遵循以下步骤时,请确保值与您的特定部署场景相关且正确。其中许多选项也可用于 PKICertImport
。
-n <nickname>
a -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
)。
要为每个位置指定信任标志,请使用逗号分隔字母。例如,option -t CT,C,c
表示证书被信任为客户端和服务器 TLS 证书,签名服务器电子邮件证书(S/MIME),是对象签名(尽管不受信任的)的有效 CA。
- 这样可确保如果此证书为另一个证书签名,则该证书用于对象签名,它将被视为无效。
使用、可以指定无信任(或缺少信任)。
要查看数据库中所有证书的信任级别,请运行:
-
certutil -L -d
- 将列出每个证书的别名,并在行尾指定信任标志。
请参阅有关 the -h
选项中的 HSM 的备注。
请注意,在 certutil man page 中指定更多信任级别。要参考本文档,请在正确安装了 certutil 的系统中运行 man certutil
命令。
-h <HSM>
The -h <HSM
> 选项指定要对其执行操作的 HSM 名称。
-H
选项与 the -t
选项不兼容,因为 HSM 无法存储信任。只有 NSS DB 可以存储信任,因此使用 certutil -A
命令或 certutil -M
命令与 < HSM>
; 结合使用会失败。反之,在没有 a -h
选项的情况下,在单独的 certutil -M
命令中指定所需的信任级别。
根据您的配置更新这个值。
-e
-e
选项指定在与 certutil -V
命令结合使用时,也会检查签名的有效性。PKICertImport
始终执行证书签名请求验证,且不知道 -e 选项。
-a
a
选项指定问题中的密钥是 PEM (ASCII)格式。
-i <certificate>
The -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
代表验证对象签名证书。请注意,这会检查到期和签名。
如果指定了错误的 usage 选项,或者证书上的信任标记错误(如 CA TLS 证书的缺少 c
标志),certutil -V
将给出不正确的结果。
在 certutil manpage 中指定更多用法选项。要参考本文档,请在正确安装 certutil 的系统中运行 man certutil
命令。