使用由 Google 管理的 SSL 证书

本页面介绍如何创建和使用 Google 管理的 SSL 证书。

由 Google 管理的 SSL 证书是 Google Cloud 为您的网域获取和管理的证书,此类证书可自动续订。该证书是网域验证 (DV) 证书,支持每个证书中有多个主机名。

您必须为某些类型的 Google Cloud 负载平衡器提供 SSL 证书,这些负载平衡器包括:

您还可以将代管式 SSL 证书与 Google Kubernetes Engine 搭配使用。如需了解详情,请参阅使用 Google 管理的 SSL 证书

您可以在创建负载平衡器之前、期间或之后创建 Google 管理的证书。本页面假定您是在创建负载平衡器之前或之后(而不是创建期间)创建证书。要在创建负载平衡器时创建证书,请参阅负载平衡器方法指南页面。

多个网域

支持多个主题备用名称。每个 Google 管理的 SSL 证书可支持的网域数量有上限

如果您拥有的网域数量已超过上限,则必须请求多个 Google 管理的证书。例如,如果您尝试创建包含(数量上限 + 1 个)网域的 Google 管理的证书,则 Google 不会颁发任何证书。您必须创建两个或更多 Google 管理的证书,并明确说明每个证书与哪些网域相关联。

Google Cloud 根据 RFC 6066 的规定,实施服务器名称指示 (SNI)。

当 Google 续订具有多个网域的代管式证书时,如果任何网域或子网域未指向负载平衡器的 IP 地址,则续订过程将失败。配置代管式证书后,请确保所有网域和子网域仍指向负载平衡器的 IP 地址,以免续订失败。

准备工作

权限

如需按照本指南操作,您必须拥有在项目中创建和修改 SSL 证书的权限。如果您拥有某一以下角色或权限,则拥有此权限:

第 1 步:创建 Google 管理的 SSL 证书

您可以在创建负载平衡器之前、期间或之后创建 Google 管理的证书。在 Cloud Console 中创建负载平衡器的过程中,您可以使用 Cloud Console 来创建证书。或者,您也可以在创建负载平衡器之前或之后创建证书。此步骤向您介绍了如何创建证书,以供稍后添加到一个或多个负载平衡器。

如果您已经创建了 Google 管理的 SSL 证书,则可以跳过此步骤。

控制台

您可以在负载平衡页面的证书标签页上使用 SSL 证书。

  1. 转到 Google Cloud Console 中的“证书”页面。
    转到“证书”页面
  2. 点击创建 SSL 证书
  3. 为证书输入名称和可选说明。
  4. 选择创建 Google 托管的证书
  5. 添加网域。
  6. 点击创建

gcloud

使用 gcloud compute ssl-certificates create 命令为外部 HTTP(S) 负载平衡器或 SSL 代理负载平衡器创建由 Google 管理的全球 SSL 证书:

gcloud compute ssl-certificates create CERTIFICATE_NAME \
    --description=DESCRIPTION \
    --domains=DOMAIN_LIST \
    --global

将下列占位符替换为有效值:

  • CERTIFICATE_NAME:全球 SSL 证书的名称
  • DESCRIPTION:全球 SSL 证书的说明
  • DOMAIN_LIST:用于此证书的单个域名或英文逗号分隔的域名列表

api

创建 Google 管理的证书资源 sslCertificates.insert 方法,注意将 PROJECT_ID 替换为您的项目 ID。

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/sslCertificates
{
  "name": "ssl-certificate-name",
  "managed": {
    "domains": [
      "www.example.com"
    ]
  },
  "type": "MANAGED"
}

检查 Google 管理的 SSL 证书的状态

控制台

您可以在负载平衡页面的证书标签页上查看 SSL 证书的状态。

  1. 转到 Google Cloud Console 中的“证书”页面。
    转到“证书”页面
  2. (可选)过滤 SSL 证书列表。
  3. 查看状态列。
  4. 如需查看更多详细信息,请点击证书名称。

gcloud

您可以使用 gcloud compute 命令确定 Google 管理的证书的状态。运行相应命令后,请注意以下方面:

  • 代管状态。
  • 网域状态。

使用带有 --global 标志的 gcloud compute ssl-certificates list 命令列出 Google 管理的 SSL 证书。

gcloud compute ssl-certificates list \
   --global

您可以使用 gcloud compute ssl-certificates describe 命令,注意替换 CERTIFICATE_NAME

gcloud compute ssl-certificates describe CERTIFICATE_NAME \
   --global \
   --format="get(name,managed.status, managed.domainStatus)"

此时,证书状态和网域状态为 PROVISIONING。完成此页面上的所有步骤后,状态会变为 ACTIVE

如需详细了解这些状态,请参阅问题排查页面

第 2 步:创建或更新负载平衡器

要变为 ACTIVE 状态,Google 管理的 SSL 证书必须与负载平衡器(具体而言,即负载平衡器的目标代理)关联。

创建 SSL 证书并且其处于 PROVISIONING 状态后,您可以在创建负载平衡器期间使用该证书,如以下方法指南所述:

