7.3. 创建并配置 RootCA (第 I 部分)
要安装和配置 RootCA 实例,请使用两个 pkispawn 方法之一:
7.3.1. 安装 RootCA 实例(单步方法) 复制链接链接已复制到粘贴板!
使用单步方法配置 RootCA 实例需要创建配置文件并运行 pkispawn 工具。
在本例中,根CA 安装在 rhcs10.example.com (以及其他实例)上,其内部目录服务器位于 rhds11.example.com 上。
先决条件
- 以 root 用户身份登录 rhcs10.example.com。
- 您有 第 7.1.2.1 节 “为 RootCA 安装 DS 实例”。在我们的示例中,CC-RSA-RootCA-LDAP 是 RootCA 的内部数据库。
流程
在要托管 RHCS 实例的机器上的所选位置(如
/root/pki_rsa)创建一个 CA 安装文件,该文件将托管 RHCS 实例(rhcs10.example.com)。# cd /root/pki_rsa# vi rootca_inst.cfg注意除非明确指定,否则系统证书别名将自动命名为
pki_instance_name的值。为了避免共享 HSM 上的证书别名冲突,请为每个实例创建使用不同的实例名称。
以下安装文件中指定的值是示例。除了更改 HSM 密码外,还要相应地编辑值,如 ports, directory, nicknames, domains…
[DEFAULT] pki_instance_name=rhcs10-RSA-RootCA pki_https_port=8443 pki_http_port=8080 ### Crypto Token pki_hsm_enable=True pki_hsm_libfile=/opt/nfast/toolkits/pkcs11/libcknfast.so pki_hsm_modulename=nfast pki_token_name=NHSM-CONN-XC pki_token_password=<YourHSMpassword> pki_audit_signing_token=NHSM-CONN-XC pki_audit_signing_key_algorithm=SHA256withRSA pki_audit_signing_key_size=2048 pki_audit_signing_key_type=rsa pki_audit_signing_signing_algorithm=SHA256withRSA pki_subsystem_token=NHSM-CONN-XC pki_subsystem_key_algorithm=SHA256withRSA pki_subsystem_signing_algorithm=SHA256withRSA pki_subsystem_key_size=2048 pki_subsystem_key_type=rsa pki_sslserver_token=NHSM-CONN-XC pki_sslserver_key_algorithm=SHA256withRSA pki_sslserver_signing_algorithm=SHA256withRSA pki_sslserver_key_size=2048 pki_sslserver_key_type=rsa ### Bootstrap Admin pki_admin_password=SECret.123 pki_admin_key_type=rsa pki_admin_key_size=2048 pki_admin_key_algorithm=SHA256withRSA ### Bootstrap Admin client dir ### by default, if pki_client_dir, pki_client_database_dir, ### and pki_client_admin_cert_p12 are not specified, items will be placed ### under some default directories in /root/.dogtag pki_client_admin_cert_p12=/opt/pki_rsa/rhcs10-RSA-RootCA/ca_admin_cert.p12 pki_client_database_dir=/opt/pki_rsa/rhcs10-RSA-RootCA/certs_db pki_client_database_password=SECret.123 pki_client_dir=/opt/pki_rsa/rhcs10-RSA-RootCA pki_client_pkcs12_password=SECret.123 ### Internal LDAP pki_ds_bind_dn=cn=Directory Manager pki_ds_ldap_port=389 pki_ds_ldaps_port=636 pki_ds_password=SECret.123 pki_ds_remove_data=True pki_ds_secure_connection=True pki_ds_secure_connection_ca_pem_file=/opt/pki_rsa/temp-dirsrv-rootca-cert.pem pki_ds_secure_connection_ca_nickname=DS temp CA certificate ### Security Domain pki_security_domain_hostname=rhcs10.example.com pki_security_domain_name=Example-rhcs10-RSA-RootCA pki_security_domain_password=SECret.123 [Tomcat] pki_ajp_port=8009 pki_tomcat_server_port=8005 [CA] pki_import_admin_cert=False pki_admin_nickname=PKI Bootstrap Administrator for RSA-RootCA pki_admin_name=caadmin pki_admin_uid=caadmin pki_admin_email=caadmin@example.com pki_ca_signing_token=NHSM-CONN-XC pki_ca_signing_key_algorithm=SHA256withRSA pki_ca_signing_key_size=3072 pki_ca_signing_key_type=rsa pki_ca_signing_nickname=CA Signing Cert - %(pki_instance_name)s pki_ca_signing_signing_algorithm=SHA256withRSA pki_ocsp_signing_token=NHSM-CONN-XC pki_ocsp_signing_key_algorithm=SHA256withRSA pki_ocsp_signing_key_size=3072 pki_ocsp_signing_key_type=rsa pki_ocsp_signing_signing_algorithm=SHA256withRSA pki_ds_hostname=rhds11.example.com pki_ds_base_dn=dc=RSA-RootCA pki_ds_database=CC-RSA-RootCA-LDAP pki_share_db=False ### Enable random serial numbers pki_random_serial_numbers_enable=True运行
pkispawn工具来安装 RHCS CA 实例:# pkispawn -s CA -f rootca_inst.cfg --debug
验证步骤
显示已安装 CA 的状态:
# pki-server status rhcs10-RSA-RootCA请注意 Unsecure EE、Secure EE、Agent、Admin 和 pkiconsole URL。
运行以下命令,验证 CA 的健全性。它应该显示证书:
# pki -p 8443 -h rhcs10.example.com ca-cert-find
当第一次使用 pki 命令连接到 RootCA 时,将显示 CA 签名证书的不受信任的签发者警告,如下所示:
WARNING: UNTRUSTED ISSUER encountered on 'CN=rhcs10.example.com,OU=rhcs10-RSA-RootCA,O=Example-rhcs10-RSA-RootCA' indicates a non-trusted CA cert 'CN=CA Signing Certificate,OU=rhcs10-RSA-RootCA,O=Example-rhcs10-RSA-RootCA'
Trust this certificate (y/N)?
如果主题 DN 与主机名匹配,请选择 y 以信任 CA 签名证书。警告不会再次显示。
使用本节(单步方法)完成后,直接跳过 第 7.3.3 节 “禁用非CMC 和非安装配置集” 以继续 RootCA 安装。
7.3.2. 安装 RootCA 实例(两步方法) 复制链接链接已复制到粘贴板!
使用两步方法配置 RootCA 实例需要创建配置文件并运行 pkispawn 工具两次。
在本例中,根CA 安装在 rhcs10.example.com 上。
先决条件
- 以 root 用户身份登录 rhcs10.example.com。
- 您有 第 7.1.2.1 节 “为 RootCA 安装 DS 实例”。在我们的示例中,CC-RSA-RootCA-LDAP 是 RootCA 的内部数据库。
RootCA 安装的第一步
在要托管 RHCS 实例的机器上的所选位置(如
/root/pki_rsa)创建一个 CA 安装文件,该文件将托管 RHCS 实例(rhcs10.example.com)。# cd /root/pki_rsa # vi rootca_inst.cfg[DEFAULT] pki_instance_name=rhcs10-RSA-RootCA pki_https_port=8443 pki_http_port=8080 ### Crypto Token pki_hsm_enable=True pki_hsm_libfile=/opt/nfast/toolkits/pkcs11/libcknfast.so pki_hsm_modulename=nfast pki_token_name=NHSM-CONN-XC pki_token_password=<YourHSMpassword> pki_audit_signing_token=NHSM-CONN-XC pki_audit_signing_key_algorithm=SHA256withRSA pki_audit_signing_key_size=2048 pki_audit_signing_key_type=rsa pki_audit_signing_signing_algorithm=SHA256withRSA pki_subsystem_token=NHSM-CONN-XC pki_subsystem_key_algorithm=SHA256withRSA pki_subsystem_signing_algorithm=SHA256withRSA pki_subsystem_key_size=2048 pki_subsystem_key_type=rsa pki_sslserver_token=NHSM-CONN-XC pki_sslserver_key_algorithm=SHA256withRSA pki_sslserver_signing_algorithm=SHA256withRSA pki_sslserver_key_size=2048 pki_sslserver_key_type=rsa ### Bootstrap Admin pki_admin_password=SECret.123 pki_admin_key_type=rsa pki_admin_key_size=2048 pki_admin_key_algorithm=SHA256withRSA ### Bootstrap Admin client dir ### by default, if pki_client_dir, pki_client_database_dir, ### and pki_client_admin_cert_p12 are not specified, items will be placed ### under some default directories in /root/.dogtag pki_client_dir=/opt/pki_rsa/rhcs10-RSA-RootCA pki_client_admin_cert_p12=/opt/pki_rsa/rhcs10-RSA-RootCA/ca_admin_cert.p12 pki_client_database_dir=/opt/pki_rsa/rhcs10-RSA-RootCA/certs_db pki_client_database_password=SECret.123 pki_client_pkcs12_password=SECret.123 ### Internal LDAP pki_ds_bind_dn=cn=Directory Manager pki_ds_ldap_port=389 pki_ds_ldaps_port=636 pki_ds_password=SECret.123 pki_ds_remove_data=True pki_ds_secure_connection=True pki_ds_secure_connection_ca_pem_file=/opt/pki_rsa/temp-dirsrv-rootca-cert.pem pki_ds_secure_connection_ca_nickname=DS temp CA certificate ### Security Domain pki_security_domain_hostname=rhcs10.example.com pki_security_domain_name=Example-rhcs10-RSA-RootCA pki_security_domain_password=SECret.123 [Tomcat] pki_ajp_port=8009 pki_tomcat_server_port=8005 [CA] pki_import_admin_cert=False pki_admin_nickname=PKI Bootstrap Administrator for RSA-RootCA pki_admin_name=caadmin pki_admin_uid=caadmin pki_admin_email=caadmin@example.com pki_ca_signing_token=NHSM-CONN-XC pki_ca_signing_key_algorithm=SHA256withRSA pki_ca_signing_key_size=3072 pki_ca_signing_key_type=rsa pki_ca_signing_nickname=CA Signing Cert - %(pki_instance_name)s pki_ca_signing_signing_algorithm=SHA256withRSA pki_ocsp_signing_token=NHSM-CONN-XC pki_ocsp_signing_key_algorithm=SHA256withRSA pki_ocsp_signing_key_size=3072 pki_ocsp_signing_key_type=rsa pki_ocsp_signing_signing_algorithm=SHA256withRSA pki_ds_hostname=rhds11.example.com pki_ds_base_dn=dc=RSA-RootCA pki_ds_database=CC-RSA-RootCA-LDAP pki_share_db=False ### Enable random serial numbers pki_random_serial_numbers_enable=True注意除非明确指定,否则系统证书别名将自动命名为
pki_instance_name的值。为了避免共享 HSM 上的证书别名冲突,请为每个实例创建使用不同的实例名称。但是,在两步安装中,两个文件的pki_instance_name值应该匹配。以下值只是示例。运行
pkispawn工具来安装 RHCS CA 实例:# pkispawn -s CA -f rootca_inst.cfg --skip-configuration --debug
步骤配置
如 步骤自定义之间的 所述,您可以自定义某些内容,如系统证书的证书配置文件。
为 CA 签名证书设置 Subject Key Identifier 扩展消息摘要算法:
打开此 CA 的签名证书的注册配置集:
# vi /var/lib/pki/rhcs10-RSA-RootCA/ca/conf/caCert.profile添加以下参数:
7.default.params.messageDigest=SHA-256- 保存该文件。
同样,对于此 CA 将在以后发布的 CA 签名证书执行相同的操作:
为 CA 签名证书打开注册配置集:
# vi /var/lib/pki/rhcs10-RSA-RootCA/ca/profiles/ca/caInstallCACert.cfg# vi /var/lib/pki/rhcs10-RSA-RootCA/ca/profiles/ca/caCMCcaCert.cfg添加以下参数:
policyset.caCertSet.8.default.params.messageDigest=SHA-256- 保存该文件。
此处也可以进行其他在步骤间的配置更改。例如,如果要扩展此子系统审计签名证书的有效性周期:
打开对应的配置文件:
# vi /var/lib/pki/rhcs10-RSA-RootCA/ca/profiles/ca/caInternalAuthAuditSigningCert.cfg将以下范围参数改为所需的值:
policyset.auditSigningCertSet.2.constraint.params.range=720 policyset.auditSigningCertSet.2.default.params.range=720-
保存该文件。在下一部分中完成
pkispawn的第二步骤后,您应该预期此子系统的审计签名证书的有效性,以匹配您更改的值。
RootCA 安装的第二步
pkispawn 的第二步涉及以不同方式针对同一文件运行工具,从而配置 RHCS CA 实例。
运行
pkispawn工具来配置 CA:# pkispawn -s CA -f rootca_inst.cfg --skip-installation --debug
验证步骤
显示已安装 CA 的状态:
# pki-server status rhcs10-RSA-RootCA请注意 Unsecure EE、Secure EE、Agent、Admin 和 pkiconsole URL。
运行以下命令,验证 CA 的健全性。它应该显示证书:
# pki -p 8443 -h rhcs10.example.com ca-cert-find
当第一次使用 pki 命令连接到 RootCA 时,将显示 CA 签名证书的不受信任的签发者警告,如下所示:
WARNING: UNTRUSTED ISSUER encountered on 'CN=rhcs10.example.com,OU=rhcs10-RSA-RootCA,O=Example-rhcs10-RSA-RootCA' indicates a non-trusted CA cert 'CN=CA Signing Certificate,OU=rhcs10-RSA-RootCA,O=Example-rhcs10-RSA-RootCA'
Trust this certificate (y/N)?
如果主题 DN 与主机名匹配,请选择 y 以信任 CA 签名证书。警告不会再次显示。
7.3.3. 禁用非CMC 和非安装配置集 复制链接链接已复制到粘贴板!
该配置文件存储在 /var/lib/pki_rsa/rhcs10-RSA-RootCA/ca/profiles/ca/ 中。CMC 配置文件在其配置集 ID 中包含 "CMC"。本节提供了禁用非CMC 和非安装配置集的步骤。
流程
生成要编辑的非CMC 配置集列表:
# ls /var/lib/pki/rhcs10-RSA-RootCA/ca/profiles/ca | grep -v CMC | grep -v Install | grep -v caInternal | grep -v caECInternal | grep -v caAdminCert | grep -v caECAdminCert | tee /root/pki_rsa/ca-profile-deletelist.txt停止 RootCA 实例:
pki-server stop rhcs10-RSA-RootCA对于列表中的每个配置集,将
visible和enable参数从true改为false。例如,使用以下命令设置visible=false和enable=false:# cat /root/pki_rsa/ca-profile-deletelist.txt | while read line; do sed -i 's/^visible=true/visible=false/g' /var/lib/pki/rhcs10-RSA-RootCA/ca/profiles/ca/$line; sed -i 's/^enable=true/enable=false/g' /var/lib/pki/rhcs10-RSA-RootCA/ca/profiles/ca/$line; done另外,还要将
caCMCUserCert配置集的visible参数改为false:# sed -i 's/^visible=true/visible=false/' /var/lib/pki/rhcs10-RSA-RootCA/ca/profiles/ca/caCMCUserCert.cfg启动 RootCA 实例:
pki-server start rhcs10-RSA-RootCA
7.3.4. 创建 CA 链文件 复制链接链接已复制到粘贴板!
在后续步骤中,您将需要 CA 证书和 CA 链。务必要使证书链文件保持最新状态。我们会将 CA 链文件 ca-chain.pem 以及单独的 CA .pem 文件放在 rhcs10.example.com (托管 CS 实例的机器)和 rhds11.example.com (托管 DS 实例的机器)下。
创建 CA 链文件供以后使用:
# certutil -L -d /var/lib/pki/rhcs10-RSA-RootCA/alias -n "CA Signing Cert - rhcs10-RSA-RootCA" -a > /opt/pki_rsa/rootCA.pem# cp /opt/pki_rsa/rootCA.pem /opt/pki_rsa/ca-chain.pem将文件复制到 rhds11.example.com (托管 DS 实例的机器):
# scp /opt/pki_rsa/rootCA.pem root@rhds11.example.com:/opt/pki_rsa# scp /opt/pki_rsa/ca-chain.pem root@rhds11.example.com:/opt/pki_rsa在 rhds11.example.com 上,编辑
/etc/openldap/ldap.conf文件,使TLS_CACERT指向我们刚才创建的 CA 链文件:# echo "TLS_CACERT /opt/pki_rsa/ca-chain.pem" >> /etc/openldap/ldap.conf重启 RootCA 的 DS 实例:
# dsctl slapd-CC-RSA-RootCA-LDAP restart
7.3.5. 准备 RootCA 以签署其他 CMC 证书请求 复制链接链接已复制到粘贴板!
本节中的流程旨在创建一个包含 RootCA 的 bootstrap admin 证书/密钥的 nssdb,以便 pki 管理员在后续步骤中为角色用户证书签署 CMC 完整请求。
在以前的版本中,在 pkispawn 配置文件中,我们指定了以下参数:
pki_client_dir=/opt/pki_rsa/rhcs10-RSA-RootCA
pki_client_admin_cert_p12=/opt/pki_rsa/rhcs10-RSA-RootCA/ca_admin_cert.p12
pki_client_database_dir=/opt/pki_rsa/rhcs10-RSA-RootCA/certs_db
这些参数告诉 pkispawn 在哪里放置 bootstrap 管理证书和密钥,因此您不需要按照本节中的步骤进行操作。但是,由于我们希望向读者展示一个工作示例,为了便于执行和描述,因此我们设计了 /root/.dogtag/pki_rsa_bootstrap/certs_db 作为 nssdb 的位置,该示例中包含所有 bootstrap admin 用户证书和密钥。
前提条件
- 以 root 用户身份登录 rhcs10.example.com。
流程
创建客户端 nssdb:
# pki -d /root/.dogtag/pki_rsa_bootstrap/certs_db -c SECret.123 client-init注意指定 at
-d的目录应尚不存在。如果存在,另一个 RHCS 实例可能会使用它。在这种情况下,建议将其移出,或者指定不同的路径。您可以使用以下内容检查是否有证书:# certutil -L -d /root/.dogtag/pki_rsa_bootstrap/certs_db如果不存在,您可以选择
Yes来覆盖。将 CA 签名证书导入到 nssdb 中:
# pki -d /root/.dogtag/pki_rsa_bootstrap/certs_db -c SECret.123 client-cert-import "CA Signing Cert - rhcs10-RSA-RootCA" --ca-cert /opt/pki_rsa/rootCA.pem将 RootCA bootstrap admin 证书/密钥导入到 nssdb 中:
# pki -d /root/.dogtag/pki_rsa_bootstrap/certs_db -c SECret.123 client-cert-import --pkcs12 /opt/pki_rsa/rhcs10-RSA-RootCA/ca_admin_cert.p12 --pkcs12-password SECret.123 ---------------------------------------- Imported certificates from PKCS #12 file ----------------------------------------
验证:
列出证书:
# certutil -d /root/.dogtag/pki_rsa_bootstrap/certs_db -L Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI PKI Bootstrap Administrator for RSA-RootCA u,u,u CA Signing Cert - rhcs10-RSA-RootCA CT,C,C以 bootstrap admin 用户身份,列出 RootCA 中的用户:
# pki -d /root/.dogtag/pki_rsa_bootstrap/certs_db/ -c SECret.123 -p 8443 -n "PKI Bootstrap Administrator for RSA-RootCA" ca-user-find----------------- 3 entries matched ----------------- User ID: CA-rhcs10.example.com-8443 Full name: CA-rhcs10.example.com-8443 User ID: caadmin Full name: caadmin User ID: pkidbuser Full name: pkidbuser ---------------------------- Number of entries returned 3
7.3.6. 检查随机序列号 复制链接链接已复制到粘贴板!
列出证书,以确保所有子系统证书都有随机序列号。
# pki -p 8443 ca-cert-find | grep -i serial
7.3.7. 验证 RootCA 签名证书没有 AIA 复制链接链接已复制到粘贴板!
务必要注意,因为这是一个自签名(root) CA 签名证书,因此不应包含 AIA (授权信息访问)扩展。
验证 RootCA 签名证书是否已正确发布:
# certutil -L -d /var/lib/pki/rhcs10-RSA-RootCA/alias/ -n "CA Signing Cert - rhcs10-RSA-RootCA"您应该观察没有 AIA 扩展。
要允许 RootCA 角色用户证书包含指向 OCSP 实例的 AIA 扩展(在以下部分中创建),相关部分放置在 第 7.5 节 “创建并配置 RootCA (第二部分)” 中,AFTER OCSP 实例创建。
7.3.8. 配置对 CRL 分发点的支持 复制链接链接已复制到粘贴板!
有关 CRL 分发点的更多信息,为什么需要它们,以及它们最适合的位置,请参阅 第 9.4.1.2 节 “在 CA 上启用自动撤销检查”。
要配置对 CRL 分发点的支持,我们描述了如何设置基于文件的 CRL 发布程序以及 CRL 的分区。您还将了解如何启用证书注册配置文件,以使用 CRL 分发点扩展发布证书。最后,我们描述了如何将 CA 的 LDAP 服务器的临时服务器认证替换为从 CRL 分发点配置文件发布的证书。
在继续以下更改前,停止 RootCA 实例:
# pki-server stop rhcs10-RSA-RootCA
7.3.8.1. 支持 Server Cert CRL File Publishing 的 CA 设置 复制链接链接已复制到粘贴板!
在继续操作前,在编辑前保存配置文件副本:
# cp /var/lib/pki/rhcs10-RSA-RootCA/ca/conf/CS.cfg /var/lib/pki/rhcs10-RSA-RootCA/ca/conf/CS.cfg.bak.<date>
7.3.8.1.1. 设置基于文件的发布者: crlFilePublisher 复制链接链接已复制到粘贴板!
本节中的配置创建基于文件的 CRL 发布程序,名为 crlFilePublisher。正确设置后,CRL 以 DER 格式保存在 /var/lib/pki/rhcs10-RSA-RootCA/crl 目录中。
创建 CRL 目录以发布基于文件的分区 CRL:
# mkdir /var/lib/pki/rhcs10-RSA-RootCA/crl # chown pkiuser.pkiuser /var/lib/pki/rhcs10-RSA-RootCA/crl在 CA 的
CS.cfg中添加以下内容:ca.publish.publisher.instance.crlFilePublisher.Filename.b64=false ca.publish.publisher.instance.crlFilePublisher.Filename.der=true ca.publish.publisher.instance.crlFilePublisher.crlLinkExt=crl ca.publish.publisher.instance.crlFilePublisher.directory=/var/lib/pki/rhcs10-RSA-RootCA/crl ca.publish.publisher.instance.crlFilePublisher.latestCrlLink=true ca.publish.publisher.instance.crlFilePublisher.maxAge=0 ca.publish.publisher.instance.crlFilePublisher.maxFullCRLs=0 ca.publish.publisher.instance.crlFilePublisher.pluginName=FileBasedPublisher ca.publish.publisher.instance.crlFilePublisher.timeStamp=LocalTime ca.publish.publisher.instance.crlFilePublisher.zipCRLs=false ca.publish.publisher.instance.crlFilePublisher.zipLevel=9
7.3.8.1.2. 设置基于文件的发布规则:FileCrlRule 复制链接链接已复制到粘贴板!
本节中的配置创建名为 FileCrlRule 的基于文件的发布规则。predicate 指定到名为 ServerCertCRL 的分区 CRL 的发布点(在 第 7.3.8.1.4 节 “为通过配置集发布的证书设置 CRL-partitioning”中定义)。
在 CA 的
CS.cfg中添加以下内容:ca.publish.rule.instance.FileCrlRule.enable=true ca.publish.rule.instance.FileCrlRule.mapper=NoMap ca.publish.rule.instance.FileCrlRule.pluginName=Rule ca.publish.rule.instance.FileCrlRule.predicate=issuingPointId==ServerCertCRL ca.publish.rule.instance.FileCrlRule.publisher=crlFilePublisher ca.publish.rule.instance.FileCrlRule.type=crl
7.3.8.1.3. 修改基于 LDAP 的发布规则:LdapCrlRule 复制链接链接已复制到粘贴板!
此配置明确将 LdapCrlRule predicate 设置为 master (full) CRL。master CRL 持续提供给 OCSP 响应程序,以进行正确的 OCSP 支持。
修改 CA 的
CS.cfg中的以下内容:ca.publish.rule.instance.LdapCrlRule.predicate=issuingPointId==MasterCRL
7.3.8.1.4. 为通过配置集发布的证书设置 CRL-partitioning 复制链接链接已复制到粘贴板!
本节中的配置演示了如何将 CRL 分区到上面定义的 FileCrlRule 中使用的一个较小的子集。CRL 由在 profileList 参数中指定的证书注册配置文件进行分区。以逗号分隔的列表可用于多个配置集(例如,caCMCserverCertWithCRLDP.cfg 和 caCMCECserverCertWithCRLDP.cfg)。
在 CA 的
CS.cfg中添加以下内容:ca.crl.ServerCertCRL.allowExtensions=true ca.crl.ServerCertCRL.alwaysUpdate=false ca.crl.ServerCertCRL.autoUpdateInterval=240 ca.crl.ServerCertCRL.caCertsOnly=false ca.crl.ServerCertCRL.cacheUpdateInterval=15 ca.crl.ServerCertCRL.class=com.netscape.ca.CRLIssuingPoint ca.crl.ServerCertCRL.dailyUpdates=1:00 ca.crl.ServerCertCRL.description=CA's Certificate Revocation List containing certificates issued via the caCMCserverCertWithCRLDP and caCMCECserverCertWithCRLDP enrollment profile ca.crl.ServerCertCRL.enable=true ca.crl.ServerCertCRL.enableCRLCache=false ca.crl.ServerCertCRL.enableCRLUpdates=true ca.crl.ServerCertCRL.enableCacheRecovery=true ca.crl.ServerCertCRL.enableCacheTesting=false ca.crl.ServerCertCRL.enableDailyUpdates=true ca.crl.ServerCertCRL.enableUpdateInterval=true ca.crl.ServerCertCRL.extendedNextUpdate=true ca.crl.ServerCertCRL.extension.AuthorityInformationAccess.accessLocation0="" ca.crl.ServerCertCRL.extension.AuthorityInformationAccess.accessLocationType0=URI ca.crl.ServerCertCRL.extension.AuthorityInformationAccess.accessMethod0=caIssuers ca.crl.ServerCertCRL.extension.AuthorityInformationAccess.class=com.netscape.cms.crl.CMSAuthInfoAccessExtension ca.crl.ServerCertCRL.extension.AuthorityInformationAccess.critical=false ca.crl.ServerCertCRL.extension.AuthorityInformationAccess.enable=false ca.crl.ServerCertCRL.extension.AuthorityInformationAccess.numberOfAccessDescriptions=1 ca.crl.ServerCertCRL.extension.AuthorityInformationAccess.type=CRLExtension ca.crl.ServerCertCRL.extension.AuthorityKeyIdentifier.class=com.netscape.cms.crl.CMSAuthorityKeyIdentifierExtension ca.crl.ServerCertCRL.extension.AuthorityKeyIdentifier.critical=false ca.crl.ServerCertCRL.extension.AuthorityKeyIdentifier.enable=false ca.crl.ServerCertCRL.extension.AuthorityKeyIdentifier.type=CRLExtension ca.crl.ServerCertCRL.extension.CRLNumber.class=com.netscape.cms.crl.CMSCRLNumberExtension ca.crl.ServerCertCRL.extension.CRLNumber.critical=false ca.crl.ServerCertCRL.extension.CRLNumber.enable=true ca.crl.ServerCertCRL.extension.CRLNumber.type=CRLExtension ca.crl.ServerCertCRL.extension.CRLReason.class=com.netscape.cms.crl.CMSCRLReasonExtension ca.crl.ServerCertCRL.extension.CRLReason.critical=false ca.crl.ServerCertCRL.extension.CRLReason.enable=true ca.crl.ServerCertCRL.extension.CRLReason.type=CRLEntryExtension ca.crl.ServerCertCRL.extension.DeltaCRLIndicator.class=com.netscape.cms.crl.CMSDeltaCRLIndicatorExtension ca.crl.ServerCertCRL.extension.DeltaCRLIndicator.critical=true ca.crl.ServerCertCRL.extension.DeltaCRLIndicator.enable=false ca.crl.ServerCertCRL.extension.DeltaCRLIndicator.type=CRLExtension ca.crl.ServerCertCRL.extension.FreshestCRL.class=com.netscape.cms.crl.CMSFreshestCRLExtension ca.crl.ServerCertCRL.extension.FreshestCRL.critical=false ca.crl.ServerCertCRL.extension.FreshestCRL.enable=false ca.crl.ServerCertCRL.extension.FreshestCRL.numPoints=0 ca.crl.ServerCertCRL.extension.FreshestCRL.pointName0="" ca.crl.ServerCertCRL.extension.FreshestCRL.pointType0="" ca.crl.ServerCertCRL.extension.FreshestCRL.type=CRLExtension ca.crl.ServerCertCRL.extension.InvalidityDate.class=com.netscape.cms.crl.CMSInvalidityDateExtension ca.crl.ServerCertCRL.extension.InvalidityDate.critical=false ca.crl.ServerCertCRL.extension.InvalidityDate.enable=true ca.crl.ServerCertCRL.extension.InvalidityDate.type=CRLEntryExtension ca.crl.ServerCertCRL.extension.IssuerAlternativeName.class=com.netscape.cms.crl.CMSIssuerAlternativeNameExtension ca.crl.ServerCertCRL.extension.IssuerAlternativeName.critical=false ca.crl.ServerCertCRL.extension.IssuerAlternativeName.enable=false ca.crl.ServerCertCRL.extension.IssuerAlternativeName.name0="" ca.crl.ServerCertCRL.extension.IssuerAlternativeName.nameType0="" ca.crl.ServerCertCRL.extension.IssuerAlternativeName.numNames=0 ca.crl.ServerCertCRL.extension.IssuerAlternativeName.type=CRLExtension ca.crl.ServerCertCRL.extension.IssuingDistributionPoint.class=com.netscape.cms.crl.CMSIssuingDistributionPointExtension ca.crl.ServerCertCRL.extension.IssuingDistributionPoint.critical=true ca.crl.ServerCertCRL.extension.IssuingDistributionPoint.enable=false ca.crl.ServerCertCRL.extension.IssuingDistributionPoint.indirectCRL=false ca.crl.ServerCertCRL.extension.IssuingDistributionPoint.onlyContainsCACerts=false ca.crl.ServerCertCRL.extension.IssuingDistributionPoint.onlyContainsUserCerts=false ca.crl.ServerCertCRL.extension.IssuingDistributionPoint.onlySomeReasons="" ca.crl.ServerCertCRL.extension.IssuingDistributionPoint.pointName= ca.crl.ServerCertCRL.extension.IssuingDistributionPoint.pointType= ca.crl.ServerCertCRL.extension.IssuingDistributionPoint.type=CRLExtension ca.crl.ServerCertCRL.includeExpiredCerts=false ca.crl.ServerCertCRL.includeExpiredCertsOneExtraTime=false ca.crl.ServerCertCRL.minUpdateInterval=0 ca.crl.ServerCertCRL.nextAsThisUpdateExtension=0 ca.crl.ServerCertCRL.nextUpdateGracePeriod=0 ca.crl.ServerCertCRL.profileCertsOnly=true ca.crl.ServerCertCRL.profileList=caCMCserverCertWithCRLDP,caCMCECserverCertWithCRLDP ca.crl.ServerCertCRL.publishOnStart=false ca.crl.ServerCertCRL.saveMemory=false ca.crl.ServerCertCRL.signingAlgorithm=SHA256withRSA ca.crl.ServerCertCRL.updateSchema=1
对于 ECC CA,将以下内容设置为 SHA512withEC :
ca.crl.ServerCertCRL.signingAlgorithm=SHA512withEC
7.3.8.2. 在 CA 中设置 CRL HTTP 服务 复制链接链接已复制到粘贴板!
由 CRL 分发点提供的 CRL 发布到一个文件(请参阅上面的章节)。此文件由非 SSL Tomcat 服务提供,我们添加到 CA 的 server.xml 中,如下所示:
在文件
/var/lib/pki/rhcs10-RSA-RootCA/conf/server.xml文件中的Catalina服务前 添加以下CRL服务:<Service name="CRL"> <Connector port="8085" protocol="HTTP/1.1" connectionTimeout="80000" maxParameterCount="1000" name="Unsecure" maxHttpHeaderSize="8192" acceptCount="100" maxThreads="15" minSpareThreads="25" enableLookups="false" disableUploadTimeout="true"/> <Engine name="CRL" defaultHost="localhost"> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_crl_access_log" suffix=".txt" pattern="common"/> </Host> </Engine> </Service>在以上 CRL 服务中,选择一个尚未使用的连接器端口号。例如,如果 root CA 的 HTTP 端口为 8080,则选择 8085。确保为 SELinux 和防火墙添加了端口,例如:
# semanage port -a -t http_port_t -p tcp 8085 # firewall-cmd --permanent --add-port=8085/tcp # firewall-cmd --reload注意如果您的所选端口已预先使用另一个 SELinux 上下文分配,您会看到类似如下的错误消息:
ValueError: Port tcp/8085 already defined您还可以使用以下命令搜索并找出 CRL HTTP 端口是否已预先分配:
# semanage port -l | grep <port>我们建议您选择另一个端口。但是,如果要使用相同的端口,您可以执行以下操作:
# semanage port -m -t http_port_t -p tcp 8085服务器重启时,如果不存在,则会在 CA 的 conf 目录下创建目录 CRL/localhost。但是,要准备添加
crl.xml文件,请执行以下操作:# mkdir -p /var/lib/pki/rhcs10-RSA-RootCA/conf/CRL/localhost # chown -R pkiuser:pkiuser /var/lib/pki/rhcs10-RSA-RootCA/conf/CRL/localhost在
/var/lib/pki/rhcs10-RSA-RootCA/conf/CRL/localhost下创建一个crl.xml文件,并添加以下内容:<Context docBase="/var/lib/pki/rhcs10-RSA-RootCA/crl"> <Resources allowLinking="true" cachingAllowed="false" /> </Context>为
crl.xml文件设置user:group所有权:chown pkiuser:pkiuser /var/lib/pki/rhcs10-RSA-RootCA/conf/CRL/localhost/crl.xml
注册配置集中设置的 CRL 分发点如下所示(请参阅下一部分): http://rhcs10.example.com:8085/crl/ServerCertCRL.crl
仅为较小的 CRL 发布或撤销证书,才建议基于文件的 CRL。只有在需要时才建议使用它,比如在本节中描述的 CA 启动设置的情况。
7.3.8.3. 使用 CRL 分发点的注册配置集配置 复制链接链接已复制到粘贴板!
启用所需的配置集,使其包含 CRL 分发点。这些配置集与上述部分中配置对应的配置集。
在
/var/lib/pki/<ca/profiles/ca/profiles/ca/profiles/ca/profiles/ca/profiles/ca/profiles/ca/ 目录中打开配置集(用于注册 RSA 密钥),如下所示:caCMCserverCertWithCRLDP.cfg# vi /var/lib/pki/rhcs10-RSA-RootCA/ca/profiles/ca/caCMCserverCertWithCRLDP.cfg … enable=true … policyset.serverCertSet.10.default.params.crlDistPointsPointName_0=http://rhcs10.example.com:8085/crl/ServerCertCRL.crl …打开
/var/lib/pki/<ca 实例目录/ca/profiles/ca/profiles/ca/profiles/ca/profiles/ca/profiles/ca/ 目录中的(用于注册 ECC 密钥),如下所示:caCMCECserverCertWithCRLDP.cfg# vi /var/lib/pki/rhcs10-ECC-RootCA/ca/profiles/ca/caCMCECserverCertWithCRLDP.cfg … enable=true … policyset.serverCertSet.10.default.params.crlDistPointsPointName_0=http://rhcs10.example.com:20085/crl/ServerCertCRL.crl …设置 user:group 所有权:
# chown -R pkiuser:pkiuser /var/lib/pki/rhcs10-RSA-RootCA/ca/profiles/ca/caCMCserverCertWithCRLDP.cfg # chown -R pkiuser:pkiuser /var/lib/pki/rhcs10-RSA-RootCA/ca/profiles/ca/caCMCECserverCertWithCRLDP.cfg在 CA 的
CS.cfg中注册一个新的配置集:为每个配置集添加以下行:
profile.caCMCserverCertWithCRLDP.class_id=caEnrollImpl profile.caCMCserverCertWithCRLDP.config=/var/lib/pki/rhcs10-RSA-RootCA/ca/profiles/ca/caCMCserverCertWithCRLDP.cfg profile.caCMCECserverCertWithCRLDP.class_id=caEnrollImpl profile.caCMCECserverCertWithCRLDP.config=/var/lib/pki/rhcs10-RSA-RootCA/ca/profiles/ca/caCMCECserverCertWithCRLDP.cfg编辑
profile.list条目,以添加两个新配置文件。例如:profile.list=caCMCserverCertWithCRLDP,caCMCECserverCertWithCRLDP,acmeServerCert,caCMCserverCert,caCMCECserverCert, …
7.3.8.4. 设置以更直接的 CRL 更新 复制链接链接已复制到粘贴板!
由于服务器证书通常不会撤销,因此最好在撤销时立即更新 CRL。编辑 CA 的 CS.cfg :
ca.crl.ServerCertCRL.alwaysUpdate=true
7.3.8.5. 更新 CA 配置后启动 CA 复制链接链接已复制到粘贴板!
配置完成后,启动 CA:
# pki-server start rhcs10-RSA-RootCA
当 CA 的目录服务器 Server-Cert 被正确替换后,将指示验证 第 7.5.1 节 “替换临时 DS 证书(RootCA)” 末尾的 CRL 分发点设置。