第 15 章 配置证书配置文件
作为 CA 的安装过程的一部分,可以通过修改配置集的配置文件直接修改证书注册配置文件。安装时默认配置集存在默认文件;当需要新配置集时,将创建新的配置集配置文件。配置文件存储在 CA 配置文件目录 instance_directory/ca/profiles/ca/
中,如 /var/lib/pki/pki-ca/ca/profiles/ca/
。该文件名为 profile_name.cfg
。可以在这些配置集配置文件中设置或修改配置集规则的所有参数。配置集规则可以是输入、输出、身份验证、授权、默认值和约束。
CA 证书的注册配置集位于 /var/lib/pki/ instance_name/ca/conf
目录中,名称为 dc profile
。
出于审核原因,仅在部署前 CA 安装过程中使用此方法。
编辑配置文件后重新启动服务器,以使更改生效。
15.1. 配置非 CA 系统证书配置文件
15.1.1. 配置集配置参数
配置集规则的所有参数 - 默认值、输入、输出和约束 - 在单个策略集中配置。为配置集设置的策略具有名称 policyset.policyName.policyNumber
。例如:
policyset.cmcUserCertSet.6.constraint.class_id=noConstraintImpl policyset.cmcUserCertSet.6.constraint.name=No Constraint policyset.cmcUserCertSet.6.default.class_id=userExtensionDefaultImpl policyset.cmcUserCertSet.6.default.name=User Supplied Key Default policyset.cmcUserCertSet.6.default.params.userExtOID=2.5.29.15
常见配置集配置参数在 表 15.1 “配置文件参数” 中进行了描述。
参数 | 描述 |
---|---|
desc | 提供证书配置文件的自由文本描述,该配置文件显示在终端实体页面中。例如,desc=This certificate profile 用于使用代理身份验证注册服务器证书。 |
enable | 设置配置集是否已启用,因此可通过终端实体页面访问。例如:enable=true。 |
auth.instance_id |
设置身份验证管理器插件,用来验证通过配置集提交的证书请求。要进行自动注册,如果身份验证成功,CA 会立即发布证书。如果身份验证失败或者没有指定身份验证插件,则会将请求排队,来由代理手动批准。例如,auth.instance_id=CMCAuth。身份验证方法必须是来自 |
authz.acl | 指定授权约束。大多数情况下,我们用来设置组评估 ACL。例如,此 caCMCUserCert 参数要求 CMC 请求的签名者属于证书管理器代理组: authz.acl=group="Certificate Manager Agents" 在基于目录的用户证书续订中,此选项用于确保原始请求者和当前验证的用户是同一个。
在评估授权前,实体必须验证(绑定或登录到系统)。指定的授权方法必须是 |
name | 指定配置集的名称。例如,name=Agent-Authenticated Server Certificate Enrollment。此名称显示在最终用户注册或续订页面中。 |
input.list | 按名称列出配置集允许的输入。例如,input.list=i1,i2。 |
input.input_id.class_id | 按输入 ID (在 input.list中列出的输入名称)提供输入的 java 类名称。例如: input.i1.class_id=cmcCertReqInputImpl。 |
output.list | 按名称列出配置集的可能输出格式。例如 output.list=o1。 |
output.output_id.class_id | 给出在 output.list 中名为 的输出格式的 java 类名称。例如: output.o1.class_id=certOutputImpl。 |
policyset.list | 列出配置的配置集规则。对于双证书,一组规则适用于签名密钥,另一组规则适用于加密密钥。单个证书只使用一组配置集规则。例如,policyset.list=serverCertSet。 |
policyset.policyset_id.list | 根据策略 ID 号为配置集配置的策略集中列出策略集中的策略,按照评估它们的顺序列出。例如: policyset.serverCertSet.list=1,2,3,4,5,6,7,8。 |
policyset.[rep]_policyset_id.policy_number._constraint.class_id | 为配置集规则中配置的默认约束插件集提供 java 类名称。例如,policyset.serverCertSet.1.constraint.class_id=subjectNameConstraintImpl。 |
policyset.[rep]_policyset_id.policy_number._constraint.name | 提供用户定义的约束名称。例如,policyset.serverCertSet.1.constraint.name=Subject Name Constraint。 |
policyset.policyset_id.policy_number._constraint.params.[rep]_attribute | 为约束的允许的属性指定值。可能的属性因约束类型而异。例如,policyset.serverCertSet.1.constraint.params.pattern=CN=adtrust。 |
policyset.[rep]_policyset_id.policy_number._default.class_id | 给出配置文件规则中默认集的 java 类名称。For example, policyset.serverCertSet.1.default.class_id=userSubjectNameDefaultImpl |
policyset.[rep]_policyset_id.policy_number._default.name | 给出用户定义的默认值的名称。例如,policyset.serverCertSet.1.default.name=Subject Name Default |
policyset.policyset_id.policy_number._default.params.[rep]_attribute | 为默认值的允许的属性指定值。可能的属性因默认类型而异。例如,policyset.serverCertSet.1.default.params.name=CN=(Name)$request.requestor_name$。 |
15.1.2. 在文件系统中直接修改证书扩展
更改限制会更改可以提供的信息类型的限制。更改 defaults 和 constraints 也可以添加、删除或修改证书请求接受或所需的扩展。
例如,默认的 caFullCMCUserCert 配置集被设置为从请求中的信息创建 Key Usage 扩展。
policyset.cmcUserCertSet.6.constraint.class_id=keyUsageExtConstraintImpl policyset.cmcUserCertSet.6.constraint.name=Key Usage Extension Constraint policyset.cmcUserCertSet.6.constraint.params.keyUsageCritical=true policyset.cmcUserCertSet.6.constraint.params.keyUsageCrlSign=false policyset.cmcUserCertSet.6.constraint.params.keyUsageDataEncipherment=false policyset.cmcUserCertSet.6.constraint.params.keyUsageDecipherOnly=false policyset.cmcUserCertSet.6.constraint.params.keyUsageDigitalSignature=true policyset.cmcUserCertSet.6.constraint.params.keyUsageEncipherOnly=false policyset.cmcUserCertSet.6.constraint.params.keyUsageKeyAgreement=false policyset.cmcUserCertSet.6.constraint.params.keyUsageKeyCertSign=false policyset.cmcUserCertSet.6.constraint.params.keyUsageKeyEncipherment=true policyset.cmcUserCertSet.6.constraint.params.keyUsageNonRepudiation=true policyset.cmcUserCertSet.6.default.class_id=keyUsageExtDefaultImpl policyset.cmcUserCertSet.6.default.name=Key Usage Default policyset.cmcUserCertSet.6.default.params.keyUsageCritical=true policyset.cmcUserCertSet.6.default.params.keyUsageCrlSign=false policyset.cmcUserCertSet.6.default.params.keyUsageDataEncipherment=false policyset.cmcUserCertSet.6.default.params.keyUsageDecipherOnly=false policyset.cmcUserCertSet.6.default.params.keyUsageDigitalSignature=true policyset.cmcUserCertSet.6.default.params.keyUsageEncipherOnly=false policyset.cmcUserCertSet.6.default.params.keyUsageKeyAgreement=false policyset.cmcUserCertSet.6.default.params.keyUsageKeyCertSign=false policyset.cmcUserCertSet.6.default.params.keyUsageKeyEncipherment=true policyset.cmcUserCertSet.6.default.params.keyUsageNonRepudiation=true
默认被更新为允许用户提供的密钥扩展:
policyset.cmcUserCertSet.6.default.class_id=userExtensionDefaultImpl policyset.cmcUserCertSet.6.default.name=User Supplied Key Default policyset.cmcUserCertSet.6.default.params.userExtOID=2.5.29.15
这会将服务器设置为在证书请求中接受扩展 OID 2.5.29.15
。
其他限制和默认值可类似更改。确保包含适当默认值所需的限制,在需要不同约束时更改了默认值,并且默认只使用允许的约束。如需更多信息,请参阅 Red Hat Certificate System Administration Guide 中的 Defaults Reference 部分和约束 参考部分。
15.1.2.1. 密钥使用和扩展密钥使用一致性
Red Hat Certificate System 为管理员提供了一个灵活的基础架构,可创建自定义注册配置文件来满足其环境的要求。但是,配置集不允许发布违反 RFC 5280 中定义的要求的证书。当创建密钥用法(KU)和扩展的密钥使用情况(EKU)扩展时,务必要确保根据 4.2.1.12 保持两个扩展之间的一致性。RFC 5280 的扩展密钥使用.
有关 KU 扩展的详情,请参考:
下表提供了将一致的密钥使用位映射到扩展的密钥用法扩展指南:
用途/扩展的密钥用法 | 密钥用法 |
---|---|
TLS 服务器身份验证命令
|
|
TLS 客户端(Mutual)身份验证
|
|
代码签名
|
|
电子邮件保护
|
|
OCSP 响应签名
|
|
下面显示了两个不一致的 EKU/KU 示例:
用于 OCSP 响应签名的注册配置集包含扩展密钥使用
id-kp-OCSPSigning
,但使用keyEncipherment
密钥使用位:policyset.ocspCertSet.6.default.class_id=keyUsageExtDefaultImpl policyset.ocspCertSet..6.default.name=Key Usage Default policyset.ocspCertSet..6.default.params.keyUsageCritical=true policyset.ocspCertSet..6.default.params.keyUsageCrlSign=false policyset.ocspCertSet..6.default.params.keyUsageDataEncipherment=false policyset.ocspCertSet..6.default.params.keyUsageDecipherOnly=false policyset.ocspCertSet..6.default.params.keyUsageDigitalSignature=true policyset.ocspCertSet..6.default.params.keyUsageEncipherOnly=false policyset.ocspCertSet..6.default.params.keyUsageKeyAgreement=false policyset.ocspCertSet..6.default.params.keyUsageKeyCertSign=false policyset.ocspCertSet..6.default.params.keyUsageKeyEncipherment=true policyset.ocspCertSet..6.default.params.keyUsageNonRepudiation=true policyset.ocspCertSet.7.constraint.params.exKeyUsageOIDs=1.3.6.1.5.5.7.3.9 policyset.ocspCertSet.7.default.class_id=extendedKeyUsageExtDefaultImpl policyset.ocspCertSet.7.default.name=Extended Key Usage Default policyset.ocspCertSet.7.default.params.exKeyUsageCritical=false policyset.ocspCertSet.7.default.params.exKeyUsageOIDs=1.3.6.1.5.5.7.3.9
用于 TLS 服务器身份验证的注册配置集包含扩展密钥
使用 id-kp-serverAuth
,但使用 CRL 签名密钥使用位:policyset.serverCertSet.6.default.name=Key Usage Default policyset.serverCertSet.6.default.params.keyUsageCritical=true policyset.serverCertSet.6.default.params.keyUsageDigitalSignature=true policyset.serverCertSet.6.default.params.keyUsageNonRepudiation=false policyset.serverCertSet.6.default.params.keyUsageDataEncipherment=true policyset.serverCertSet.6.default.params.keyUsageKeyEncipherment=false policyset.serverCertSet.6.default.params.keyUsageKeyAgreement=true policyset.serverCertSet.6.default.params.keyUsageKeyCertSign=false policyset.serverCertSet.6.default.params.keyUsageCrlSign=true policyset.serverCertSet.6.default.params.keyUsageEncipherOnly=false policyset.serverCertSet.6.default.params.keyUsageDecipherOnly=false policyset.cmcUserCertSet.7.default.class_id=extendedKeyUsageExtDefaultImpl policyset.cmcUserCertSet.7.default.name=Extended Key Usage Extension Default policyset.cmcUserCertSet.7.default.params.exKeyUsageCritical=false policyset.serverCertSet.7.default.params.exKeyUsageOIDs=1.3.6.1.5.5.7.3.1
- Red Hat Certificate System Administration Guide 中的 Extended Key Usage Extension Constraint 部分。
- Red Hat Certificate System Administration Guide 中的 keyUsage 部分。
有关 EKU 扩展的详情,请参考:
- Red Hat Certificate System Administration Guide 中的 Extended Key Usage Extension Constraint 部分。
- Red Hat Certificate System Administration Guide 中的 extKeyUsage 部分。
15.1.2.2. 配置跨对配置集
跨对证书是不同的 CA 签名证书,它们建立一个信任关系,其中来自这两个不同 PKI 的实体将相互信任。两个合作伙伴 CA 将其他 CA 签名证书存储在其数据库中,因此其他 PKI 中发布的所有证书都不被信任并识别。
证书系统支持的两个扩展可用于建立这样的信任关系(跨认证):
-
证书策略扩展(
CertificatePoliciesExtension
)指定证书所属的术语,这通常对每个 PKI 是唯一的。 -
Policy Mapping Extension (
PolicyMappingExtension
)通过映射两个环境的证书配置文件来封装两个 PKI 之间的信任。
发布跨对证书需要证书策略扩展,在 Red Hat Certificate System Administration Guide 中的 certificatePoliciesExt anex 所述。
为确保发布的证书包含 CertificatePoliciesExtension,注册配置集需要包含适当的策略规则,例如:
policyset.userCertSet.p7.constraint.class_id=noConstraintImpl policyset.userCertSet.p7.constraint.name=No Constraint policyset.userCertSet.p7.default.class_id=certificatePoliciesExtDefaultImpl policyset.userCertSet.p7.default.name=Certificate Policies Extension Default policyset.userCertSet.p7.default.params.Critical=false policyset.userCertSet.p7.default.params.PoliciesExt.num=1 policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.enable=true policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.policyId=1.1.1.1 policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.CPSURI.enable=false policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.CPSURI.value= policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.usernotice.enable=false policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.usernotice.explicitText.value= policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.usernotice.noticeReference.noticeNumbers= policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.usernotice.noticeReference.organization=
本例中使用注册配置文件发布的证书将包含以下信息:
Identifier: Certificate Policies: - 2.5.29.32 Critical: no Certificate Policies: Policy Identifier: 1.1.1.1
有关使用跨对证书的更多信息,请参阅 红帽认证系统 管理指南中的使用跨 证书部分。
有关发布跨对证书的更多信息,请参阅 Red Hat Certificate System Administration Guide 中的 发布跨 证书部分。
15.1.3. 在文件系统中直接添加配置集输入
CA 配置集/ca
目录中的证书配置文件包含该特定证书配置文件的输入信息。输入是终端页面注册表单中的字段。有一个参数 input.list
,它列出了该配置集中包含的输入。其他参数定义输入;它们通过格式输入来标识 。ID
为。例如,这会在配置集中添加通用输入:
input.list=i1,i2,i3,i4 ... input.i4.class_id=genericInputImpl input.i4.params.gi_display_name0=Name0 input.i4.params.gi_display_name1=Name1 input.i4.params.gi_display_name2=Name2 input.i4.params.gi_display_name3=Name3 input.i4.params.gi_param_enable0=true input.i4.params.gi_param_enable1=true input.i4.params.gi_param_enable2=true input.i4.params.gi_param_enable3=true input.i4.params.gi_param_name0=gname0 input.i4.params.gi_param_name1=gname1 input.i4.params.gi_param_name2=gname2 input.i4.params.gi_param_name3=gname3 input.i4.params.gi_num=4
有关哪些输入或表单字段可用的更多信息,请参阅 Red Hat Certificate System Administration Guide 中的 Input Reference 部分。