或者,您可以用它来更新现有的负载平衡器,如下所述:

控制台

当您使用 Google Cloud Console 更新外部 HTTP(S) 负载平衡器或 SSL 代理负载平衡器时,Google Cloud 会自动将您的 SSL 证书与正确的目标代理关联。

  1. 转到 Google Cloud Console 中的“负载平衡”页面。
    转到“负载平衡”页面
  2. 点击您的负载平衡器的名称。
  3. 点击修改
  4. 点击前端配置
  5. 点击正确的前端(必须为 HTTPS、HTTP/2、SSL)。
  6. 点击其他证书,然后从下拉列表中选择您的由 Google 管理的证书。
  7. 点击创建

gcloud

如需将 SSL 证书与外部 HTTP(S) 负载平衡器的目标 HTTPS 代理相关联,请使用带有 --global-ssl-certificates--global 标志的 gcloud compute target-https-proxies update 命令:

gcloud compute target-https-proxies update TARGET_PROXY_NAME \
    --ssl-certificates SSL_CERTIFICATE_LIST \
    --global-ssl-certificates \
    --global

如需将 SSL 证书与 SSL 代理负载平衡器的目标 SSL 代理相关联,请使用 gcloud compute target-ssl-proxies update 命令:

gcloud compute target-ssl-proxies update TARGET_PROXY_NAME \
    --ssl-certificates SSL_CERTIFICATE_LIST

请将占位符替换为有效值:

  • TARGET_PROXY_NAME:负载平衡器的目标代理名称
  • SSL_CERTIFICATE_LIST:英文逗号分隔的 SSL 证书列表

每个目标 HTTPS 代理或目标 SSL 代理都必须引用至少一个 SSL 证书。目标代理可以引用多个 SSL 证书。如需了解详情,请参阅负载平衡资源配额和限制中的目标池和目标代理

第 3 步:验证目标代理关联

创建或更新负载平衡器后,您可以通过运行以下命令来确保 SSL 证书已与负载平衡器的目标代理关联。

对于外部 HTTPS 负载平衡器

gcloud compute target-https-proxies describe target-https-proxy-name \
    --global \
    --format="get(sslCertificates)"

对于 SSL 代理负载平衡器

gcloud compute target-ssl-proxies describe target-ssl-proxy-name \
    --format="get(sslCertificates)"

此时,您的 Google 管理的证书状态可能仍然为 PROVISIONING。Google Cloud 正与证书授权机构合作以颁发证书。预配 Google 管理的证书最多可能需要 60 分钟时间。

第 4 步:更新 DNS A 和 AAAA 记录以指向负载平衡器的 IP 地址

在您的注册商网站、DNS 主机或 ISP(管理 DNS 记录的任何位置)上,为您的网域和任何子网域添加或更新 DNS A 记录(对于 IPv4)和 DNS AAAA 记录(对于 IPv6),使其指向与负载平衡器的一条或多条转发规则关联的 IP 地址。

如果您使用的是 Cloud DNSGoogle Domains,请设置您的网域更新您的域名服务器

如果您对单个 Google 管理的证书使用多个网域,则必须为所有网域和任何子网域添加或更新 DNS 记录,以使其全部指向负载平衡器的 IP 地址。

等待 DNS 传播完成后,您可以通过运行 dig 命令来验证设置。例如,假设您的网域是 www.example.com。运行以下 dig 命令:

dig www.example.com
; <<>> DiG 9.10.6 <<>> www.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31748
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.example.com.           IN  A

;; ANSWER SECTION:
www.example.com.        1742    IN  CNAME   www.example.com.edgekey.net.
www.example.com.edgekey.net. 21330 IN   CNAME   www.example.com.edgekey.net.globalredir.akadns.net.
www.example.com.edgekey.net.globalredir.akadns.net. 3356 IN CNAME   e6858.dsce9.akamaiedge.net.
e6858.dsce9.akamaiedge.net. 212 IN  A   203.0.113.5

;; Query time: 43 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Jun 03 16:54:44 PDT 2020
;; MSG SIZE  rcvd: 193

在此示例中,203.0.113.5 是您的负载平衡器的 IP 地址。

此外,重新运行以下命令:

gcloud compute ssl-certificates describe CERTIFICATE_NAME \
    --format="get(managed.domainStatus)"

如果您的网域状态为 FAILED_NOT_VISIBLE,请参阅“问题排查”页面上的“Google 管理的 SSL 证书网域状态”部分

第 5 步:使用 OpenSSL 进行测试

证书和网域处于活跃状态后,您的负载平衡器最多可能需要 30 分钟才能开始使用 Google 管理的 SSL 证书。

如需进行测试,请运行以下 OpenSSL 命令,注意将 DOMAIN 替换为您的 DNS 名称,并将 IP_ADDRESS 替换为您的负载平衡器的 IP 地址。

echo | openssl s_client -showcerts -servername DOMAIN -connect IP_ADDRESS:443 -verify 99 -verify_return_error

此命令会输出负载平衡器提供给客户端的证书。输出应包含证书链和 Verify return code: 0 (ok) 以及其他详细信息。

