向 CA 池添加证书颁发政策
本页介绍了如何向证书颁发机构 (CA) 池添加证书颁发政策。
借助证书颁发政策,您可以指定可包含在已颁发证书中的正文和主题备用名称 (SAN)。您可以在创建 CA 池时指定证书颁发政策,也可以更新现有 CA 池以添加颁发政策。
如需了解详情,请参阅模板和发卡政策概览。
准备工作
确保您拥有 CA Service Operation Manager (
roles/privateca.caManager
) 或 CA Service Admin (roles/privateca.admin
) IAM 角色。如需了解如何向正文授予 IAM 角色,请参阅授予单个角色。
添加证书颁发政策文件
如需向现有 CA 池添加证书颁发政策,请执行以下操作:
控制台
前往 Google Cloud 控制台中的 Certificate Authority Service 页面。
在 CA 池管理器页面上,点击要为其添加证书颁发政策的 CA 池的名称。
在 CA 池页面上,点击
修改。
如需在 CA 池颁发的证书中配置基准值,请执行以下操作:
- 点击切换开关。
- 点击配置基准值。
您可以使用此设置来配置证书中包含的密钥的使用方式。密钥用途选项包括密钥加密、数据加密、证书签名、CRL 签名等。
如需了解详情,请参阅密钥使用情况。
如需定义基本密钥用法,请执行以下操作:
- 可选:如果您想为证书指定基本密钥用途,请在随即显示的窗口中点击切换开关。
- 选中您希望使用密钥的方式对应的复选框。
- 点击下一步。
您可以使用此设置来选择证书中包含的密钥可用于的更精细的场景。这些选项包括服务器身份验证、客户端身份验证、代码签名、电子邮件保护等。
扩展密钥用法使用对象标识符 (OID) 进行定义。如果您未配置扩展密钥用途,则允许所有密钥用途场景。
如需了解详情,请参阅扩展密钥用途。
如需定义扩展密钥用法,请执行以下操作:
- 可选:如需为 CA 池颁发的证书指定扩展密钥用途,请点击切换开关。
- 选中扩展密钥用法场景对应的复选框。
- 点击下一步。
证书中的证书政策扩展用于表示颁发 CA 池遵循的政策。此扩展程序可以包含有关在颁发证书之前如何验证身份、如何撤消证书以及如何确保 CA 池完整性的信息。此扩展程序可帮助您验证 CA 池颁发的证书,并查看证书的使用方式。
如需了解详情,请参阅证书政策。
如需指定用于定义证书使用情况的政策,请执行以下操作:
- 可选:在政策标识符字段中添加政策标识符。
- 点击下一步。
证书中的 AIA 扩展提供以下信息:
- OCSP 服务器的地址,您可以通过该地址查看证书的撤消状态。
- 证书颁发者的访问方法。
如需了解详情,请参阅对授权信息的访问。
如需添加证书中 AIA 扩展字段中显示的 OCSP 服务器,请执行以下操作。以下步骤是可选的。
- 可选:点击添加项。
- 在 Server 网址(服务器网址)字段中,添加 OCSP 服务器的网址。
- 点击完成。
- 点击下一步。
如需配置要在 CA 池颁发的证书中添加的其他自定义扩展,请执行以下操作。以下步骤是可选的。
- 点击添加项。
- 在对象标识符字段中,添加格式为英文句点分隔的数字的有效对象标识符。
- 在 Value 字段中,添加标识符的 base64 编码值。
- 如果该扩展程序至关重要,请选择扩展程序至关重要。
如需保存所有基准值配置,请点击完成。
配置扩展程序限制条件如需禁止将证书请求中的所有扩展添加到已颁发的证书中,请点击该切换开关。
点击该切换开关后,您会看到已知证书扩展字段,您可以使用该字段选择证书扩展。如需选择证书扩展程序,请执行以下操作:
- 可选:点击已知证书扩展字段,然后从菜单中清除不需要的扩展。
- 可选:在自定义扩展字段中,添加您希望添加到 CA 池颁发的证书中的扩展的对象标识符。
如需对 CA 池颁发的证书中的主题和 SAN 配置约束条件,请执行以下操作:
- 可选:如要禁止传递证书请求中的主题,请点击切换开关。
- 可选:如需禁止传递证书请求中的主题备用名称,请点击切换开关。
- 可选:添加通用表达式语言 (CEL) 表达式,对证书主题施加限制。如需了解详情,请参阅 使用 CEL。
- 点击下一步。
如需了解如何在证书颁发政策中配置其他参数,请参阅 IssuancePolicy。
gcloud
如需使用 Google Cloud CLI 向 CA 池添加证书颁发政策,您必须创建一个 YAML 文件,其中描述了 CA 池可以颁发的证书的限制。内容与 IssuancePolicy 相对应。
使用 Cloud Shell 编辑器创建一个包含以下内容的
policy.yaml
文件:identityConstraints: allowSubjectPassthrough: true allowSubjectAltNamesPassthrough: true
其中:
allowSubjectPassthrough
是必填字段。如果allowSubjectPassthrough
字段设置为true
,系统会将主题字段从证书请求复制到已签名证书。否则,系统会舍弃请求的主题。- 如果
allowSubjectAltNamesPassthrough
字段设置为true
,系统会将 SubjectAltNames 扩展从证书请求复制到已签名的证书中。否则,系统会舍弃请求的 SubjectAltNames。
如需使用在上一步中创建的文件更新 CA 池的证书颁发政策,请运行以下命令:
gcloud privateca pools update POOL_NAME \ --issuance-policy FILE_PATH
替换以下内容:
- POOL_NAME:CA 池的名称。
- FILE_PATH:
policy.yaml
文件的路径。
如需详细了解
gcloud privateca pools update
命令,请参阅 gcloud privateca pools update。
受支持的限制
CA Service 支持以下签发政策限制。您可以根据需要组合使用以下限制,以构建自定义证书颁发政策。
限制或强制使用允许的 X.509 值
CA 池可以通过配置 passthrough_extensions 字段来限制证书请求中允许的 X.509 值。
CA 池还可以使用 baseline_values 字段,明确指定要添加到其所有已颁发证书中的 X.509 值,从而覆盖任何请求的值。
CA 池的 baseline_values 值允许指定以下属性:
您也可以同时使用这些选项。
如果您更新 baseline_values
字段的任何部分,相应更新会替换 baseline_values
字段中的所有值。
示例:限制 CA 仅针对双向 TLS (mTLS) 颁发包含 X.509 值的最终实体证书。
policy.yaml
baselineValues: caOptions: isCa: false keyUsage: baseKeyUsage: digitalSignature: true keyEncipherment: true extendedKeyUsage: clientAuth: true serverAuth: true
示例:限制 CA 仅颁发具有基准 AIA OCSP 网址的终端实体代码签名证书。
policy.yaml
baselineValues: caOptions: isCa: false keyUsage: baseKeyUsage: digitalSignature: true extendedKeyUsage: codeSigning: true aiaOcspServers: - "http://foo.bar/revocation" additionalExtensions: - objectId: objectIdPath: - 1 - 2 - 3 critical: false value: "base64 encoded extension value"
如需详细了解最终实体 mTLS 的证书配置文件,请参阅最终实体 mTLS。
限制允许的身份字段
如需限制通过 CA 池颁发的证书的身份,您可以向颁发政策的 identity_constraints 字段添加 Common Expression Language (CEL) 表达式。CEL 表达式允许对证书的主题域名(包括通用名称)和 SAN 施加任意限制。
如需详细了解如何使用 CEL 表达式限制正文和 SAN,请参阅使用 CEL。
示例:允许 CA 仅颁发与指定正文匹配的证书。
policy.yaml
identityConstraints: allowSubjectPassthrough: true allowSubjectAltNamesPassthrough: false celExpression: expression: 'subject.organization == "Example LLC" && subject.country_code in ["US", "UK"]'
celExpression
字段为可选字段。在对证书进行签名之前,使用通用表达式语言 (CEL) 表达式验证已解析的 X.509 主题和 SAN。如需详细了解如何使用 CEL 表达式,请参阅使用 CEL。示例:仅允许 DNS 名称为
us.google.org
或以.google.com
结尾的 SAN。policy.yaml
identityConstraints: allowSubjectPassthrough: false allowSubjectAltNamesPassthrough: true celExpression: expression: 'subject_alt_names.all(san, san.type == DNS && (san.value == "us.google.org" || san.value.endsWith(".google.com")) )'
示例:仅允许 URI 为
https://google.com/webhp
或以spiffe://example-trust-domain-1/ns/namespace1/sa/
开头的 SAN。policy.yaml
identityConstraints: allowSubjectPassthrough: false allowSubjectAltNamesPassthrough: true celExpression: expression: 'subject_alt_names.all(san, san.type == URI && (san.value == "https://google.com/webhp" || san.value.startsWith("spiffe://example-trust-domain-1/ns/namespace1/sa/")) )'
示例:仅允许电子邮件地址为
example@google.com
或以@google.org
结尾的 SAN。policy.yaml
identityConstraints: allowSubjectPassthrough: false allowSubjectAltNamesPassthrough: true celExpression: expression: 'subject_alt_names.all(san, san.type == EMAIL && (san.value == "example@google.com" || san.value.endsWith("@google.org")) )'
示例:仅允许具有特定 OID 和自定义值的自定义 SAN。
policy.yaml
identityConstraints: allowSubjectPassthrough: false allowSubjectAltNamesPassthrough: true celExpression: expression: 'subject_alt_names.all(san, san.type == CUSTOM && san.oid == [1, 2, 3, 4] && san.value == "custom-data" )'
限制已颁发证书的最长有效期
如需限制已颁发证书的有效期,请使用 maximum_lifetime 字段。如果证书的请求有效期大于最长有效期,则证书的有效期会被明确截断。
示例
如需允许的有效期上限为 30 天,请使用以下 policy.yaml
文件:
policy.yaml
maximumLifetime: 2592000s
限制允许的证书颁发模式
您可以通过证书签名请求 (CSR) 或请求值的内嵌说明来请求证书。有些组织可能更倾向于对可使用的选项施加限制,因为后一种方法不需要证明拥有关联的私钥。您可以使用 allowedIssuanceModes 字段设置这些限制。
如需详细了解如何指定从 CA 池请求证书的方式,请参阅 IssuanceModes。
如需详细了解如何申请证书,请参阅创建证书请求。
示例:仅允许 CSR 颁发。
policy.yaml
allowedIssuanceModes:
allowCsrBasedIssuance: True
allowConfigBasedIssuance: False
限制证书请求的公钥算法
如需限制证书可使用的最低密钥长度和公钥算法,您可以使用证书颁发政策 YAML 文件中的 allowedKeyTypes 字段。如果指定此字段,则证书请求的公钥必须与 YAML 文件中列出的某种密钥类型匹配。如果未指定此字段,则可以使用任何密钥,但模数大小小于 2048 位的 RSA 密钥除外。如果您想使用模数大小小于 2048 位的 RSA 密钥,则必须使用证书颁发政策明确允许。
示例:允许使用模数大小介于 3072 位和 4096 位(包括这两个数值)之间的 RSA 密钥,或基于 NIST P-256 曲线的椭圆曲线数字签名算法 (ECDSA) 密钥。
policy.yaml
allowedKeyTypes:
- rsa:
minModulusSize: 3072
maxModulusSize: 4096
- ellipticCurve:
signatureAlgorithm: ECDSA_P256
您可以选择以下椭圆曲线签名算法之一:
EC_SIGNATURE_ALGORITHM_UNSPECIFIED
- 可以使用任何签名算法。ECDSA_P256
- 基于 NIST P-256 曲线的椭圆曲线数字签名。ECDSA_P384
- 基于 NIST P-384 曲线的椭圆曲线数字签名。EDDSA_25519
- 基于曲线 25519 的爱德华曲线数字签名算法,如 RFC 8410 中所述。
后续步骤
- 详细了解证书配置文件。
- 详细了解如何申请证书。
- 了解如何配置 IAM 政策。
- 了解如何使用通用表达式语言 (CEL)。
- 了解如何管理各种政策控制。