云和 CDN

Google Cloud 负载均衡器配置 Google 托管 SSL 证书

作者: · 最后核实

Google Cloud 全球外部应用负载均衡器用免费的 Google 托管证书提供 HTTPS:创建证书并挂到 HTTPS 代理上,把 example.com 和 www.example.com 解析到负载均衡器的 IP,Google 就会签发并自动续期。HTTP 跳转用同一个 IP 上的 80 端口规则完成。

以截至 2026 年 11 月的 Google Cloud 为准,命令用 gcloud CLI。

国内用户先看:没有中国大陆区域

Google Cloud 没有中国大陆境内的区域,用它做负载均衡没有问题,但它不能替代在大陆境内托管、需要 ICP 备案的方案。

在 Google Cloud 官方的区域和负载均衡位置列表里,亚太地区有东京、大阪、首尔、新加坡、孟买、雅加达、悉尼等,离中国大陆最近的是香港(asia-east2)和台湾彰化县(asia-east1),列表中没有中国大陆城市。这意味着:

  • 这里的配置本身不涉及国内环境,证书签发、续期都在 Google 那边完成,国内的 DNS 服务商(阿里云云解析、DNSPod 等)可以正常配合使用。
  • 网站必须在中国大陆境内托管的情况,比如要使用国内 CDN 的大陆节点、做需要备案域名的业务,要改用国内云厂商并完成 ICP 备案,HTTPS 配置可以参考 阿里云 CDN 配置 HTTPS 和 腾讯云 CDN 配置 HTTPS。
  • 有 CAA 记录的域名要同时允许 pki.goog 和 letsencrypt.org。如果 CAA 只写了原来在国内云厂商买证书时用的 CA,切到 Google 托管证书时就会在这里卡住。

经典托管证书还是 Certificate Manager

只有几个固定域名、能先把 DNS 切到负载均衡器的,用经典的 Google 托管证书最简单;要通配符、要在切换流量前备好证书,或者证书数量多的,用 Certificate Manager。

两者签出来的都是 DV 证书,都由 Google 自动续期,区别在于怎么证明域名归你:

  • 经典 Google 托管证书(gcloud compute ssl-certificates)用负载均衡器授权,Google 要看到域名已经解析到负载均衡器的 IP 才开始签发。好处是一条命令就能建好,缺点是迁移期间会有一段时间证书还没签出来,而且不支持通配符。
  • Certificate Manager 可以用 DNS 授权:你在 DNS 里加一条 Google 给的 CNAME,Google 据此判断域名归你,不需要流量先切过来,也能签 *.example.com。证书放在证书映射里,再把映射挂到 HTTPS 代理上,适合域名多、经常增减的场景。

从别的云或国内机房迁到 Google Cloud 时,推荐先用 Certificate Manager 的 DNS 授权把证书签好,确认 ACTIVE 之后再改 A 记录,这样切换过程中访客不会看到证书错误。

前提条件

开始前要有一套能正常工作的 HTTP 负载均衡配置。

  • 已登录项目的 gcloud CLI,有 Compute Engine 负载均衡权限(签通配符还要 Certificate Manager 权限)。
  • 应用的后端服务和网址映射(命令里叫 web-map),以及一个预留的全球静态 IP(命令里叫 web-ip),例如 203.0.113.10。
  • 能修改 example.com 的 DNS。
  • 如果有 CAA 记录,允许 pki.goog 和 letsencrypt.org。

第一步:创建 Google 托管证书

经典的 Google 托管证书用一条 gcloud 命令创建,域名写在 --domains 里:

gcloud compute ssl-certificates create web-cert \
  --domains=example.com,www.example.com --global

一张证书可以写多个域名,但每个域名都要解析到这个负载均衡器,任何一个不通都会拖住整张证书。

第二步:创建 HTTPS 代理和转发规则

HTTPS 代理引用证书和网址映射,转发规则把 web-ip 的 443 端口指向这个代理:

gcloud compute target-https-proxies create web-https-proxy \
  --url-map=web-map --ssl-certificates=web-cert --global
gcloud compute forwarding-rules create web-https-rule \
  --load-balancing-scheme=EXTERNAL_MANAGED --global \
  --address=web-ip --target-https-proxy=web-https-proxy --ports=443

可以再挂一个要求 TLS 1.2 及以上的 SSL 政策:

gcloud compute ssl-policies create modern-tls --profile=MODERN --min-tls-version=1.2 --global
gcloud compute target-https-proxies update web-https-proxy --ssl-policy=modern-tls --global

第三步:把 DNS 指向负载均衡器

