本教程将引导您完成证书部署流程 通过 Certificate Authority Service 使用 Google 管理的证书 示例。
以下负载平衡器支持 CA Service 由 Google 管理的证书:
- 全球外部应用负载均衡器
- 传统应用负载均衡器
- 跨区域内部应用负载均衡器
- 全局外部代理网络负载均衡器
如果证书颁发政策已生效 在目标 CA 池中,证书预配可能会因以下某种原因而失败:
- 证书颁发政策已屏蔽所请求的证书。在这种情况下,由于证书尚未颁发,因此系统不会向您收费。
- 此政策对证书管理器不支持的证书应用了一些更改。在这种情况下,即使证书与证书管理器不完全兼容,您仍然需要付费。
按照本教程中的步骤颁发的证书不是公开信任的证书。如果您想 颁发受大众信任的证书时,请改为按照以下某个教程中的步骤进行操作:
如果您想要将现有证书迁移到证书管理器,请按照 请改为按照将证书迁移到证书管理器中的步骤进行操作。
请注意,即使您使用区域级 CA 池来发出由 Google 管理的 传输层安全协议 (TLS) 证书,那么证书本身是全球性的,可以在任何区域使用。
目标
本教程介绍如何完成以下任务:
- 通过 CA Service 创建 Google 管理的证书 使用证书管理器登录
- 使用目标 HTTPS 代理将证书部署到受支持的负载均衡器。
如需详细了解证书部署流程,请参阅 部署概览。
准备工作
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
请确保您拥有以下角色来完成本教程中的任务:
- Certificate Manager Owner:创建和管理 Certificate Manager 资源所必需的权限。
- Compute Load Balancer Admin 或 Compute Network Admin:创建和管理 HTTPS 目标代理时需要。
- Certificate Authority Service Admin:在 CA Service 中执行操作的必要权限。
详情请参阅以下内容:
- Certificate Manager 的角色和权限
- Compute Engine 的 Compute Engine IAM 角色和权限
- CA Service 的权限和角色
创建 CA 池。您必须创建并启用 此 CA 池中至少有一个 CA。
配置 CA Service 与 Certificate Manager 的集成
配置证书管理器以与 CA Service 集成,如下所示:
使用以下命令在目标 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
为 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 步中创建的服务账号的全名。
为 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
:证书生命周期(以天为单位)。有效值为 标准时长格式。默认值为 30 天 (30D
)。此设置是可选的。ROTATION_WINDOW_PERCENTAGE
:触发续订的证书在证书有效期内所占的百分比。此设置是可选的。默认值是 66%。您必须设置相对于证书有效期的轮替窗口百分比,以便在证书颁发后至少 7 天到过期前至少 7 天进行证书续订。
KEY_ALGORITHM
:用于 生成私钥。有效值为ecdsa-p256
或rsa-2048
。 默认值为rsa-2048
。此设置是可选的。
如需详细了解证书颁发配置,请参阅管理证书颁发配置。
创建由您的 CA 服务实例颁发的 Google 管理的证书
创建由 CA 服务实例颁发的 Google 管理的证书,具体操作步骤如下:
控制台
在 Google Cloud 控制台中,前往 Certificate Manager 页面。
在显示的页面上,选择证书标签页。
点击添加证书。
输入证书的名称。
该名称在项目中必须是唯一的。
可选:输入证书的说明。说明 可帮助您稍后识别特定证书。
对于位置,选择全局。
在范围部分,选择以下任一选项:
- 默认:为全球外部应用负载平衡器、传统版应用负载平衡器或全球外部代理网络负载平衡器选择默认值
- 所有区域:为跨区域内部应用负载平衡器选择所有区域
对于证书类型,选择创建 Google 管理的证书。
对于证书授权机构类型,选择专用。
指定证书的域名。请输入以英文逗号分隔 目标网域的列表。此外,每个域名都必须是 域名,例如
myorg.example.com
。对于证书颁发配置,请选择证书的名称 引用了目标 CA 池的颁发配置资源。
指定要与证书关联的标签。您可以添加 多个标签(如果需要)。要添加标签,请点击 add_box 添加标签按钮,然后为标签指定
key
和value
。点击创建。验证新证书是否显示在证书列表中。
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 管理的证书部分中列出的任务。
您可以根据负载均衡器类型,按如下方式部署证书:
- 对于以下负载平衡器,请使用证书映射部署证书:
<ph type="x-smartling-placeholder">
- </ph>
- 全球外部应用负载均衡器
- 全局外部代理网络负载均衡器
- 传统应用负载均衡器
- 对于跨区域内部应用负载平衡器,通过将证书直接附加到目标代理来部署证书。
使用证书映射部署证书
本部分介绍了使用证书映射部署证书的步骤。
创建证书映射
创建证书映射 将引用证书映射条目 与您的证书关联的项目 ID:
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'
将证书映射附加到目标代理
将配置的证书映射附加到目标代理:
在 Google Cloud 控制台中,转到目标代理页面。
请记下目标代理的名称。
将证书映射附加到目标代理:
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 服务实例颁发的证书相关的问题。
清理
如需还原您在本教程中所做的更改,请完成以下操作 步骤:
从代理中分离证书映射。
在分离证书映射之前,请注意以下事项:
- 如果有任何 TLS (SSL) 证书直接附加到代理, 分离证书映射会导致代理直接继续使用这些证书 附加的 TLS (SSL) 证书。
- 如果没有直接附加到代理的 TLS (SSL) 证书,则证书映射 无法与代理分离。您必须先附加至少一个 TLS (SSL) 然后才能分离证书映射。
如需分离证书映射,请运行以下命令:
gcloud compute target-https-proxies update PROXY_NAME \ --clear-certificate-map
将
PROXY_NAME
替换为目标代理的名称。从证书映射中删除证书映射条目:
gcloud certificate-manager maps entries delete CERTIFICATE_MAP_ENTRY_NAME \ --map="CERTIFICATE_MAP_NAME"
替换以下内容:
CERTIFICATE_MAP_ENTRY_NAME
: 目标证书映射条目CERTIFICATE_MAP_NAME
: 目标证书映射
删除证书映射:
gcloud certificate-manager maps delete CERTIFICATE_MAP_NAME
将
CERTIFICATE_MAP_NAME
替换为目标的名称 证书映射。删除 Google 管理的证书:
控制台
在 Google Cloud 控制台中,前往 Certificate Manager 页面。
在 Certificates(证书)标签页上,选中 证书。
点击删除。
在显示的对话框中,点击删除进行确认。
gcloud
gcloud certificate-manager certificates delete CERTIFICATE_NAME
将
CERTIFICATE_NAME
替换为目标的名称 证书。删除证书颁发配置资源:
控制台
在 Google Cloud 控制台中,前往 Certificate Manager 页面。
在 Issuance Configs(发布配置)标签页上,选中 发布配置。
点击删除。
在显示的对话框中,点击删除进行确认。
gcloud
gcloud certificate-manager issuance-configs delete ISSUANCE_CONFIG_NAME
将
ISSUANCE_CONFIG_NAME
替换为目标的名称 证书颁发配置资源。按照删除 CA 池中的说明删除 CA 池。
请记住,要停用您在 证书颁发配置,或要将引用的 CA 池完全删除,则必须 请先删除引用该 CA 池的每个证书颁发配置。