本文讲解如何使用 dns 授权方式申请 google cloud 证书,通过查阅官方文档可以得知可以使用 gcloud 和 Certificate Manager API 来申请证书,本文使用 gcloud 命令行工具来执行步骤。

创建 DNS 授权

第一步是创建 DNS 授权,使用以下命令来创建:

1
2
3
gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
  --domain="DOMAIN_NAME"
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME

需要将 AUTHORIZATION_NAME 和 DOMAIN_NAME 分别替换为 dns 授权的名称和相应的域名。

先创建 dns 授权然后查看授权的详细信息

1
2
gcloud certificate-manager dns-authorizations create overstarry --domain="overstarry.vip"
gcloud certificate-manager dns-authorizations describe overstarry

img.png

根据返回的 cname 信息,需要到相应的域名解析中添加 cname 记录.

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

接下来 创建引用 DNS 授权的 Google 管理的证书,使用以下命令创建:

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

CERTIFICATE_NAME 是证书名称,DOMAIN_NAME 域名,AUTHORIZATION_NAME 是 dns 授权名称。

1
2
gcloud certificate-manager certificates create overstarry \
  --domains=*.overstarry.vip --dns-authorizations=overstarry

接下来使用 gcloud certificate-manager certificates describe CERTIFICATE_NAME 来查看刚刚创建的证书的状态。会返回以下类似输出:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
certificatePem: myPEM
createTime: '2021-10-20T12:19:53.370778666Z'
expireTime: '2022-05-07T05:03:49Z'
managed:
  authorizationAttemptInfo:
  - domain: example.com
    state: AUTHORIZED
  dnsAuthorizations:
  - projects/my-project/locations/global/dnsAuthorizations/myAuth
  domains:
  - example.com
  state: ACTIVE
name: projects/myProject/locations/global/certificates/myCert
scope: myScope
sanDnsnames:
- example.com
updateTime: '2021-10-20T12:19:55.083385630Z'

ACTIVE 状态表示证书已经签发成功了,如果 state 是PROVISIONING 状态,说明dns-auth 已经验证过,现在需要等待签发证书,需要等待10-30分钟。

创建证书 maps

使用以下命令创建证书映射:

1
gcloud certificate-manager maps create CERTIFICATE_MAP_NAME

CERTIFICATE_MAP_NAME 为证书映射的名称。

1
gcloud certificate-manager maps create overstarry

创建证书 maps entries

使用以下命令创建证书 maps entries:

1
2
3
4
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是要与此证书映射条目关联的主机名。
1
2
3
gcloud certificate-manager maps entries create overstarry    \
 --map="overstarry"   --certificates="overstarry" \
 --hostname="*.overstarry.vip"

maps 附加到 lb 上

现在需要将 maps 附加到 lb 上:

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

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

1
2
gcloud compute target-https-proxies update xx-target-proxy-2 \
 --certificate-map="overstarry"

过了一会就可以看到证书已经成功生效了。

参考