文章目录
背景
域名托管在 CloudFlare ,且启用了通用 SSL 的情况下(如下图),CloudFlare 会有一条记录名称为_acme-challenge 的 TXT 记录,GCP申请证书默认使用的 DNS 验证方式为 FIXED_RECORD,此方式也会要求添加一条记录名称为 _acme-challenge 的 CNAME 记录,此时会和 CloudFlare 的 TXT 记录冲突,导致证书下发失败。本文记录一种解决该问题的方案

操作步骤
使用 Cloud Shell 创建 DNS 认证域
gcloud certificate-manager dns-authorizations create [AUTHNAME] --domain=["xxx.com"] --type=PER_PROJECT_RECORD
注意:
- [AUTHNAME] 替换为自定义的 DNS 认证域名称
- [“xxx.com”] 替换为需要申请证书的主域名
- –type为 PER_PROJECT_RECORD 时,CNAME记录是个随机字符串
- type 的默认类型为 FIXED_RECORD 时,CNAME记录为固定的 _acme-challenge ,会和 CloudFlare 的 TXT 记录冲突,导致证书DNS验证失败。所以创建 DNS 认证域时,需要指定 type为 PER_PROJECT_RECORD
使用 Cloud Shell 查看DNS认证域
gcloud certificate-manager dns-authorizations describe [AUTHNAME]

根据上面创建的认证域,去 CloudFlare 添加 CNAME 记录,代理状态为 仅DNS

注:
- [AUTHNAME] 设置为创建的 DNS 认证域名称
添加CNAME解析后创建证书
gcloud certificate-manager certificates create [SSLNAME] --domains=[xxx.com,*.xxx.com] --dns-authorizations=[AUTHNAME]
注:
- [SSLNAME] 替换为自定义证书名称
- [xxx.com,*.xxx.com] 替换为需要申请证书的域名
- 如果创建的证书是需要给 mediaCDN 使用的,需要在创建证书的命令上增加一个参数 –scope=EDGE_CACHE 否则无法在 mediaCDN 处选择该证书
等待10~20分钟,控制台上可以查看是否下发成功

–type 即对应控制台上的授权类型

参考文档:
部署具有 DNS 授权的全球 Google 代管的证书 | Certificate Manager | Google Cloud
© 版权声明
文章版权归作者所有,未经允许请勿转载。