You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带CNAME链的Azure Front Door自定义域名托管证书续期自动化

自动化Azure Front Door托管证书TXT验证续期方案

针对CNAME委托架构下Azure托管证书自动续期失败、需手动更新_dnsauth TXT记录的问题,可通过以下步骤实现自动化流程:

核心操作:调用RegenerateValidationToken API

Azure Front Door的自定义域名资源提供了RegenerateValidationToken操作,对应门户中"重新生成验证令牌"的功能,可通过REST API、Azure CLI或PowerShell触发。

1. 定期检查证书验证状态

先判断自定义域名是否处于证书验证pending状态:

  • Azure CLI:
VALIDATION_STATE=$(az afd custom-domain show --resource-group <你的资源组名> --profile-name <你的AFD配置文件名> --name <自定义域名> --query "properties.validationProperties.validationState" -o tsv)
  • PowerShell:
$domain = Get-AzFrontDoorCustomDomain -ResourceGroupName <你的资源组名> -FrontDoorName <你的AFD配置文件名> -Name <自定义域名>
$validationState = $domain.ValidationProperties.ValidationState

2. 触发验证令牌重生成

当状态为Pending时,调用重生成接口:

  • Azure CLI(通过az rest):
az rest --method post --uri "/subscriptions/<你的订阅ID>/resourceGroups/<你的资源组名>/providers/Microsoft.Cdn/profiles/<你的AFD配置文件名>/customDomains/<自定义域名>/regenerateValidationToken?api-version=2023-05-01"
  • PowerShell(通过Invoke-AzRestMethod):
Invoke-AzRestMethod -Path "/subscriptions/<你的订阅ID>/resourceGroups/<你的资源组名>/providers/Microsoft.Cdn/profiles/<你的AFD配置文件名>/customDomains/<自定义域名>/regenerateValidationToken?api-version=2023-05-01" -Method Post

3. 获取新的TXT验证记录值

重生成后,提取新的_dnsauth令牌:

  • Azure CLI:
NEW_TXT_TOKEN=$(az afd custom-domain show --resource-group <你的资源组名> --profile-name <你的AFD配置文件名> --name <自定义域名> --query "properties.validationProperties.validationTokens[?type=='TXT'].token" -o tsv)
  • PowerShell:
$domain = Get-AzFrontDoorCustomDomain -ResourceGroupName <你的资源组名> -FrontDoorName <你的AFD配置文件名> -Name <自定义域名>
$newTxtToken = ($domain.ValidationProperties.ValidationTokens | Where-Object { $_.Type -eq 'TXT' }).Token

4. 更新DNS TXT记录

根据你的DNS服务商,用对应工具更新_dnsauth.<你的自定义域名>的TXT记录值为上述NEW_TXT_TOKEN:

  • 若使用Azure DNS,Azure CLI示例:
az network dns record-set txt update --resource-group <DNS资源组名> --zone-name <根域名> --record-set-name "_dnsauth.www" --set records[0].value="$NEW_TXT_TOKEN"
  • 若使用Azure DNS,PowerShell示例:
$recordSet = Get-AzDnsRecordSet -ResourceGroupName <DNS资源组名> -ZoneName <根域名> -Name "_dnsauth.www" -RecordType TXT
$recordSet.Records[0].Value = $newTxtToken
Set-AzDnsRecordSet -RecordSet $recordSet

流水线搭建建议

  • 用Azure DevOps Pipeline或GitHub Actions设置定期触发(建议每月一次,提前证书到期30天执行)
  • 流程节点:Azure登录 → 检查验证状态 → (若pending)重生成令牌 → 获取新token → 更新DNS记录 → (可选)验证状态确认
  • 添加错误处理:状态非pending时跳过执行,更新DNS后等待10-15分钟再检查验证状态是否转为Succeeded

权限要求

确保执行流程的服务主体拥有以下权限:

  • 对Front Door自定义域名的Microsoft.Cdn/profiles/customDomains/regenerateValidationToken/action权限
  • 对DNS区域的Microsoft.Network/dnsZones/TXT/records/write权限

内容的提问来源于stack exchange,提问作者Lukas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 16:32:44