5.3. 使用 CMC 请求和接收证书
本节论述了通过 CMS (CMC)使用证书管理注册证书的步骤。
有关配置和使用 CMC 注册证书工作流的常规信息,请参阅:
- 计划、安装和部署指南(通用标准版) 中 CMC 的 9.6 配置。
- 2.4.1.1.2.2 在规划 、安装和部署指南(标准版) 中注册 CMC。
-
CMCRequest (1)
手册页 -
CMCResponse (1)
手册页
CMC 注册可以以不同的方式进行注册,以满足不同场景的要求。第 5.3.1 节 “CMC 注册过程” 规划、安装和部署指南(通用标准版) 中的 CMC 补充 2.4.1.1.2.2 注册,详情。另外,第 5.3.2 节 “实际 CMC 注册场景” 部分可让管理员决定在哪些场景中应使用哪些机制。
5.3.1. CMC 注册过程 复制链接链接已复制到粘贴板!
最常用的 CMC 注册过程是代理批准的证书注册:
- 用户生成 CSR 并将 CSR 发送到 CA 代理
-
收到 CSR 后,CA 代理(由 规划、安装和部署指南(Common Standard Edition)中的"设置 pki 代理的证书和角色"配置,并通过
HttpClient
将请求发送到 CA - 成功签发证书后,CA 代理将证书发送到请求用户
- 然后,用户会将新发布的证书导入到最初生成的 CSR 的 nssdb 中
本节的其余部分提供了使用 CMC 发布证书的更多详细信息:
请求用户首先以以下格式之一创建证书签名请求(CSR):
- PKCS #10 格式
- 证书请求消息格式(CRMF)格式
接下来,请求的用户应向包含 CA 代理角色的用户发送 CSR (如 /user_or_entity_database_directory/request.csr
)。
批准 CSR 作为 CA 代理
作为 CA 代理,切换到包含代理证书的 nssdb 目录:
cd /home/agent_username/.dogtag/nssdb/
# cd /home/agent_username/.dogtag/nssdb/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 CSR 放在目录中:
cp request.csr /home/agent_username/.dogtag/nssdb/
# cp request.csr /home/agent_username/.dogtag/nssdb/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 CSR 放置到目录中后,使用以下内容为 CMC 请求创建一个配置文件,如
cmc-request.cfg
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 详情请查看
CMCRequest (1)
手册页。创建 CMC 请求:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果命令成功,
CMCRequest
工具会将 CMC 请求存储在请求配置文件的output
参数中指定的文件中。为
HttpClient
创建配置文件(如cmc-submit.cfg
)以用于稍后的步骤中,将 CMC 请求提交到 CA。在创建的文件中添加以下内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要在 nickname 参数中指定的证书的
nickname
必须与之前用于 CMC 请求的证书匹配。根据您请求的证书类型,在上一步中创建的配置文件中添加以下参数:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=profile_name
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=profile_name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,对于 CA 签名证书:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCcaCert
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCcaCert
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要当代理在下一步中提交 CMC 请求时,此参数中指定的配置集必须使用
CMCAuth
身份验证插件。在用户发起的注册中,配置集必须使用CMCUserSignedAuth
插件。详情请查看 第 8.3 节 “CMC 身份验证插件”。将 CMC 请求提交到 CA:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要将 CMC 响应转换为 PKCS #7 证书链,请将 CMC 响应文件传递给
CMCResponse
工具的-i
参数。例如:CMCResponse -i /home/user_name/cmc-response.bin -o /home/user_name/cert_chain.crt
$ CMCResponse -i /home/user_name/cmc-response.bin -o /home/user_name/cert_chain.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要使用 "-v" 选项运行
CMCResponse
将链中每个证书的 PEM 返回为Cert:0
,Cert:1
等。在所有 PEM 下,输出也会以用户打印格式显示链中的每个证书。由于证书没有以固定顺序显示,因此为了确定其在链中的位置,您必须检查每个 "Certificate" 下的"Subject: "。对应的 PEM 显示在上面的同一位置。成功签发证书后,CA 代理会将证书发送回请求用户。然后,用户可以将证书导入到其 nssdb 中。例如:
pki -d /user_or_entity_database_directory/ -c <password> client-cert-import "user_name certificate" --cert cert_chain.crt
# pki -d /user_or_entity_database_directory/ -c <password> client-cert-import "user_name certificate" --cert cert_chain.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.2. 实际 CMC 注册场景 复制链接链接已复制到粘贴板!
本节介绍常用的实际使用场景及其工作流,使 CA 管理员能够决定在什么情况下使用哪些 CMC 方法。
有关使用 CMC 注册证书的一般过程,请参考 第 5.3.1 节 “CMC 注册过程”。
5.3.2.1. 获取系统和服务器证书 复制链接链接已复制到粘贴板!
如果服务(如 LDAP 或 Web 服务器)需要 TLS 服务器证书,则此服务器的管理员会根据服务的文档创建 CSR,并将其发送到 CA 的代理以进行批准。这个过程使用 第 5.3.1 节 “CMC 注册过程” 中所述的步骤。另外,请考虑以下要求:
- 注册配置集
-
代理必须使用 第 8.3 节 “CMC 身份验证插件” 中列出的现有 CMC 配置集之一,或者创建一个使用
CMCAuth
身份验证机制的自定义配置集。 - CMC 签名证书
对于系统证书,CA 代理必须生成并签署 CMC 请求。为此,请将
CMCRequest
配置文件中的nickname
参数设置为 CA 代理的 nickname。注意CA 代理必须有权访问自己的私钥。
httpclient
nickname
参数-
在
CMCRequest
实用程序的配置文件中使用与HttpClient
配置文件中的 TLS mutual 身份验证相同的证书。 httpclient
servlet
参数传递到
HttpClient
实用程序的配置文件中的servlet
指的是处理请求的 CMC servlet 和注册配置文件。根据您请求的证书类型,将以下条目之一添加到上一步中创建的配置文件中:
对于 CA 签名证书:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCcaCert
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCcaCert
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 KRA 传输证书:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCkraTransportCert
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCkraTransportCert
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 OCSP 签名证书:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCocspCert
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCocspCert
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于审计签名证书:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCauditSigningCert
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCauditSigningCert
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于子系统证书:
对于 RSA 证书:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCsubsystemCert
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCsubsystemCert
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 ECC 证书:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCECCsubsystemCert
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCECCsubsystemCert
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
对于 TLS 服务器证书:
对于 RSA 证书:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCserverCert
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCserverCert
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 ECC 证书:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCECCserverCert
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caCMCECCserverCert
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
对于管理证书:
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caFullCMCUserCert
servlet=/ca/ee/ca/profileSubmitCMCFull?profileId=caFullCMCUserCert
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
更多详情:
- 当代理预签署 CSR 时,将考虑建立证明身份,因为代理检查 CSR 以进行识别。不需要额外的特定于 CMC 的身份证明。
- PKCS #10 文件已经提供 Possession 信息的证明,且不需要额外的 Possession (POP)。
-
在代理预批准的请求中,必须禁用
PopLinkWitnessV2
功能,因为代理会检查识别。
5.3.2.2. 获取用户的第一个签名证书 复制链接链接已复制到粘贴板!
批准用户的第一个签名证书有两种方法:
- 代理签署 CMC 请求。请参阅 第 5.3.2.2.1 节 “使用代理证书签署 CMC 请求”。
- 证书注册通过使用 Shared Secret 进行身份验证。请参阅 第 5.3.2.2.2 节 “使用共享 secret 为证书注册进行身份验证”。
5.3.2.2.1. 使用代理证书签署 CMC 请求 复制链接链接已复制到粘贴板!
使用代理证书签署 CMC 请求的过程与获取系统和服务器证书的过程相同,可在 第 5.3.1 节 “CMC 注册过程” 中找到。
5.3.2.3. 为用户获取仅限加密的证书 复制链接链接已复制到粘贴板!
本节描述了获取使用现有用户签名证书签名的仅加密证书的工作流:
如果用户拥有多个用于不同用途的证书,用户必须首先获取签名证书。用户拥有签名证书后,它可以用于概念验证,而无需设置并依赖 CMC 共享 Secret 机制。
有关获取用户第一个签名证书的详情,请参考 第 5.3.2.2 节 “获取用户的第一个签名证书”。
作为用户:
- 使用存储在网络安全服务(NSS)数据库或包含用户的签名证书和密钥的智能卡中的加密令牌。
以 PKCS #10 或 CRMF 格式生成 CSR。
注意如果需要密钥归档,请使用 CRMF 格式。
生成 CMC 请求。
由于这是仅加密的证书,私钥无法签名。因此,不包括 Of Possession (POP)。因此,注册需要两个步骤:如果初始请求成功,则会导致带有
EncryptedPOP
控制的 CMC 状态。然后,用户使用响应并生成包含DecryptedPOP
控制并在第二步骤中提交该响应的 CMC 请求。对于第一步,除了默认参数外,用户必须在传递给
CMCRequest
程序的配置文件中设置以下参数:-
identification.enable
-
witness.sharedSecret
-
identityProofV2.enable
-
identityProofV2.hashAlg
-
identityProofV2.macAlg
-
popLinkWitnessV2.enable
(如果 CA 需要) -
如果 CA 需要,
popLinkWitnessV2.keyGenAlg
-
popLinkWitnessV2.macAlg
(如果 CA 需要) request.privKeyId
详情请查看
CMCRequest (1)
手册页。响应包含:
- CMC 加密的 POP 控制
-
CMCStatusInfoV2
控制为POP 所需的
错误 - 请求 ID
-
对于第二个步骤,除了默认参数外,用户必须在传递给
CMCRequest
程序的配置文件中设置以下参数:-
decryptedPop.enable
-
encryptedPopResponseFile
-
decryptedPopRequestFile
-
request.privKeyId
-
oaep=true
-
详情请查看
CMCRequest (1)
手册页。
5.3.2.3.1. 使用密钥 Archival 获取仅加密证书的示例 复制链接链接已复制到粘贴板!
要使用密钥归档执行注册,请在 CRMF 请求中生成包含用户的加密私钥的 CMC 请求。以下流程假设用户已拥有签名证书。此签名证书的 nickname 在流程中的配置文件中设置。
以下流程描述了用于仅加密密钥的双行颁发,这些密钥无法用于签名。如果您使用可签署证书的密钥,请将 -q POP_SUCCESS 选项而不是 -q POP_NONE 传递给 CRMFPopClient
实用程序,以进行单行颁发。
获取仅加密证书的过程只需要使用带有 POP_NONE
选项的 CRMPopClient
生成 CRMF 请求。有关将 CRMFPopClient
与 POP_SUCCESS
搭配使用的说明,请参阅 第 5.2.3.1 节 “使用 CRMFPopClient 创建带有密钥 archival 的 CSR” 和 第 5.2.3.2 节 “使用 CRMFPopClient 为基于 SharedSecret 的 CMC 创建 CSR”。
生成 CSR
切换到请求证书的用户或实体的证书数据库目录,例如:
cd /home/user_name/.dogtag/nssdb/
$ cd /home/user_name/.dogtag/nssdb/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 搜索 KRA 传输证书。例如:
pki -p 8443 ca-cert-find --name "DRM Transport Certificate"
$ pki -p 8443 ca-cert-find --name "DRM Transport Certificate"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用您在上一步中检索的 KRA 传输证书的序列号,将证书存储在文件中。例如,要将带有 12345 序列号的证书存储在
kra.transport
文件中:pki -p 8443 ca-cert-export 12345 --output kra.transport
$ pki -p 8443 ca-cert-export 12345 --output kra.transport
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
CRMFPopClient
实用程序创建带有 POP_NONE 的 CRMF 请求,其中 RSA 私钥由 KRA 传输证书包装。例如,要生成并存储/home/user_name/.dogtag/nssdb/crmf.req
文件中的请求:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
CMCRequest 第一行(EncryptedPop)
为
CMCRequest
程序创建一个配置文件,如cmc-crmf-request.cfg
,其内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 CMC 请求:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果命令成功,
CMCRequest
工具会将 CMC 请求存储在请求配置文件的output
参数中指定的文件中。为
HttpClient
创建配置文件(如cmc-submit.cfg
)以用于稍后的步骤中,将 CMC 请求提交到 CA。在创建的文件中添加以下内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 CMC 请求提交到 CA:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果命令成功,
HTTPClient
实用程序会将 CMC 响应存储在 配置文件output
参数中指定的文件中。将响应文件传递给
CMCResponse
工具来验证响应。例如:CMCResponse -d /home/user_name/.dogtag/nssdb/ -i /home/user_name/.dogtag/nssdb/cmc-response_round_1.bin
$ CMCResponse -d /home/user_name/.dogtag/nssdb/ -i /home/user_name/.dogtag/nssdb/cmc-response_round_1.bin
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果第一个旅行成功,
CMCResponse
会显示类似如下的输出:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
CMCRequest second trip (DecryptedPop)
对于第二行,为
DecryptedPOP
创建一个配置文件,如/home/user_name/.dogtag/nssdb/cmc_DecryptedPOP.cfg
,您在稍后的步骤中使用。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意对于
request.privKeyId=
参数值,请输入在运行CRMFPopClient
后保存的私钥 ID,如crmf.req.keyId
。创建
DecryptPOP
CMC 请求:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果命令成功,
CMCRequest
实用程序将 CMC 请求存储在请求配置文件中的decryptedPopRequestFile
参数中指定的文件中。为
HttpClient
创建配置文件(如decrypted_POP_cmc-submit.cfg
)以便在稍后的步骤中使用,将DecryptedPOP
CMC 请求提交到 CA。在创建的文件中添加以下内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
DecryptedPOP
CMC 请求提交到 CA:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果命令成功,
HTTPClient
实用程序会将 CMC 响应存储在 配置文件output
参数中指定的文件中。要将 CMC 响应转换为 PKCS #7 证书链,请将 CMC 响应文件传递给
CMCResponse
工具的-i
参数。例如:CMCResponse -i cmc-response_round_2.bin -o encryption_only_certs.p7
$ CMCResponse -i cmc-response_round_2.bin -o encryption_only_certs.p7
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,要以 PEM 格式显示单个证书,请将 -v 传递给实用程序。
如果第二个往返成功,
CMCResponse
会显示类似于如下的输出:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功签发证书后,用户可以将证书导入到自己的
/home/user_name/.dogtag/nssdb/
数据库中。例如:pki -d /home/user_name/.dogtag/nssdb/ -c <password> client-cert-import "user_name certificate" --cert encryption_only_certs.p7
# pki -d /home/user_name/.dogtag/nssdb/ -c <password> client-cert-import "user_name certificate" --cert encryption_only_certs.p7
Copy to Clipboard Copied! Toggle word wrap Toggle overflow