第 3 章 为颁发证书(证书配置文件)进行规则
证书系统提供了一个可自定义的框架,用于应用传入证书请求的策略,并控制输入请求类型和输出证书类型;它们称为 证书配置文件。证书配置文件在证书管理器端点页面中设置证书注册表单所需的信息。本章论述了如何配置证书配置文件。
3.1. 关于证书配置文件
证书配置文件定义了与发布特定类型的证书相关的所有内容,包括身份验证方法、授权方法、默认证书内容、内容值的限制,以及证书配置文件的输入和输出内容。注册和续订请求被提交到证书配置文件,然后受到该证书配置文件中设置的默认值和约束。这些限制是否通过与证书配置文件关联的输入表单提交,还是通过其他方式提交。从证书配置文件请求发布的证书包含默认值所需的内容以及默认参数所需的信息。约束提供证书中允许的内容的规则。
有关使用和自定义证书配置文件的详情,请参考 第 3.2 节 “设置证书配置文件”。
证书系统包含一组默认配置文件。虽然创建默认配置集来满足大多数部署,但每个部署都可以添加自己的新证书配置文件或修改现有的配置文件。
- 身份验证。每个认证配置文件中都可以指定身份验证方法。
- 授权。每个认证配置文件中都可以指定一个授权方法。
- 配置集输入。配置集输入是请求证书时提交到 CA 的参数和值。配置集输入包括证书请求的公钥,以及证书的最终实体所请求的证书主题名称。
- 配置集输出。配置集输出是参数和值,用于指定向最终实体提供证书的格式。当请求成功时,配置集输出是 CMC 响应,其中包含 PKCS the7 证书链。
- 证书内容。每个证书定义内容信息,如为其分配的实体名称(主题名称)、其签名算法及其有效期周期。证书中包含的内容在 X.509 标准中定义。使用 X509 标准的版本 3 时,证书也可以包含扩展。有关证书扩展的详情,请参考 ???。有关证书配置文件的所有信息都在配置文件配置文件中配置文件策略的
设置
条目中定义。当同时请求多个证书时,可以在配置文件策略中定义多个设置条目来满足每个证书的需求。每个策略集由多个策略规则组成,每个策略规则描述了证书内容中的一个字段。策略规则可包括以下部分:- 配置集默认值。这些是预定义的参数和允许的值,用于证书中包含的信息。配置集默认包括证书的有效性周期,以及每个发布的证书类型的证书扩展。
- 配置集限制。用于发布证书的约束设置规则或策略。另一方面,配置集限制包括要求证书主题名称至少有一个 CN 组件的规则,将证书的有效性设置为最多 360 天,来定义续订允许的宽限期,或要求 主题altname 扩展始终设为 true。
3.1.1. Enrollment Profile
表 11.1 中更详细地列出了定义输入、输出和策略集的每个配置集的参数。Red Hat Certificate System Planning, Installation and Deployment Guide 中的 profile 配置文件参数。
配置集通常包含输入、策略集和输出,如 例 3.1 “caCMCUserCert Profile 示例” 中的 caUserCert 配置集所示。
例 3.1. caCMCUserCert Profile 示例
证书配置文件的第一个部分是描述。这将显示名称、长描述、是否启用它以及是否启用了谁。
desc=This certificate profile is for enrolling user certificates by using the CMC certificate request with CMC Signature authentication. visible=true enable=true enableBy=admin name=Signed CMC-Authenticated User Certificate Enrollment
注意
此配置集中缺少
auth.instance_id=
条目意味着使用此配置集,不需要进行身份验证来提交注册请求。但是,需要由授权的 CA 代理手动批准才能获得颁发。
接下来,配置集列出了配置集所需的所有输入:
input.list=i1 input.i1.class_id=cmcCertReqInputImp
对于 caCMCUserCert 配置集,这定义了证书请求类型,即 CMC。
接下来,配置集必须定义输出,这意味着最终证书的格式。唯一可用的是 certOutputImpl,这会导致 CMC 响应返回给请求者(如果成功)。
output.list=o1 output.o1.class_id=certOutputImpl
最后 - 最大配置块是为配置集设置的策略。Policy set 列出应用于最终证书的所有设置,如其有效期、其续订设置以及证书可用于的操作。policyset.list 参数标识应用到一个证书的策略的块名称; policyset.userCertSet.list 列出了要应用的单个策略。
例如,第六个策略根据策略中的配置,在证书中自动填充密钥用法扩展。它通过设置限制来设置默认值,并要求证书使用这些默认值:
policyset.list=userCertSet policyset.userCertSet.list=1,10,2,3,4,5,6,7,8,9 ... policyset.userCertSet.6.constraint.class_id=keyUsageExtConstraintImpl policyset.userCertSet.6.constraint.name=Key Usage Extension Constraint policyset.userCertSet.6.constraint.params.keyUsageCritical=true policyset.userCertSet.6.constraint.params.keyUsageDigitalSignature=true policyset.userCertSet.6.constraint.params.keyUsageNonRepudiation=true policyset.userCertSet.6.constraint.params.keyUsageDataEncipherment=false policyset.userCertSet.6.constraint.params.keyUsageKeyEncipherment=true policyset.userCertSet.6.constraint.params.keyUsageKeyAgreement=false policyset.userCertSet.6.constraint.params.keyUsageKeyCertSign=false policyset.userCertSet.6.constraint.params.keyUsageCrlSign=false policyset.userCertSet.6.constraint.params.keyUsageEncipherOnly=false policyset.userCertSet.6.constraint.params.keyUsageDecipherOnly=false policyset.userCertSet.6.default.class_id=keyUsageExtDefaultImpl policyset.userCertSet.6.default.name=Key Usage Default policyset.userCertSet.6.default.params.keyUsageCritical=true policyset.userCertSet.6.default.params.keyUsageDigitalSignature=true policyset.userCertSet.6.default.params.keyUsageNonRepudiation=true policyset.userCertSet.6.default.params.keyUsageDataEncipherment=false policyset.userCertSet.6.default.params.keyUsageKeyEncipherment=true policyset.userCertSet.6.default.params.keyUsageKeyAgreement=false policyset.userCertSet.6.default.params.keyUsageKeyCertSign=false policyset.userCertSet.6.default.params.keyUsageCrlSign=false policyset.userCertSet.6.default.params.keyUsageEncipherOnly=false policyset.userCertSet.6.default.params.keyUsageDecipherOnly=false ...
3.1.2. 证书扩展:默认和约束
扩展配置附加信息,以包含在证书或规则中有关如何使用证书。这些扩展可以在证书请求中指定,或者从配置集默认定义中获取,然后根据约束强制执行。
如果请求中没有设置证书扩展,则通过添加 默认值,在配置集中添加或识别证书扩展。例如,基本限制扩展标识证书是否为 CA 签名证书、可以在 CA 下配置的最大从属 CA 数,以及扩展是否至关重要(必需的):
policyset.caCertSet.5.default.name=Basic Constraints Extension Default policyset.caCertSet.5.default.params.basicConstraintsCritical=true policyset.caCertSet.5.default.params.basicConstraintsIsCA=true policyset.caCertSet.5.default.params.basicConstraintsPathLen=-1
此外,扩展也可以为证书请求设置所需的值,名为 约束。如果请求的内容与集合约束不匹配,则拒绝请求。约束通常与扩展默认对应,但并不总是始终对应。例如:
policyset.caCertSet.5.constraint.class_id=basicConstraintsExtConstraintImpl policyset.caCertSet.5.constraint.name=Basic Constraint Extension Constraint policyset.caCertSet.5.constraint.params.basicConstraintsCritical=true policyset.caCertSet.5.constraint.params.basicConstraintsIsCA=true policyset.caCertSet.5.constraint.params.basicConstraintsMinPathLen=-1 policyset.caCertSet.5.constraint.params.basicConstraintsMaxPathLen=-1
注意
要允许用户提供的扩展嵌入到证书请求中,并忽略配置集中的系统定义默认值,配置集需要包含 User Supplied Extension Default,如 第 B.1.32 节 “用户 Supplied 扩展默认” 所述。
3.1.3. 输入和输出
输入设置必须提交才能接收证书的信息。这可以是请求者信息、特定格式的证书请求或组织信息。
配置集中配置的输出定义发布的证书的格式。
在证书系统中,通过 注册表单 访问配置文件,该表单可通过终端实体页面访问。(即使客户端(如 TPS )通过这些表单提交注册请求。) 输入然后对应于注册表单中的字段。输出对应于证书检索页面中包含的信息。