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:

  1. 切换到请求证书的用户或实体的证书数据库目录,例如:

    $ cd /user_or_entity_database_directory/
  2. 创建二进制 CSR 并将其存储在 request.csr 文件中:

    $ certutil -d . -R -k ec -q nistp256 -s "CN=subject_name" -o request-bin.csr

    提示时输入所需的 NSS 数据库密码。

    有关参数的详情,请查看 certutil (1) 手册页。

  3. 将创建的二进制格式 CSR 转换为 PEM 格式:

    $ BtoA request-bin.csr request.csr
  4. (可选)验证 CSR 文件是否正确:

    $ cat request.csr
    
    		MIICbTCCAVUCAQAwKDEQMA4GA1UEChMHRXhhbXBsZTEUMBIGA1UEAxMLZXhhbXBs
    		...

    这是一个 PKCS650 PEM 证书请求。

  5. 有关后续步骤,请参阅 第 5.3.1 节 “CMC 注册过程”,但跳过创建证书请求的步骤。

以下流程演示了如何使用 certutil 工具创建带有用户定义的扩展的 CSR。

请注意,注册请求受 CA 定义的注册配置集的限制。请参阅 例 B.3 “CSR 中提供了多个用户扩展”

  1. 切换到请求证书的用户或实体的证书数据库目录,例如:

    $ cd /user_or_entity_database_directory/
  2. 使用用户定义的 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) 手册页。

  3. (可选)验证 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:

  1. 切换到请求证书的用户或实体的证书数据库目录,例如:

    $ cd /user_or_entity_database_directory/
  2. 创建 CSR 并将其存储在 example.csr 文件中:

    $ PKCS10Client -d . -p NSS_password -a ec -c nistp256 -o example.csr -n "CN=subject_name"

    有关参数的详情,请查看 PKCS10Client (1) 手册页。

  3. (可选)验证 CSR 是否正确:

    $ cat example.csr
    
    		-----BEGIN CERTIFICATE REQUEST-----
    		MIICzzCCAbcCAQAwgYkx
    		...
    		-----END CERTIFICATE REQUEST-----

有关后续步骤,请参阅 第 5.3.1 节 “CMC 注册过程”

以下流程解释了如何使用 PKCS10Client 工具为基于 SharedSecret 的 CMC 创建 RSA 密钥对和 CSR。只使用它与 CMC Shared Secret 身份验证方法一起使用,它默认由 caFullCMCSharedTokenCertcaECFullCMCSharedTokenCert 配置集处理。

  1. 切换到请求证书的用户或实体的证书数据库目录,例如:

    $ cd /user_or_entity_database_directory/
  2. 创建 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) 手册页。

  3. (可选)验证 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 命令。

以下流程解释了如何使用 CRMFPopClient 工具创建带有密钥 archival 选项的 RSA 密钥对和 CSR:

  1. 切换到请求证书的用户或实体的证书数据库目录,例如:

    $ cd /user_or_entity_database_directory/
  2. 从 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
  3. 导出 KRA 传输证书:

    $ pki -p 8443 ca-cert-show 0x7 --output kra.transport
  4. 创建 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 -help cmmand。

  5. (可选)验证 CSR 是否正确:

    $ cat example.csr
    
    		-----BEGIN CERTIFICATE REQUEST-----
    		MIICzzCCAbcCAQAwgYkx
    		...
    		-----END CERTIFICATE REQUEST-----

有关后续步骤,请参阅 第 5.3.1 节 “CMC 注册过程”

以下流程解释了如何使用 CRMFPopClient 工具为基于 SharedSecret 的 CMC 创建 RSA 密钥对和 CSR。只使用它与 CMC Shared Secret 身份验证方法一起使用,它默认由 caFullCMCSharedTokenCertcaECFullCMCSharedTokenCert 配置集处理。

  1. 切换到请求证书的用户或实体的证书数据库目录,例如:

    $ cd /user_or_entity_database_directory/
  2. 检索 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
  3. 导出 KRA 传输证书:

    $ pki -p 8443 ca-cert-export 0xc --output-file kra.transport
  4. 创建 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。

  5. (可选)验证 CSR 是否正确:

    $ cat example.csr
    		-----BEGIN CERTIFICATE REQUEST-----
    		MIICzzCCAbcCAQAwgYkx
    		...
    		-----END CERTIFICATE REQUEST-----

对于下一步,请跳至 第 5.3.2.2.2 节 “使用共享 secret 为证书注册进行身份验证”

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部