Google 管理的 SSL 证书续订

Google Cloud 预配的代管式证书有效期为 90 天。证书到期前一个月左右,系统会自动开始续订证书。为此,Google Cloud 会选择一个既在网域的 CAA DNS 记录中又在证书授权机构列表中的证书授权机构。

进行续订所用的证书授权机构可能并非颁发旧版 Google 管理的证书的证书授权机构。您可以控制 Google Cloud 用于续订的证书授权机构,方法是通过确保您的网域的证书授权机构授权 (CAA) DNS 记录从 Google 管理的证书使用的证书授权机构列表中指定一个证书授权机构。

当 Google 续订具有多个网域的代管式证书时,如果任何网域或子网域未指向负载平衡器的 IP 地址,则续订过程将失败。配置代管式证书后,请确保所有网域和子网域仍指向负载平衡器的 IP 地址,以免续订失败。

可选步骤

指定允许颁发 Google 管理的证书的证书授权机构

在您的 DNS 服务器软件中,指定允许颁发 Google 管理的证书的证书授权机构。为此,请创建或修改 CAA 记录,使其包含 pki.goog 和/或 letsencrypt.org。如果您没有 CAA 记录,则默认行为是同时允许 pki.googletsencrypt.org

DOMAIN. CAA 0 issue "pki.goog"
DOMAIN. CAA 0 issue "letsencrypt.org"

letsencrypt.org 证书的支持是以尽力而为的方式提供的。为获得最高的可靠性,请同时允许 pki.googletsencrypt.org。如果您仅指定了一个证书授权机构,则只有该机构才会用于创建和续订您的证书。不推荐使用此方法。

在您首次创建证书时,Google Cloud 会选择 pki.googletsencrypt.org,并使用它颁发您的证书。当 Google 续订您的证书时,证书可能会由另一个证书授权机构颁发,具体取决于您在 CAA 记录(如果您创建了记录)中指定的证书授权机构。在以下任一情况下,您的证书都可能由其他证书授权机构续订:

  • 您的网域没有 DNS CAA 记录。
  • 您已将两个证书授权机构都添加到了 DNS CAA 记录中。

如需了解详情,请参阅 RFC 证书授权机构授权 (CAA) DNS 记录

国际化域名 (IDN)letsencrypt.org 签发。pki.goog 目前不支持国际化域名。

如果您使用的是 Cloud DNS,请了解如何添加记录,并确保将 --type 标志设置为 CAA

替换现有 SSL 证书

要替换现有 SSL 证书,请执行以下操作:

  1. 开始创建替代性 Google 管理的 SSL 证书的过程。请注意,此证书此时不会变为 ACTIVE。

  2. 更新目标代理,以使引用的证书列表包含替代性 SSL 证书以及当前的 SSL 证书。更新目标代理的步骤有所不同,如下所示:

  3. 等待替代性 SSL 证书完成预配过程。此过程最多可能需要 60 分钟。预配过程成功完成后,证书状态将变为 ACTIVE

  4. 请再等待 30 分钟,以确保替代性证书可供所有 Google Front End (GFE) 前端使用。

  5. 更新目标代理,以从引用的证书列表中移除要替换的 SSL 证书。更新目标代理的步骤有所不同,如下所示:

  6. 等待 10 分钟,并确认负载平衡器使用的是替代性 SSL 证书,而不是旧的 SSL 证书。

  7. (可选)删除旧的 SSL 证书资源

如果您不删除旧的 SSL 证书,则该证书在有效期结束前将保持 ACTIVE 状态。

从自行管理的 SSL 证书迁移到 Google 管理的 SSL 证书

将负载平衡器从使用自行管理的 SSL 证书迁移到 Google 管理的 SSL 证书时,您必须按以下顺序执行下列步骤:

  1. 创建 Google 管理的新证书
  2. 将 Google 管理的新证书与正确的目标代理相关联,同时保持目标代理与现有自行管理的证书的关联。
  3. 请等待 Google 管理的证书的状态变为 ACTIVE
  4. 等待 30 分钟,让新证书传播到提供服务的 Google Front End (GFE) 前端。
  5. 再次更新目标代理,移除自行管理的证书。

删除 SSL 证书

在删除 SSL 证书之前,请确保没有 HTTPS 或 SSL 目标代理引用此证书。可以通过以下两种方法实现此目的:

如需删除一个或多个 SSL 证书,请执行以下操作:

控制台

您可以在负载平衡页面的证书标签页上删除 SSL 证书。

  1. 转到 Google Cloud Console 中的“证书”页面。
    转到“证书”页面
  2. 选择要删除的 SSL 证书。
  3. 点击删除
  4. 再次点击删除进行确认。

gcloud

如需删除全球 SSL 证书(针对外部 HTTP(S) 负载平衡器或 SSL 代理负载平衡器),请使用带有 --global 标志的 gcloud compute ssl-certificates delete 命令:

gcloud compute ssl-certificates delete CERTIFICATE_NAME \
    --global

请将占位符替换为有效值:

  • CERTIFICATE_NAME:SSL 证书的名称

后续步骤