5.2. 创建证书签名请求(CSR)
如 Planning, Installation and Deployment Guide (Common criteria Edition)中的 2.4.1.1.2.2 Enrolling with CMC 部分所述,CMCRequest 工具接受 PKCS #10 和 CRMF 格式的证书签名请求(CSR)。
Red Hat Certificate System 支持使用以下工具来创建 CSR:
-
certutil:支持创建 PKCS #10 请求。 -
PKCS10Client:支持创建 PKCS #10 请求。 -
CRMFPopClient:支持创建 CRMF 请求。
以下小节提供了如何将这些工具与功能丰富的注册配置集框架一起使用的示例。
虽然服务器侧密钥生成似乎在浏览器 EE 门户上提供,但允许在 CS 服务器上生成密钥(其中密钥随后被安全地传输回客户端),以克服因最新浏览器删除 keygen 支持而造成的不便,但此功能不会在通用标准版本中评估。
5.2.1. 使用 certutil创建 CSR 复制链接链接已复制到粘贴板!
这部分论述了如何使用 certutil 工具创建 CSR 的示例。
有关使用 certutil 的详情,请参考:
-
certutil (1)man page -
certutil --help命令的输出
5.2.1.1. 使用 certutil 创建带有 EC 密钥的 CSR 复制链接链接已复制到粘贴板!
以下流程演示了如何使用 certutil 工具创建 Elliptic Curve (EC)密钥对和 CSR:
切换到请求证书的用户或实体的证书数据库目录,例如:
$ cd /user_or_entity_database_directory/创建二进制 CSR 并将其存储在
request.csr文件中:$ certutil -d . -R -k ec -q nistp256 -s "CN=subject_name" -o request-bin.csr提示时输入所需的 NSS 数据库密码。
有关参数的详情,请查看
certutil (1)手册页。将创建的二进制格式 CSR 转换为 PEM 格式:
$ BtoA request-bin.csr request.csr(可选)验证 CSR 文件是否正确:
$ cat request.csr MIICbTCCAVUCAQAwKDEQMA4GA1UEChMHRXhhbXBsZTEUMBIGA1UEAxMLZXhhbXBs ...这是一个 PKCS650 PEM 证书请求。
- 有关后续步骤,请参阅 第 5.3.1 节 “CMC 注册过程”,但跳过创建证书请求的步骤。
5.2.1.2. 使用 certutil 创建带有用户定义的扩展的 CSR 复制链接链接已复制到粘贴板!
以下流程演示了如何使用 certutil 工具创建带有用户定义的扩展的 CSR。
请注意,注册请求受 CA 定义的注册配置集的限制。请参阅 例 B.3 “CSR 中提供了多个用户扩展”。
切换到请求证书的用户或实体的证书数据库目录,例如:
$ cd /user_or_entity_database_directory/使用用户定义的 Key Usage 扩展以及用户定义的扩展密钥用法扩展创建 CSR,并将其存储在
request.csr文件中:$ certutil -d . -R -k rsa -g 1024 -s "CN=subject_name" --keyUsage keyEncipherment,dataEncipherment,critical --extKeyUsage timeStamp,msTrustListSign,critical -a -o request.csr提示时输入所需的 NSS 数据库密码。
有关参数的详情,请查看
certutil (1)手册页。(可选)验证 CSR 文件是否正确:
$ cat request.csr Certificate request generated by Netscape certutil Phone: (not specified) Common Name: user 4-2-1-2 Email: (not specified) Organization: (not specified) State: (not specified) Country: (not specified)这是一个 PKCS650 PEM 证书请求。
注意由于上述 certutil 命令包含文本格式 CSR 的
-a选项,请务必在继续操作前删除标头信息。如果省略了,请确定使用BtoA工具从二进制转换为文本格式,如 第 5.2.1.1 节 “使用certutil创建带有 EC 密钥的 CSR” 一节所示。由于上述 certutil 命令包含文本格式 CSR 的 -a 选项,请务必在继续操作前删除标头信息。如果省略 -a,请务必使用 BtoA 从二进制格式转换为文本格式,如 "5.21 节 所示。使用 certutil 创建带有 EC 密钥的 CSR"。
有关后续步骤,请参阅 第 5.3.1 节 “CMC 注册过程”,但跳过创建证书请求的步骤。
5.2.2. 使用 PKCS10Client 创建 CSR 复制链接链接已复制到粘贴板!
本节提供了如何使用 PKCS10Client 工具创建 CSR 的示例。
有关使用 PKCS10Client 的详情,请参考:
-
PKCS10Client (1)手册页 -
PKCS10Client --help命令的输出
5.2.2.1. 使用 PKCS10Client 创建 CSR 复制链接链接已复制到粘贴板!
以下流程解释了如何使用 PKCS10Client 工具创建 Elliptic Curve (EC)密钥对和 CSR:
切换到请求证书的用户或实体的证书数据库目录,例如:
$ cd /user_or_entity_database_directory/创建 CSR 并将其存储在
example.csr文件中:$ PKCS10Client -d . -p NSS_password -a ec -c nistp256 -o example.csr -n "CN=subject_name"有关参数的详情,请查看
PKCS10Client (1)手册页。(可选)验证 CSR 是否正确:
$ cat example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
有关后续步骤,请参阅 第 5.3.1 节 “CMC 注册过程”。
5.2.2.2. 使用 PKCS10Client 为基于 SharedSecret 的 CMC 创建 CSR 复制链接链接已复制到粘贴板!
以下流程解释了如何使用 PKCS10Client 工具为基于 SharedSecret 的 CMC 创建 RSA 密钥对和 CSR。只使用它与 CMC Shared Secret 身份验证方法一起使用,它默认由 caFullCMCSharedTokenCert 和 caECFullCMCSharedTokenCert 配置集处理。
切换到请求证书的用户或实体的证书数据库目录,例如:
$ cd /user_or_entity_database_directory/创建 CSR 并将其存储在
example.csr文件中:$ PKCS10Client -d . -p NSS_password -o example.csr -y true -n "CN=subject_name"输出中生成的密钥对私钥 ID 保存到名为 <
CSR 输出文件 name>.keyId 的文件中。当遵循 Shared Secret 或 Decrypted POP CMC 注册过程时,将稍后使用此 ID。有关参数的详情,请查看
PKCS10Client (1)手册页。(可选)验证 CSR 是否正确:
$ cat example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
对于下一步,请跳至 第 5.3.2.2.2 节 “使用共享 secret 为证书注册进行身份验证”。
5.2.3. 使用 CRMFPopClient 创建 CSR 复制链接链接已复制到粘贴板!
证书请求消息格式(CRMF)是 CMC 中接受的 CSR 格式,它允许在请求中安全地嵌入密钥归档信息。
本节提供了如何使用 CRMFPopClient 工具创建 CSR 的示例。
有关使用 CRMFPopClient 的详情,请运行 CRMFPopClient -help 命令。
5.2.3.1. 使用 CRMFPopClient 创建带有密钥 archival 的 CSR 复制链接链接已复制到粘贴板!
以下流程解释了如何使用 CRMFPopClient 工具创建带有密钥 archival 选项的 RSA 密钥对和 CSR:
切换到请求证书的用户或实体的证书数据库目录,例如:
$ cd /user_or_entity_database_directory/从 CA 检索 KRA 传输证书:
$ pki -p 8443 ca-cert-find --name "DRM Transport Certificate" --------------- 1 entries found --------------- Serial Number: 0x7 Subject DN: CN=DRM Transport Certificate,O=EXAMPLE Status: VALID Type: X.509 version 3 Key Algorithm: PKCS #1 RSA with 2048-bit key Not Valid Before: Thu Oct 22 18:26:11 CEST 2015 Not Valid After: Wed Oct 11 18:26:11 CEST 2017 Issued On: Thu Oct 22 18:26:11 CEST 2015 Issued By: caadmin ---------------------------- Number of entries returned 1导出 KRA 传输证书:
$ pki -p 8443 ca-cert-show 0x7 --output kra.transport创建 CSR 并将其存储在
example.csr文件中:$ CRMFPopClient -d . -p password -n "cn=subject_name" -q POP_SUCCESS -b kra.transport -w "AES KeyWrap/Wrapped" -v -o example.csr -oaep Initializing security database: . archival option enabled Loading transport certificate Parsing subject DN RDN: CN=subject_name Generating key pair: temporary: false CryptoUtil: generateRSAKeyPair: calling kg.setKeyPairUsages Keypair private key id: 27a7e30b48f268ddcc8681633d4014579416d6ca Using key wrap algorithm: AES KeyWrap/Wrapped Creating certificate request CRMFPopClient: use_shared_secret true. Generating SubjectKeyIdentifier extension. Creating signer Creating POP Creating CRMF request Storing CRMF request into example.csr Storing CRMF request key id into example.csr.keyId注意要创建 Elliptic Curve (EC)密钥对和 CSR,请将 -a ec -t false 选项传给命令。有关参数的详情,请查看
CRMFPopClient -helpcmmand。(可选)验证 CSR 是否正确:
$ cat example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
有关后续步骤,请参阅 第 5.3.1 节 “CMC 注册过程”。
5.2.3.2. 使用 CRMFPopClient 为基于 SharedSecret 的 CMC 创建 CSR 复制链接链接已复制到粘贴板!
以下流程解释了如何使用 CRMFPopClient 工具为基于 SharedSecret 的 CMC 创建 RSA 密钥对和 CSR。只使用它与 CMC Shared Secret 身份验证方法一起使用,它默认由 caFullCMCSharedTokenCert 和 caECFullCMCSharedTokenCert 配置集处理。
切换到请求证书的用户或实体的证书数据库目录,例如:
$ cd /user_or_entity_database_directory/检索 KRA 传输证书:
$ pki -p 8443 ca-cert-find --name "DRM Transport Certificate" --------------- 1 entries found --------------- Serial Number: 0x7 Subject DN: CN=DRM Transport Certificate,O=EXAMPLE Status: VALID Type: X.509 version 3 Key Algorithm: PKCS #1 RSA with 2048-bit key Not Valid Before: Thu Oct 22 18:26:11 CEST 2015 Not Valid After: Wed Oct 11 18:26:11 CEST 2017 Issued On: Thu Oct 22 18:26:11 CEST 2015 Issued By: caadmin ---------------------------- Number of entries returned 1导出 KRA 传输证书:
$ pki -p 8443 ca-cert-export 0xc --output-file kra.transport创建 CSR 并将其存储在
example.csr文件中:$ CRMFPopClient -d . -p password -n "cn=subject_name" -q POP_SUCCESS -b kra.transport -w "AES KeyWrap/Wrapped" -y -v -o example.csr -oaep Initializing security database: . archival option enabled Loading transport certificate Parsing subject DN RDN: CN=subject_name Generating key pair: temporary: false CryptoUtil: generateRSAKeyPair: calling kg.setKeyPairUsages Keypair private key id: 6e786393637781a4ae281f5304290fcabda5a6b4 Using key wrap algorithm: AES KeyWrap/Wrapped Creating certificate request CRMFPopClient: use_shared_secret true. Generating SubjectKeyIdentifier extension. Creating signer Creating POP Creating CRMF request Storing CRMF request into example.csr Storing CRMF request key id into example.csr.keyId注意要创建 EC 密钥对和 CSR,请将 -a ec -t false 选项传给命令。有关参数的详情,请查看
CRMFPopClient --help命令的输出。输出中生成的密钥对私钥 ID 保存到名为 <
CSR 输出文件 name>.keyId 的文件中。当遵循 Shared Secret 或 DecryptedPOP CMC 注册过程时,将使用此 ID。(可选)验证 CSR 是否正确:
$ cat example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
对于下一步,请跳至 第 5.3.2.2.2 节 “使用共享 secret 为证书注册进行身份验证”。