使用 Certificate Authority Service 部署 Google 管理的全球证书


本教程以 Certificate Authority Service 为例,介绍如何使用 Google 管理的证书完成证书部署过程

以下负载平衡器支持 CA Service 由 Google 管理的证书:

  • 全球外部应用负载均衡器
  • 传统应用负载均衡器
  • 跨区域内部应用负载均衡器
  • 全球外部代理网络负载均衡器

如果目标 CA 池上应用了证书颁发政策,则证书预配可能会因以下某个原因失败:

  • 证书颁发政策已屏蔽所请求的证书。在这种情况下,由于证书尚未颁发,因此系统不会向您收费。
  • 此政策对证书管理器不支持的证书应用了一些更改。在这种情况下,即使证书与证书管理器不完全兼容,您仍然需要付费。

按照本教程中的步骤颁发的证书不是公开信任的证书。如果您想颁发受大众信任的证书,请改为按照以下某个教程中的步骤进行操作:

如果要将现有证书迁移到证书管理器,请改为按照将证书迁移到证书管理器中的步骤操作。

请注意,即使您使用区域级 CA 池颁发 Google 管理的 TLS 证书,证书本身是全球性的,可以在任何区域中使用。

目标

本教程介绍如何完成以下任务:

  • 使用证书管理器通过 CA Service 创建 Google 管理的证书。
  • 使用目标 HTTPS 代理将证书部署到受支持的负载均衡器。

如需详细了解证书部署过程,请参阅部署概览

准备工作

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. 请确保您拥有以下角色来完成本教程中的任务:

    • Certificate Manager Owner:创建和管理 Certificate Manager 资源所必需的权限。
    • Compute Load Balancer AdminCompute Network Admin:创建和管理 HTTPS 目标代理时需要。
    • Certificate Authority Service Admin:在 CA Service 中执行操作的必要权限。

    详情请参阅以下内容:

  3. 启用 CA Service API

  4. 创建 CA 池。您必须在此 CA 池中创建并启用至少一个 CA。

配置 CA Service 与 Certificate Manager 的集成

配置证书管理器以与 CA Service 集成,如下所示:

  1. 使用以下命令在目标 Google Cloud 项目中创建 Certificate Manager 服务帐号:

    gcloud beta services identity create --service=certificatemanager.googleapis.com \
       --project=PROJECT_ID
    

    PROJECT_ID 替换为目标 Google Cloud 项目的 ID。

    该命令会返回所创建的服务身份的名称。请参阅以下示例:

    service-520498234@gcp-sa-certificatemanager.iam.gserviceaccount.com
    
  2. 按如下方式在目标 CA 池中向 Certificate Manager 服务帐号授予 Certificate Requester 角色:

    gcloud privateca pools add-iam-policy-binding CA_POOL \
       --location REGION \
       --member "serviceAccount:SERVICE_ACCOUNT" \
       --role roles/privateca.certificateRequester
    

    请替换以下内容:

    • CA_POOL:目标 CA 池的 ID。
    • REGION:目标 Google Cloud 区域。
    • SERVICE_ACCOUNT:您在第 1 步中创建的服务帐号的全名。
  3. 为 CA 池创建证书颁发配置资源:

    gcloud certificate-manager issuance-configs create ISSUANCE_CONFIG_NAME \
       --ca-pool=CA_POOL \
       [--lifetime=CERTIFICATE_LIFETIME] \
       [--rotation-window-percentage=ROTATION_WINDOW_PERCENTAGE] \
       [--key-algorithm=KEY_ALGORITHM]
    

    请替换以下内容:

    • ISSUANCE_CONFIG_NAME:证书颁发配置资源的唯一名称。
    • CA_POOL:您要分配给此证书颁发配置资源的 CA 池的完整资源路径和名称。
    • CERTIFICATE_LIFETIME:证书生命周期(以天为单位)。有效值为 21 天到 30 天(采用标准时长格式)。默认值为 30 天 (30D)。此设置是可选的。

    • ROTATION_WINDOW_PERCENTAGE:触发续订的证书在证书有效期内所占的百分比。此设置是可选的。

      默认值是 66%。您必须设置相对于证书有效期的轮替窗口百分比,以便在证书颁发后至少 7 天到过期前至少 7 天进行证书续订。

    • KEY_ALGORITHM:用于生成私钥的加密算法。有效值为 ecdsa-p256rsa-2048。默认值为 rsa-2048。此设置是可选的。

如需详细了解证书颁发配置,请参阅管理证书颁发配置

创建由您的 CA 服务实例颁发的 Google 管理的证书

创建由 CA 服务实例颁发的 Google 管理的证书,具体操作步骤如下:

