创建证书模板

本页介绍了证书模板的属性,并说明了如何创建证书模板。如需详细了解证书模板,请参阅证书模板简介

所需的角色

如需获得创建证书模板所需的权限,请让管理员向您授予项目、文件夹或组织的 CA Service Operation Manager (roles/privateca.caManager) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

创建证书模板

如需创建证书模板,请使用以下方法之一:

控制台

  1. 前往 Google Cloud 控制台中的 Certificate Authority Service 页面。

    前往 Certificate Authority Service

  2. 点击模板管理器标签页,然后点击创建模板

  3. 使用地区列表为证书模板选择一个位置。此位置必须与您打算与证书模板搭配使用的 CA 池位于同一位置。

  4. 证书模板 ID 字段中,输入证书模板的唯一标识符。(可选)为证书模板提供说明。

  5. 点击下一步

  6. 如果您想为使用此模板的证书配置默认的 x.509 值,请点击在使用此证书模板颁发的证书中添加预定义值切换开关。然后,点击配置预定义值

  7. 使用以下信息设置预定义值:

    定义基本密钥用途

    此设置是指数字证书中的 Key Usage 字段。它指定了证书的私钥的使用方式,例如用于密钥加密、数据加密、证书签名和 CRL 签名。如需了解详情,请参阅密钥使用情况

    1. 如需选择基本密钥用途,请点击指定由此 CA 池颁发的证书的基本密钥用途切换开关,然后从列出的选项中进行选择。
    2. 点击下一步

    指定扩展的密钥用途

    此设置是指数字证书中的 Extended Key Usage (EKU) 字段。它对密钥的使用方式(例如用于服务器身份验证、客户端身份验证、代码签名、电子邮件保护等)提供了更具体的限制。如需了解详情,请参阅扩展的密钥用途

    扩展密钥用法使用对象标识符 (OID) 进行定义。如果您未配置扩展密钥用途,则允许所有密钥用途场景。

    1. 如需选择扩展密钥用途,请点击为由此 CA 池颁发的证书写入扩展密钥用途切换开关,然后从列出的选项中进行选择。
    2. 点击下一步

    定义政策标识符

    证书中的证书政策扩展表示颁发 CA 池遵循的政策。此扩展程序可以包含有关在颁发证书之前如何验证身份、如何撤消证书以及如何确保 CA 池完整性的信息。此扩展程序可帮助您验证 CA 池颁发的证书,并查看证书的使用方式。

    如需了解详情,请参阅证书政策

    如需指定用于定义证书使用情况的政策,请执行以下操作:

    1. 可选:在政策标识符字段中添加政策标识符。
    2. 点击下一步

    添加授权信息访问 (AIA) OCSP 服务器

    证书中的 AIA 扩展提供以下信息:

    • OCSP 服务器的地址,您可以通过该地址检查证书的撤消状态。
    • 证书颁发者的访问方法。

    如需了解详情,请参阅对授权信息的访问

    添加 OCSP 服务器是可选操作。如需添加证书中 AIA 扩展字段中显示的 OCSP 服务器,请执行以下操作:

    1. 点击添加项目
    2. Server 网址(服务器网址)字段中,添加 OCSP 服务器的网址。
    3. 点击完成
    4. 点击下一步

    CA 选项

    证书模板中的 CA 选项字段定义了生成的证书在证书授权机构 (CA) 层次结构中的使用方式。它本质上决定了证书是否可用于为其他证书签名,如果可以,则决定其签发的证书是否存在任何限制。

    根据需要选择下列其中一项:

    1. 添加配置以描述 CA X.509 扩展:在证书模板中指定用于控制 X.509 扩展的设置。

    2. 将已颁发的证书限制为仅用于 CA:只有在您选中上一步中提及的复选框后,系统才会显示此选项。此布尔值指示证书是否为 CA 证书。如果设置为 true,则证书可用于为其他证书签名。如果为 false,则表示是最终实体证书,无法对其他证书进行签名。如果您点击此切换开关,系统会进一步提示您为 CA 证书中的扩展定义名称限制条件。

    3. 添加配置以描述路径长度限制 X.509 扩展:指定用于控制从特定证书派生的证书链的长度的设置。它指定可以链接到此 CA 证书的 CA 的数量上限。如果将颁发者路径长度上限设置为 0,则 CA 只能颁发最终实体证书。如果将其设置为 1,则此 CA 证书下方的链只能包含一个从属 CA。如果未声明值,则此 CA 下链中的子 CA 数量不受限制。

    4. 点击下一步

    配置其他扩展程序

    可选:您可以配置要添加到 CA 池颁发的证书中的其他自定义扩展。执行以下操作:

    1. 点击添加项目
    2. 对象标识符字段中,添加格式为英文句点分隔的数字的有效对象标识符。
    3. 字段中,添加标识符的 base64 编码值。
    4. 如果该扩展程序至关重要,请选择扩展程序至关重要
  8. 如需保存所有预定义值,请点击完成

  9. 接下来,前往配置扩展程序约束条件部分。选择以下任一选项:

    • 将证书请求中的所有扩展复制到证书中
    • 从证书请求中删除所有扩展
    • 将证书请求中的特定扩展复制到证书中
  10. 如果您选择复制特定附加信息,可以执行以下操作:
    • 点击已知证书扩展字段,然后从列表中清除不需要的扩展。
    • 自定义扩展字段中,添加您希望添加到 CA 池颁发的证书中的扩展的对象标识符。

  11. 点击下一步,然后前往配置身份限制部分。 如需对 CA 池签发的证书中的主题和 SAN 配置约束条件,请选择以下一个或两个选项:

    • 将证书请求的主题复制到证书
    • 将证书请求中的主题备用名称 (SAN) 复制到证书
    可选:在配置身份限制条件部分中,添加通用表达式语言 (CEL) 表达式,以定义对证书正文的限制。如需了解详情,请参阅使用 CEL

  12. 点击下一步,然后点击完成