查出 web-ip 的地址,为 example.com 和 www.example.com 添加 A 记录:

gcloud compute addresses describe web-ip --global --format='get(address)'

Google 看到两个域名都解析到这个 IP 后才开始签发。

第四步:HTTP 跳转 HTTPS

在同一个 IP 上创建只做跳转的网址映射、HTTP 代理和 80 端口转发规则:

cat > redirect.yaml <<'EOF'
kind: compute#urlMap
name: web-redirect
defaultUrlRedirect:
  redirectResponseCode: MOVED_PERMANENTLY_DEFAULT
  httpsRedirect: true
EOF
gcloud compute url-maps import web-redirect --source=redirect.yaml --global
gcloud compute target-http-proxies create web-http-proxy --url-map=web-redirect --global
gcloud compute forwarding-rules create web-http-rule \
  --load-balancing-scheme=EXTERNAL_MANAGED --global \
  --address=web-ip --target-http-proxy=web-http-proxy --ports=80

要签 *.example.com 这样的通配符,改用 Certificate Manager:先创建 DNS 授权(gcloud certificate-manager dns-authorizations create),按返回结果添加 CNAME,再用 --dns-authorizations 创建证书,放进证书映射,最后用 --certificate-map 挂到 HTTPS 代理上。DNS 授权不依赖流量是否已经切过来,适合迁移时提前把证书准备好。

验证

每个域名的状态都变成 ACTIVE 后证书才算签好。先按域名查看签发状态:

gcloud compute ssl-certificates describe web-cert --global \
  --format='get(managed.status, managed.domainStatus)'

状态变成 ACTIVE 后,用 SSL 证书检查 检查,或在终端运行:

curl ssl.sh/example.com
curl -sI http://example.com | grep -iE '^(HTTP|location)'

自动续期

Google 托管证书在到期前自动续期,条件是域名一直解析到这个负载均衡器(负载均衡器授权),或者 DNS 授权的 CNAME 一直保留(Certificate Manager)。你这边不需要运行任何东西。公网证书有效期 2026 年 3 月 15 日起最长 200 天,2029 年 3 月 15 日起 47 天,只是意味着 Google 续得更勤。把 DNS 迁走、删掉授权 CNAME,或新加了排除 Google 所用 CA 的 CAA 记录,续期就会失败。建议把域名加到 ssl.sh 监控(开发中) 作为外部检查。

常见问题排查

  • FAILED_NOT_VISIBLE:域名还没解析到负载均衡器的 IP,改好 A 记录后等待;国内 DNS 服务商的记录同步偶尔较慢。
  • FAILED_CAA_CHECKING 或 FAILED_CAA_FORBIDDEN:CAA 记录排除了 Google 用的 CA,见 CAA 记录阻止签发。
  • 一直停在 PROVISIONING:某个域名有问题,看按域名的状态找出是哪一个,修好 DNS 或从证书里去掉它。
  • 浏览器提示域名不匹配:证书里没有这个主机名,见 NET::ERR_CERT_COMMON_NAME_INVALID。
  • 挂上 MODERN 政策后老客户端连不上:见 ERR_SSL_VERSION_OR_CIPHER_MISMATCH。

常见问题

签发要多久?

域名解析到负载均衡器之后通常几分钟,但 Google 文档允许的时间要长得多,所以不要干等,去看每个域名的状态。用 Certificate Manager 的 DNS 授权时,证书可以在切换流量之前就变成 ACTIVE。

Google 托管证书是哪家 CA 签发的?

可能是 Google Trust Services,也可能是 Let's Encrypt。域名设置了 CAA 记录的,要同时允许 pki.goog 和 letsencrypt.org,否则签发可能失败。可以用 CAA 检查 确认。

能用自己的证书吗?

可以。用 gcloud compute ssl-certificates create 名称 --certificate=fullchain.pem --private-key=key.pem --global 上传自管证书,比如国内云厂商签发的证书或 acme.sh 申请的证书,之后到期前要自己替换。

国内的 DNS 服务商能配合使用吗?

可以。A 记录和 Certificate Manager 要求的 DNS 授权 CNAME 都是普通记录,在阿里云云解析、DNSPod 等服务商添加即可。注意国内服务商的主机记录一栏通常只填前缀,不要把完整域名再填一遍。

资料来源

  1. Google Cloud: Use Google-managed SSL certificates
  2. Google Cloud: Certificate Manager overview
  3. Google Cloud: Set up HTTP-to-HTTPS redirect
  4. Google Cloud: Regions and zones
  5. Google Cloud: Load Balancing locations