第 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 “配置文件参数” 中进行了描述。

表 15.1. 配置文件参数
参数描述

desc

提供证书配置文件的自由文本描述,该配置文件显示在终端实体页面中。例如,desc=This certificate profile 用于使用代理身份验证注册服务器证书。

enable

设置配置集是否已启用,因此可通过终端实体页面访问。例如:enable=true

auth.instance_id

设置身份验证管理器插件,用来验证通过配置集提交的证书请求。要进行自动注册,如果身份验证成功,CA 会立即发布证书。如果身份验证失败或者没有指定身份验证插件,则会将请求排队,来由代理手动批准。例如,auth.instance_id=CMCAuth。身份验证方法必须是来自 CS.cfg 的注册验证实例之一。

authz.acl

指定授权约束。大多数情况下,我们用来设置组评估 ACL。例如,此 caCMCUserCert 参数要求 CMC 请求的签名者属于证书管理器代理组:

authz.acl=group="Certificate Manager Agents"

在基于目录的用户证书续订中,此选项用于确保原始请求者和当前验证的用户是同一个。

在评估授权前,实体必须验证(绑定或登录到系统)。指定的授权方法必须是 CS.cfg 中注册的授权实例之一。

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 服务器身份验证命令

id-kp-serverAuth

digitalSignature、KeyEnciphermentKeyAgreement

TLS 客户端(Mutual)身份验证

id-kp-clientAuth

digitalSignature,keyEncipherment, and/or KeyAgreement

代码签名

id-kp-codeSigning

digitalSignature

电子邮件保护

id-kp-emailProtection

digitalSignature,nonRepudiation, and/or (keyEncipherment or keyAgreement)

OCSP 响应签名

id-kp-OCSPSigning

KeyAgreement and/ 或 nonRepudiation

下面显示了两个不一致的 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 扩展的详情,请参考:

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 部分。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.