gcloud

gcloud privateca templates create TEMPLATE_ID \
  --copy-subject \
  --copy-sans \
  --identity-cel-expression <expr> \
  --predefined-values-file FILE_PATH \
  --copy-all-requested-extensions \
  --copy-extensions-by-oid <1.2.3.4,5.6.7.8> \
  --copy-known-extensions <ext1,ext2>

替换以下内容:

  • TEMPLATE_ID:证书模板的唯一标识符。
  • FILE_PATH:用于描述证书模板设置的 X.509 值的 YAML 文件。

--copy-sans 标志允许将证书请求中的主题备用名称 (SAN) 扩展复制到已签名的证书中。或者,您也可以指定 --no-copy-sans 以从证书请求中移除任何调用方指定的 SAN。

--copy-subject 标志允许将证书请求中的主题复制到已签名的证书中。或者,您也可以指定 --no-copy-subject 以从证书请求中移除任何调用方指定的正文。

--identity-cel-expression 标志采用 CEL 表达式,该表达式会在证书颁发之前针对证书的主题和主题备用名称进行评估,并返回一个布尔值,表示是否应允许相应请求。如需了解如何为证书模板使用通用表达式语言 (CEL) 表达式,请参阅为证书模板使用 CEL

--predefined-values-file 标志指定用于描述此模板设置的任何预定义 X.509 值的 YAML 文件的路径。提供的扩展会复制到使用此模板的任何证书请求,并优先于证书请求中的任何允许的扩展。如果您更新预定义 X.509 值的任何部分,更新将替换一整组预定义 X.509 值。

如果设置了 --copy-all-requested-extensions 标志,系统会将证书请求中指定的所有扩展复制到已签名的证书中。

如果设置了 --copy-extensions-by-oid 标志,系统会将特定 OID 从证书请求复制到已签名的证书中。

如果设置了 --copy-known-extensions 标志,系统会将特定扩展从证书请求复制到已签名的证书中。这些已知扩展名可以是以下各项之一:base-key-usageextended-key-usageca-optionspolicy-idsaia-ocsp-servers

移除 --copy-all-requested-extensions 标志可忽略证书请求中的所有 X.509 扩展,但仍保留此模板中定义的预定义值。

以下是证书模板配置示例:

keyUsage:
  baseKeyUsage:
    digitalSignature: true
    keyEncipherment: true
    contentCommitment: false
    dataEncipherment: false
    keyAgreement: false
    certSign: false
    crlSign: false
    encipherOnly: false
    decipherOnly: false
  extendedKeyUsage:
    serverAuth: true
    clientAuth: false
    codeSigning: false
    emailProtection: false
    timeStamping: false
    ocspSigning: false
caOptions:
  isCa: true
  maxIssuerPathLength: 1
policyIds:
- objectIdPath:
  - 1
  - 2
  - 3
