5.2. 创建证书签名请求
通常,以下方法用于生成证书请求(CSR):
- 使用命令行工具生成 CSR
- 在支持的浏览器中生成 CSR
- 在应用程序内生成 CSR,如服务器的安装程序
其中一些方法支持直接提交 CSR,而有些方法则不支持。
从 RHCS 9.7 开始,支持 Server-Side 键生成来克服在较新版本的浏览器(如 Firefox v69 和 up)中消除密钥生成带来的不便性。因此,在本节中,我们将不讨论密钥生成浏览器支持。虽然没有原因认为这些浏览器的旧版本不应与旧的 RHCS 文档中所述继续工作。
从应用程序生成的 CSR 通常采用 PKCS#10 的形式。如果它们正确生成,则 RHCS 应该支持它们。
在以下小节中,我们将深入介绍 RHCS 支持的以下方法:
- 命令行工具
- 服务器侧密钥生成
5.2.1. 使用命令行工具生成 CSR 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
Red Hat Certificate System 支持使用以下工具创建 CSR:
certutil
:支持创建 PKCS #10 请求。PKCS10Client
:支持创建 PKCS #10 请求。CRMFPopClient
:支持创建 CRMF 请求。pki client-cert-request
: 支持 PKCS#10 和 CRMF 请求。
以下小节介绍了如何将这些实用程序与功能丰富的注册配置集框架搭配使用的一些示例。
5.2.1.1. 使用 certutil创建 CSR 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
这部分论述了如何使用
certutil
工具创建 CSR 的示例。
有关使用
certutil
的详情,请参考:
- certutil(1) man page
- certutil --help 命令的输出
5.2.1.1.1. 使用 certutil 创建带有 EC 密钥的 CSR 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
以下流程演示了如何使用
certutil
实用程序创建 Elliptic Curve(EC)密钥对和 CSR:
- 进入请求证书的用户或实体的证书数据库目录,例如:
cd /user_or_entity_database_directory/
$ cd /user_or_entity_database_directory/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 创建二进制 CSR,并将其存储在
/user_or_entity_database_directory/request.csr
文件中:certutil -d . -R -k ec -q nistp256 -s "CN=subject_name" -o /user_or_entity_database_directory/request-bin.csr
$ certutil -d . -R -k ec -q nistp256 -s "CN=subject_name" -o /user_or_entity_database_directory/request-bin.csr
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 提示时输入所需的 NSS 数据库密码。有关参数的详情,请查看 certutil(1) man page。 - 将创建的二进制格式 CSR 转换为 PEM 格式:
BtoA /user_or_entity_database_directory/request-bin.csr /user_or_entity_database_directory/request.csr
$ BtoA /user_or_entity_database_directory/request-bin.csr /user_or_entity_database_directory/request.csr
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - (可选)验证 CSR 文件是否正确:
cat /user_or_entity_database_directory/request.csr MIICbTCCAVUCAQAwKDEQMA4GA1UEChMHRXhhbXBsZTEUMBIGA1UEAxMLZXhhbXBs ...
$ cat /user_or_entity_database_directory/request.csr MIICbTCCAVUCAQAwKDEQMA4GA1UEChMHRXhhbXBsZTEUMBIGA1UEAxMLZXhhbXBs ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这是一个 PKCS#10 PEM 证书请求。
5.2.1.1.2. 使用 certutil 使用用户定义的扩展来创建 CSR 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
以下流程演示了如何使用
certutil
实用程序使用用户定义的扩展创建 CSR。
请注意,注册请求受 CA 定义的注册配置集的限制。请参阅 例 B.3 “CSR 中的多个用户提供的扩展”。
- 进入请求证书的用户或实体的证书数据库目录,例如:
cd /user_or_entity_database_directory/
$ cd /user_or_entity_database_directory/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用用户定义的 Key Usage 扩展创建 CSR,以及用户定义的扩展密钥使用扩展,并将其存储在
/user_or_entity_database_directory/request.csr
文件中:certutil -d . -R -k rsa -g 1024 -s "CN=subject_name" --keyUsage keyEncipherment,dataEncipherment,critical --extKeyUsage timeStamp,msTrustListSign,critical -a -o /user_or_entity_database_directory/request.csr
$ certutil -d . -R -k rsa -g 1024 -s "CN=subject_name" --keyUsage keyEncipherment,dataEncipherment,critical --extKeyUsage timeStamp,msTrustListSign,critical -a -o /user_or_entity_database_directory/request.csr
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 提示时输入所需的 NSS 数据库密码。有关参数的详情,请查看 certutil(1) man page。 - (可选)验证 CSR 文件是否正确:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这是一个 PKCS#10 PEM 证书请求。
5.2.1.2. 使用 PKCS10Client创建 CSR 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
这部分论述了如何使用
PKCS10Client
实用程序创建 CSR 的示例。
有关使用
PKCS10Client
的详情,请参考:
- PKCS10Client(1) man page
- PKCS10Client --help 命令的输出
5.2.1.2.1. 使用 PKCS10Client 创建 CSR 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
以下流程解释了如何使用
PKCS10Client
实用程序创建 Elliptic Curve(EC)密钥对和 CSR:
- 进入请求证书的用户或实体的证书数据库目录,例如:
cd /user_or_entity_database_directory/
$ cd /user_or_entity_database_directory/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 创建 CSR,并将其存储在
/user_or_entity_database_directory/example.csr
文件中:PKCS10Client -d . -p NSS_password -a ec -c nistp256 -o /user_or_entity_database_directory/example.csr -n "CN=subject_name"
$ PKCS10Client -d . -p NSS_password -a ec -c nistp256 -o /user_or_entity_database_directory/example.csr -n "CN=subject_name"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关参数的详情,请查看 PKCS10Client(1) man page。 - (可选)验证 CSR 是否正确:
cat /user_or_entity_database_directory/example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
$ cat /user_or_entity_database_directory/example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.1.2.2. 使用 PKCS10Client 为基于 SharedSecret 的 CMC 创建 CSR 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
以下流程解释了如何使用
PKCS10Client
程序为基于 SharedSecret 的 CMC 创建 RSA 密钥对和 CSR。它仅与 CMC Shared Secret 身份验证方法一起使用,默认由 caFullCMCSharedTokenCert
和 caECFullCMCSharedTokenCert
配置集处理。
- 进入请求证书的用户或实体的证书数据库目录,例如:
cd /user_or_entity_database_directory/
$ cd /user_or_entity_database_directory/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 创建 CSR,并将其存储在
/user_or_entity_database_directory/example.csr
文件中:PKCS10Client -d . -p NSS_password -o /user_or_entity_database_directory/example.csr -y true -n "CN=subject_name"
$ PKCS10Client -d . -p NSS_password -o /user_or_entity_database_directory/example.csr -y true -n "CN=subject_name"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关参数的详情,请查看 PKCS10Client(1) man page。 - (可选)验证 CSR 是否正确:
cat /user_or_entity_database_directory/example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
$ cat /user_or_entity_database_directory/example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.1.3. 使用 CRMFPopClient创建 CSR 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
证书请求消息格式(CRMF)是 CMC 中接受的 CSR 格式,允许密钥存档信息安全地嵌入到请求中。
本节介绍如何使用
CRMFPopClient
实用程序创建 CSR 的示例。
有关使用
CRMFPopClient
的详情,请查看 CRMFPopClient(1) man page。
5.2.1.3.1. 使用 CRMFPopClient 创建带有密钥 Archival 的 CSR 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
以下流程解释了如何使用
CRMFPopClient
实用程序创建 RSA 密钥对,并使用密钥归档选项创建 CSR:
- 进入请求证书的用户或实体的证书数据库目录,例如:
cd /user_or_entity_database_directory/
$ cd /user_or_entity_database_directory/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 检索 KRA 传输证书:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 导出 KRA 传输证书:
pki ca-cert-show 0x7 --output kra.transport
$ pki ca-cert-show 0x7 --output kra.transport
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 创建 CSR,并将其存储在
/user_or_entity_database_directory/example.csr
文件中:CRMFPopClient -d . -p password -n "cn=subject_name" -q POP_SUCCESS -b kra.transport -w "AES/CBC/PKCS5Padding" -v -o /user_or_entity_database_directory/example.csr
$ CRMFPopClient -d . -p password -n "cn=subject_name" -q POP_SUCCESS -b kra.transport -w "AES/CBC/PKCS5Padding" -v -o /user_or_entity_database_directory/example.csr
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要创建 Elliptic Curve(EC)密钥对和 CSR,将-a ec -t false
选项传递给该命令。有关参数的详情,请查看 CRMFPopClient(1) man page。 - (可选)验证 CSR 是否正确:
cat /user_or_entity_database_directory/example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
$ cat /user_or_entity_database_directory/example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
以下流程解释了如何使用
CRMFPopClient
程序为基于 SharedSecret 的 CMC 创建 RSA 密钥对和 CSR。它仅与 CMC Shared Secret 身份验证方法一起使用,默认由 caFullCMCSharedTokenCert
和 caECFullCMCSharedTokenCert
配置集处理。
- 进入请求证书的用户或实体的证书数据库目录,例如:
cd /user_or_entity_database_directory/
$ cd /user_or_entity_database_directory/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 检索 KRA 传输证书:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 导出 KRA 传输证书:
pki ca-cert-show 0x7 --output kra.transport
$ pki ca-cert-show 0x7 --output kra.transport
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 创建 CSR,并将其存储在
/user_or_entity_database_directory/example.csr
文件中:CRMFPopClient -d . -p password -n "cn=subject_name" -q POP_SUCCESS -b kra.transport -w "AES/CBC/PKCS5Padding" -y -v -o /user_or_entity_database_directory/example.csr
$ CRMFPopClient -d . -p password -n "cn=subject_name" -q POP_SUCCESS -b kra.transport -w "AES/CBC/PKCS5Padding" -y -v -o /user_or_entity_database_directory/example.csr
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要创建 EC 密钥对和 CSR,将-a ec -t false
选项传递给该命令。有关参数的详情,请查看 CRMFPopClient --help 命令的输出。 - (可选)验证 CSR 是否正确:
cat /user_or_entity_database_directory/example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
$ cat /user_or_entity_database_directory/example.csr -----BEGIN CERTIFICATE REQUEST----- MIICzzCCAbcCAQAwgYkx ... -----END CERTIFICATE REQUEST-----
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.1.4. 在 PKI CLI 中使用 client-cert-request 创建 CSR 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
pki
命令行工具也可以与 client-cert-request
命令一起使用,以生成 CSR。但是,与之前讨论的工具不同,使用 pki 生成的 CSR 将直接提交到 CA。可以生成 PKCS#10 或 CRMF 请求。
生成 PKCS#10 请求的示例:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
pki -d user token db directory -P https -p 8443 -h host.test.com -c user token db passwd client-cert-request "uid=test2" --length 4096 --type pkcs10
pki -d user token db directory -P https -p 8443 -h host.test.com -c user token db passwd client-cert-request "uid=test2" --length 4096 --type pkcs10
生成 CRMF 请求的示例:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
pki -d user token db directory -P https -p 8443 -h host.test.com -c user token db passwd client-cert-request "uid=test2" --length 4096 --type crmf
pki -d user token db directory -P https -p 8443 -h host.test.com -c user token db passwd client-cert-request "uid=test2" --length 4096 --type crmf
成功时将返回请求 id。
提交请求后,代理可以通过使用 pki
ca-cert-request-approve
命令批准它。
例如:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
pki -d agent token db directory -P https -p 8443 -h host.test.com -c agent token db passwd -n <CA agent cert nickname> ca-cert-request-approve request id
pki -d agent token db directory -P https -p 8443 -h host.test.com -c agent token db passwd -n <CA agent cert nickname> ca-cert-request-approve request id
如需更多信息,请参阅 pki client-cert-request --help 命令的 man page。