控制台

  1. 在 Google Cloud 控制台中,前往 Certificate Manager 页面。

    前往“证书管理器”

  2. 在显示的页面上,选择证书标签页。

  3. 点击添加证书

  4. 输入证书的名称

    该名称在项目中必须是唯一的。

  5. 可选:输入证书的说明。该说明有助于您之后识别特定证书。

  6. 对于位置,选择全局

  7. 范围部分,选择以下任一选项:

    1. 默认:为全球外部应用负载平衡器传统版应用负载平衡器全球外部代理网络负载平衡器选择默认值
    2. 所有区域:为跨区域内部应用负载平衡器选择所有区域
  8. 对于证书类型,选择创建 Google 管理的证书

  9. 对于证书授权机构类型,选择专用

  10. 指定证书的域名。输入以英文逗号分隔的目标网域列表。此外,每个域名都必须是完全限定域名,例如 myorg.example.com

  11. 对于证书颁发配置,选择引用目标 CA 池的证书颁发配置资源的名称。

  12. 指定要与证书关联的标签。如果需要,您可以添加多个标签。如需添加标签,请点击 添加标签按钮,然后为标签指定 keyvalue

  13. 点击创建。验证新证书是否显示在证书列表中。

gcloud

对于全局外部应用负载平衡器、传统应用负载平衡器或全局外部代理网络负载平衡器,请执行以下操作

运行以下命令:

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains="DOMAIN_NAMES" \
    --issuance-config=ISSUANCE_CONFIG_NAME

请替换以下内容:

  • CERTIFICATE_NAME:证书的唯一名称。
  • DOMAIN_NAMES:此证书的目标网域的列表(以英文逗号分隔)。每个域名都必须是完全限定域名,例如 myorg.example.com
  • ISSUANCE_CONFIG_NAME:引用目标 CA 池的证书颁发配置资源的名称。

对于跨区域内部应用负载平衡器

运行以下命令:

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains="DOMAIN_NAMES" \
    --issuance-config=ISSUANCE_CONFIG_NAME \
    --scope=all-regions

请替换以下内容:

  • CERTIFICATE_NAME:证书的唯一名称。
  • DOMAIN_NAMES:此证书的目标网域的列表(以英文逗号分隔)。每个域名都必须是完全限定域名,例如 myorg.example.com
  • ISSUANCE_CONFIG_NAME:引用目标 CA 池的证书颁发配置资源的名称。

API

certificates.create 方法发出 POST 请求以创建证书,如下所示:

对于全局外部应用负载平衡器、传统应用负载平衡器或全局外部代理网络负载平衡器,请执行以下操作

POST /v1/projects/PROJECT_ID/locations/global/certificates?certificate_id=CERTIFICATE_NAME"
{
 "managed": {
  "domains": ["DOMAIN_NAME"],
  "issuanceConfig": "ISSUANCE_CONFIG_NAME",
 }
}

请替换以下内容:

  • PROJECT_ID:目标 Google Cloud 项目的 ID。
  • CERTIFICATE_NAME:证书的唯一名称。
  • DOMAIN_NAME:此证书的目标网域。域名必须是完全限定域名,例如 myorg.example.com
  • ISSUANCE_CONFIG_NAME:引用目标 CA 池的证书颁发配置资源的名称。

对于跨区域内部应用负载平衡器

POST /v1/projects/PROJECT_ID/locations/global/certificates?certificate_id=CERTIFICATE_NAME"
{
 "managed": {
  "domains": ["DOMAIN_NAME"],
  "issuanceConfig": "ISSUANCE_CONFIG_NAME",
  "scope": "ALL_REGIONS"
 }
}

请替换以下内容:

  • PROJECT_ID:目标 Google Cloud 项目的 ID。
  • CERTIFICATE_NAME:证书的唯一名称。
  • DOMAIN_NAME:此证书的目标网域。域名必须是完全限定域名,例如 myorg.example.com
  • ISSUANCE_CONFIG_NAME:引用目标 CA 池的证书颁发配置资源的名称。

如需简要了解证书部署过程,请参阅部署概览

验证证书是否有效

在将证书部署到负载均衡器之前,请使用以下命令验证证书本身是否处于活跃状态。证书状态可能需要几分钟才能更改为 ACTIVE

gcloud certificate-manager certificates describe CERTIFICATE_NAME

CERTIFICATE_NAME 替换为 Google 管理的目标证书的名称。

该命令会返回类似于以下内容的输出:

createTime: '2021-10-20T12:19:53.370778666Z'
expireTime: '2022-05-07T05:03:49Z'
managed:
  domains:
  - myorg.example.com
  issuanceConfig: projects/myProject/locations/global/certificateIssuanceConfigs/myIssuanceConfig
  state: ACTIVE
name: projects/myProject/locations/global/certificates/myCert
pemCertificate: |
  -----BEGIN CERTIFICATE-----
  [...]
  -----END CERTIFICATE-----
sanDnsnames:
- myorg.example.com
updateTime: '2021-10-20T12:19:55.083385630Z'

将证书部署到负载均衡器

本部分介绍了将 Google 管理的证书部署到负载均衡器所需的步骤。

在继续执行本部分中的任务之前,请确保您已完成配置 CA Service 与证书管理器的集成创建由您的 CA 服务实例颁发的 Google 管理的证书部分中列出的任务。

您可以根据负载均衡器类型,按如下方式部署证书:

使用证书映射部署证书