additionalExtensions:
- objectId:
    objectIdPath:
    - 1
    - 2
    - 3
  critical: false
  value: "base64 encoded extension value"

YAML 中未指定的值会被省略或默认为 false

如果未指定值,系统会忽略以下扩展程序:

  • keyUsage
  • policyIds
  • additionalExtensions
  • caOptions 扩展程序中的 maxIssuerPathLength 字段

如果未指定值,以下扩展程序的默认值为 false

  • caOptions 扩展程序中的 isCa 字段

针对常见场景创建证书模板

本部分提供了用于针对常见用例创建证书模板的 gcloud 命令。

任何网域的 DNS 服务器 TLS 证书

如需创建证书模板以颁发允许任何网域的服务器 TLS 证书,请按照以下说明操作:

  1. 创建一个名为 leaf_server_tls_values.yaml 的文件,并向其中添加以下端实体服务器 TLS 配置:

    leaf_server_tls_values.yaml

    keyUsage:
      baseKeyUsage:
        digitalSignature: true
        keyEncipherment: true
      extendedKeyUsage:
        serverAuth: true
    caOptions:
      isCa: false
    
  2. 如需仅允许使用 DNS 类型 SAN 的证书,请执行以下 gcloud 命令:

    gcloud

    gcloud privateca templates create server-tls \
      --predefined-values-file leaf_server_tls_values.yaml \
      --copy-sans --no-copy-subject \
      --identity-cel-expression "subject_alt_names.all(san, san.type == DNS)"
    

    如需详细了解 gcloud privateca templates create 命令,请参阅 gcloud privateca templates create

仅包含测试网域的 DNS 服务器 TLS 证书

如需创建证书模板以颁发 DNS SAN 仅限测试网域的服务器 TLS 证书,请使用以下 gcloud 命令:

gcloud

gcloud privateca templates create server-tls \
  --predefined-values-file leaf_server_tls_values.yaml \
  --copy-sans --no-copy-subject \
  --identity-cel-expression "subject_alt_names.all(san, san.type == DNS && san.value.endsWith('.test.example.com'))"

leaf_server_tls_values.yaml 文件的内容必须与上例相同。

如需详细了解如何使用 CEL 表达式确保 DNS 名称以特定字符串开头或结尾,请参阅 CEL 示例表达式

工作负载身份证书

如需创建用于颁发双向 TLS (mTLS) 证书的证书模板,请按照以下说明操作:

  1. 创建一个名为 leaf_mtls_values.yaml 的文件,并向其中添加以下端实体互动 TLS 配置。

    leaf_mtls_values.yaml

    keyUsage:
      baseKeyUsage:
        digitalSignature: true
        keyEncipherment: true
      extendedKeyUsage:
        serverAuth: true
        clientAuth: true
    caOptions:
      isCa: false
    
  2. 如需仅允许使用 SPIFFE URI SAN 的证书,请使用以下 gcloud 命令:

    gcloud

    gcloud privateca templates create workload-spiffe \
      --predefined-values-file leaf_mtls_values.yaml \
      --copy-sans --no-copy-subject \
      --identity-cel-expression "subject_alt_names.all(san, san.type == URI && san.value.startsWith('spiffe://'))"
    

    如需详细了解 gcloud privateca templates create 命令,请参阅 gcloud privateca templates create

如需详细了解如何使用 CEL 表达式确保 DNS 名称以特定字符串开头或结尾,请参阅 CEL 示例表达式

授予对证书模板的访问权限

如果您拥有 CA Service Certificate Template User (roles/privateca.templateUser) 角色,则可以使用证书模板。我们建议证书模板的作者向可能使用该证书模板的组织成员授予 CA Service Certificate Template User 角色。

如需向 example.com 网域中的所有用户授予 CA Service Certificate Template User (roles/privateca.templateUser) 角色,请使用以下 gcloud 命令:

gcloud

gcloud privateca templates add-iam-policy-binding TEMPLATE_ID \
  --member "domain:example.com" \
  --role "roles/privateca.templateUser"

替换以下内容:

  • TEMPLATE_ID:证书模板的唯一标识符。

如需详细了解 gcloud privateca templates add-iam-policy-binding 命令,请参阅 gcloud privateca templates add-iam-policy-binding

如需详细了解 CA Service 的 IAM 角色及其关联的权限,请参阅使用 IAM 进行访问权限控制

后续步骤