创建证书模板

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

所需的角色

如需获得创建证书模板所需的权限,请让您的管理员为您授予项目、文件夹或组织的 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 标志用于指定 YAML 文件的路径,该文件描述了此模板设置的所有预定义 X.509 值。所提供的扩展会复制到使用此模板的任何证书请求中,并优先于证书请求中的任何允许的扩展。如果您更新了预定义的 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 服务的 IAM 角色及其关联的权限,请参阅使用 IAM 进行访问权限控制

后续步骤