本部分介绍了使用证书映射部署证书的步骤。

创建证书映射

创建一个证书映射,该映射将引用与您的证书相关联的证书映射条目

gcloud certificate-manager maps create CERTIFICATE_MAP_NAME

CERTIFICATE_MAP_NAME 替换为目标证书映射的名称。

创建证书映射条目

创建证书映射条目,并将其与您的证书证书映射相关联:

gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \
    --map="CERTIFICATE_MAP_NAME" \
    --certificates="CERTIFICATE_NAME" \
    --hostname="HOSTNAME"

请替换以下内容:

  • CERTIFICATE_MAP_ENTRY_NAME:证书映射条目的唯一名称
  • CERTIFICATE_MAP_NAME:此证书映射条目附加到的证书映射的名称
  • CERTIFICATE_NAME:您要与此证书映射条目相关联的证书的名称
  • HOSTNAME:您要与此证书映射条目关联的主机名

验证证书映射条目是否处于活跃状态

在将相应的证书映射关联到目标代理之前,请使用以下命令验证证书映射条目是否处于活跃状态:

gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \
    --map="CERTIFICATE_MAP_NAME"

请替换以下内容:

  • CERTIFICATE_MAP_ENTRY_NAME:目标证书映射条目的名称
  • CERTIFICATE_MAP_NAME:此证书映射条目附加到的证书映射的名称

该命令会返回类似于以下内容的输出:

certificates:
createTime: '2021-09-06T10:01:56.229472109Z'
hostname: example.com
name: projects/my-project/locations/global/certificateMaps/myCertMap/certificateMapEntries/myCertMapEntry
state: ACTIVE
updateTime: '2021-09-06T10:01:58.277031787Z'

将证书映射附加到目标代理

将配置的证书映射附加到目标代理:

  1. 在 Google Cloud 控制台中,转到目标代理页面。

    打开“目标代理”

  2. 请记下目标代理的名称。

  3. 将证书映射附加到目标代理:

    gcloud compute target-https-proxies update PROXY_NAME \
       --certificate-map="CERTIFICATE_MAP_NAME"
    

    请替换以下内容:

    • PROXY_NAME:目标代理的名称
    • CERTIFICATE_MAP_NAME:引用您的证书映射条目及其关联证书的证书映射的名称

如果有任何现有 TLS (SSL) 证书直接附加到代理,则代理会优先考虑证书映射引用的证书,而不是直接附加的 TLS (SSL) 证书。

将证书直接附加到目标代理

如需将证书直接附加到代理,请运行以下命令:

gcloud compute target-https-proxies update PROXY_NAME \
    --url-map=URL_MAP \
    --global \
    --certificate-manager-certificates=CERTIFICATE_NAME

请替换以下内容:

  • PROXY_NAME:代理的唯一名称。
  • URL_MAP:网址映射的名称。您在创建负载均衡器时创建了网址映射。
  • CERTIFICATE_NAME:证书的名称。

问题排查

如需了解问题排查步骤,请参阅与 CA 服务实例颁发的证书相关的问题

清理

如需还原您在本教程中所做的更改,请完成以下步骤:

  1. 从代理中分离证书映射。

    在分离证书映射之前,请注意以下事项:

    • 如果有任何 TLS (SSL) 证书直接附加到代理,分离证书映射会使代理继续使用那些直接附加的 TLS (SSL) 证书。
    • 如果没有直接附加到代理的 TLS (SSL) 证书,则无法将证书映射与代理分离。您必须先将至少一个 TLS (SSL) 证书直接附加到代理,然后才能分离证书映射。

    如需分离证书映射,请运行以下命令:

    gcloud compute target-https-proxies update PROXY_NAME \
       --clear-certificate-map
    

    PROXY_NAME 替换为目标代理的名称。

  2. 从证书映射中删除证书映射条目:

    gcloud certificate-manager maps entries delete CERTIFICATE_MAP_ENTRY_NAME \
       --map="CERTIFICATE_MAP_NAME"
    

    请替换以下内容:

    • CERTIFICATE_MAP_ENTRY_NAME:目标证书映射条目的名称
    • CERTIFICATE_MAP_NAME:目标证书映射的名称
  3. 删除证书映射:

    gcloud certificate-manager maps delete CERTIFICATE_MAP_NAME
    

    CERTIFICATE_MAP_NAME 替换为目标证书映射的名称。

  4. 删除 Google 管理的证书:

    gcloud certificate-manager certificates delete CERTIFICATE_NAME
    

    CERTIFICATE_NAME 替换为目标证书的名称。

  5. 删除证书颁发配置资源:

    gcloud certificate-manager issuance-configs delete ISSUANCE_CONFIG_NAME
    

    ISSUANCE_CONFIG_NAME 替换为目标证书颁发配置资源的名称。

  6. 按照删除 CA 池中的说明删除 CA 池。

    请注意,如需停用您在证书颁发配置中引用的 CA 池中启用的最后一个 CA,或将引用的 CA 池完全删除,您必须先删除引用该 CA 池的每个证书颁发配置。

后续步骤