Azure App Service执行槽位交换时公共证书未保留到生产槽问题求助
问题根因
- 官方文档描述的交换自动同步公共证书,仅适用于用户自行上传的自定义公共证书,Azure提供的免费托管证书默认属于槽位粘性资源,不会随槽位交换同步,属于产品设计限制。
- 配置
WEBSITE_OVERRIDE_PRESERVE_DEFAULT_STICKY_SLOT_SETTINGS为False未生效,是因为该全局配置优先级低于单独配置的槽位粘性规则,证书绑定相关的规则默认仍被标记为粘性。
可行解决方案
方案1:调整槽位粘性规则实现交换自动同步
移除证书相关配置的粘性属性,交换时即可自动同步证书绑定:
# 获取当前App Service的槽位粘性配置 $slotConfig = Get-AzWebAppSlotConfigName -ResourceGroupName $ResourceGroup -Name $ServiceName # 从粘性配置列表中移除证书相关条目 $slotConfig.ConnectionStringNames = $slotConfig.ConnectionStringNames | Where-Object { $_ -notlike "*certificate*" } $slotConfig.AppSettingNames = $slotConfig.AppSettingNames | Where-Object { $_ -notlike "*WEBSITE_LOAD_CERTIFICATES*" } # 更新槽位粘性配置 Set-AzWebAppSlotConfigName -ResourceGroupName $ResourceGroup -Name $ServiceName -AppSettingNames $slotConfig.AppSettingNames -ConnectionStringNames $slotConfig.ConnectionStringNames
配置完成后再执行槽位交换,证书绑定会随交换同步到生产槽。
方案2:预绑定证书到暂存槽(推荐,稳定性更高)
App Service公共证书属于订阅级资源,可直接绑定到同一应用的所有槽,无需跨槽复制,操作步骤:
- 列出当前订阅下所有公共证书获取目标证书指纹
Get-AzWebAppCertificate -ResourceGroupName $ResourceGroup | Select-Object Thumbprint, SubjectName
- 执行绑定命令将证书绑定到暂存槽
New-AzWebAppSSLBinding -ResourceGroupName $ResourceGroup -WebAppName $ServiceName -Slot $SourceSlotName -Name "你的应用域名" -CertificateThumbprint "目标证书指纹" -SslState SniEnabled
- 执行正常槽位交换即可,交换完成后可按需清理旧暂存槽的冗余证书绑定。
注意事项
如果使用的是Azure免费托管证书,不支持跨槽同步,必须为每个槽单独绑定对应域名的托管证书。
内容的提问来源于stack exchange,提问作者Raja Chava
相关产品推荐
相关产品推荐

