本文讲解如何使用 dns 授权方式申请 google cloud 证书,通过查阅官方文档可以得知可以使用 gcloud 和 Certificate Manager API 来申请证书,本文使用 gcloud 命令行工具来执行步骤。
创建 DNS 授权
第一步是创建 DNS 授权,使用以下命令来创建:
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 授权然后查看授权的详细信息
gcloud certificate-manager dns-authorizations create overstarry --domain="overstarry.vip"
gcloud certificate-manager dns-authorizations describe overstarry
根据返回的 cname 信息,需要到相应的域名解析中添加 cname 记录.
创建引用 DNS 授权的 Google 管理的证书
接下来 创建引用 DNS 授权的 Google 管理的证书,使用以下命令创建:
gcloud certificate-manager certificates create CERTIFICATE_NAME \
--domains=DOMAIN_NAME --dns-authorizations=AUTHORIZATION_NAME
CERTIFICATE_NAME 是证书名称,DOMAIN_NAME 域名,AUTHORIZATION_NAME 是 dns 授权名称。
gcloud certificate-manager certificates create overstarry \
--domains=*.overstarry.vip --dns-authorizations=overstarry
接下来使用 gcloud certificate-manager certificates describe CERTIFICATE_NAME
来查看刚刚创建的证书的状态。会返回以下类似输出:
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
使用以下命令创建证书映射:
gcloud certificate-manager maps create CERTIFICATE_MAP_NAME
CERTIFICATE_MAP_NAME 为证书映射的名称。
gcloud certificate-manager maps create overstarry
创建证书 maps entries
使用以下命令创建证书 maps entries:
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 create overstarry \
--map="overstarry" --certificates="overstarry" \
--hostname="*.overstarry.vip"
maps 附加到 lb 上
现在需要将 maps 附加到 lb 上:
gcloud compute target-https-proxies update PROXY_NAME \
--certificate-map="CERTIFICATE_MAP_NAME"
PROXY_NAME是目标代理的名称。CERTIFICATE_MAP_NAME是引用您的证书映射条目及其关联证书的证书映射的名称。
gcloud compute target-https-proxies update xx-target-proxy-2 \
--certificate-map="overstarry"
过了一会就可以看到证书已经成功生效了。