GCP App Engine使用Certbot申请通配符SSL证书提示挑战失败
通配符SSL证书签发TXT记录缺失问题解决方案
前置检查
- 确认已安装Certbot的Google DNS插件,未安装可执行对应系统的安装命令:
- Debian/Ubuntu 系:
sudo apt install python3-certbot-dns-google - RHEL/CentOS 系:
sudo yum install python3-certbot-dns-google
- Debian/Ubuntu 系:
1. 校验服务账号密钥与权限
- 传入
--dns-google-credentials参数的密钥路径必须为绝对路径,sudo环境下相对路径会因工作目录变化无法识别 - 确认服务账号的
DNS Administrator角色已绑定到example.com DNS区域所属的GCP项目,无上层组织/文件夹的IAM限制阻止记录写入 - 可手动测试权限有效性:运行以下命令替换对应参数,确认可正常创建测试TXT记录,测试完成后删除即可
gcloud dns record-sets create _acme-challenge.example.com. --type=TXT --ttl=300 --rrdatas="test" --zone=你的Cloud DNS区域名称 --iam-account=你的服务账号邮箱
2. 调整DNS传播等待时长
GCP Cloud DNS的全球传播通常需要60秒以上,默认的插件等待时间不足会导致校验时记录未同步完成,执行命令时增加--dns-google-propagation-seconds参数设置等待时长为120秒,参考命令:
sudo certbot certonly --dns-google --dns-google-credentials /绝对路径/到/你的/密钥.json -d *.example.com --dns-google-propagation-seconds 120
如果仍报错可将该值调整为300秒重试。
3. 校验域名NS记录配置
运行nslookup -type=NS example.com查询公网返回的NS服务器地址,确认和你Cloud DNS区域详情页给出的NS地址完全一致,若不一致需要先到域名注册商后台修改NS记录为Cloud DNS的地址,等待NS记录生效后再重试证书申请。
可选优化
如果需要证书同时覆盖根域名example.com,可以在命令中追加-d example.com参数,实现一张证书同时支持根域名和所有通配子域名:
sudo certbot certonly --dns-google --dns-google-credentials /绝对路径/到/你的/密钥.json -d *.example.com -d example.com --dns-google-propagation-seconds 120
内容的提问来源于stack exchange,提问作者Max van der Weide
相关产品推荐
相关产品推荐

