DNS授权的Google托管证书

作者:MeshCloud脉时云公有云架构师王明立

引言

使用第三方域名想要申请谷歌泛域名托管证书,不更改原来的解析,用于LB的前端访问HTTPS,防止更改解析导致的业务异常。

目标

  • 使用证书管理器创建由具有 DNS 授权的公开信任的 CA 颁发的 Google 管理的证书。
  • 使用目标 HTTPS 代理将证书部署到经典外部 HTTP(S) 负载平衡器。

准备工作

  • 证书管理器所有者
  • Cloud DNS 管理员(如果使用 Cloud DNS 作为您的 DNS 解决方案)
  • 计算负载平衡器管理员

实施步骤

创建 DNS 授权

gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME 
  --domain="DOMAIN_NAME"
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME

替换以下内容:

  • AUTHORIZATION_NAME是描述此 DNS 授权的唯一名称。
  • DOMAIN_NAME是您为其创建此 DNS 授权的域的名称。

此命令返回您必须添加到 DNS 配置中的CNAME 记录。如下

createTime: '2023-03-08T02:10:33.066116203Z'
dnsResourceRecord:
  data: 2d66b255-227c-4bf0-8b91-d9317be35dfa.11.authorize.certificatemanager.goog.
  name: _acme-challenge.spoton.cn.
  type: CNAME
domain: spoton.cn
name: projects/spoton-project/locations/global/dnsAuthorizations/mingli-test
updateTime: '2023-03-08T02:10:33.646127672Z'

将 CNAME 记录添加到您的 DNS 配置

_acme-challenge.spoton.cn.   CNAME  2d66b255-227c-4bf0-8b91-d9317be35dfa.11.authorize.certificatemanager.goog.

创建引用 DNS 授权的 Google 管理的证书

gcloud certificate-manager certificates create CERTIFICATE_NAME 
  --domains=DOMAIN_NAME --dns-authorizations=AUTHORIZATION_NAME

替换以下内容:

  • CERTIFICATE_NAME是描述此证书的唯一名称。
  • DOMAIN_NAME是此证书的目标域,泛域名例如*.spoton.cn
  • AUTHORIZATION_NAME是您为此证书创建的 DNS 授权的名称。

验证证书是否有效

gcloud certificate-manager certificates describe CERTIFICATE_NAME

替换CERTIFICATE_NAME为上一步创建的目标 Google 管理的证书的名称

验证成功后如下(颁发证书过程需要十几分钟)

createTime: '2023-03-08T02:37:47.885415265Z'
expireTime: '2023-06-06T02:37:50Z'
managed:
  authorizationAttemptInfo:
  - domain: '*.spoton.cn'
    state: AUTHORIZED
  dnsAuthorizations:
  - projects/884786875960/locations/global/dnsAuthorizations/mingli-test
  domains:
  - '*.spoton.cn'
  state: ACTIVE
name: projects/spoton-project/locations/global/certificates/spoton-ssl-20230308
pemCertificate: |
  -----BEGIN CERTIFICATE-----
  MIIFWjCCBEKgAwIBAgIRAPAjD4yNDY/CCSrXSW/hZcQwDQYJKoZIhvcNAQELBQAw
  RjELMAkGA1UEBhMCVVMxIjAgBgNVBAoTGUdvb2dsZSBUcnVzdCBTZXJ2aWNlcyBM
  TEMxEzARBgNVBAMTCkdUUyBDQSAxRDQwHhcNMjMwMzA4MDE1MzAxWhcNMjMwNjA2
  ******
  9U5pCZEt4Wi4wStz6dTZ/CLANx8LZh1J7QJVj2fhMtfTJr9w4z30Z209fOU0iOMy
  +qduBmpvvYuR7hZL6Dupszfnw0Skfths18dG9ZKb59UhvmaSGZRVbNQpsg3BZlvi
  d0lIKO2d1xozclOzgjXPYovJJIultzkMu34qQb9Sz/yilrbCgj8=
  -----END CERTIFICATE-----
sanDnsnames:
- '*.spoton.cn'
updateTime: '2023-03-08T02:37:48.360016576Z'

将证书部署到负载均衡器

创建证书映射

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是此证书映射条目附加到的证书映射的名称。

该gcloud工具返回类似于以下内容的输出:

certificates:
- projects/884786875960/locations/global/certificates/spoton-ssl-20230308
createTime: '2023-03-08T02:59:32.240578543Z'
hostname: '*.spoton.cn'
name: projects/spoton-project/locations/global/certificateMaps/ssl-mingli-map/certificateMapEntries/ssl-mingli-map-spoton
state: ACTIVE
updateTime: '2023-03-08T02:59:32.649359127Z'

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

  1. 在 Google Cloud 控制台中,转到目标代理页面。
  2. 记下目标代理的名称,复制下对应LB的https的代理名称。
DNS授权的Google托管证书
  1. 将证书映射附加到目标代理:
gcloud compute target-https-proxies update PROXY_NAME 
 --certificate-map="CERTIFICATE_MAP_NAME"

替换以下内容:

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

如果有任何现有的 TLS (SSL) 证书直接附加到代理,则代理优先考虑证书映射引用的证书,而不是直接附加的 TLS (SSL) 证书。至此所有步骤已完成,等待几分钟测试HTTPS即可生效。

常见问题

Certificate Manager 的资源配额?

配额默认限制描述
Google 管理的证书100Cloud 项目中由 Google 管理的证书总数
自我管理证书100Cloud 项目中的自我管理证书总数
区域自管证书5个Cloud 项目中每个区域的区域自我管理证书总数
证书映射100Cloud 项目中的证书映射总数
证书映射条目1000Cloud 项目中的证书映射条目总数
DNS授权1000Cloud 项目中的 DNS 授权总数
证书颁发配置100Cloud 项目中的证书颁发配置总数

发表评论

您的电子邮箱地址不会被公开。