MultiSite Azure 应用程序网关错误:“必须为证书指定数据或 KeyVaultSecretId”

MultiSite Azure 应用程序网关错误:“必须为证书指定数据或 KeyVaultSecretId”

在应用程序网关上添加第二个多站点 HTTPS 侦听器时,出现以下异常:

无法将配置更改保存到应用程序网关“MyAppGateway”。错误:必须为应用程序网关中的证书“MyResourceGroup/providers/Microsoft.Network/applicationGateways/MyAppGateway/sslCertificates/myCertificateName'>MyAppGateway/myCertificateName”指定数据或 KeyVaultSecretId。

无论我对两个侦听器使用相同的证书(SAN 列表涵盖不同的域),还是为每个侦听器配置单独的证书,都会发生此错误。

一旦遇到此错误,我将无法以任何方式更新应用程序网关/唯一的解决方法似乎是删除它。

这是一个已知问题,还是我做错了?我正在按照描述的步骤操作这里;只有我使用自签名证书作为初始 SSL 证书(即而不是让 LetsEncrypt 颁发初始证书 / 因为它无论如何都会被覆盖)。当我为单个站点进行 POC 时,一切都按预期工作;所以问题似乎与我对多站点功能的使用有关(即,让不同的 FQDN 指向应用程序网关的共享公共 IP,然后根据主机标头值将请求路由到不同的后端)。

答案1

修复损坏的应用程序网关状态

我能够通过运行以下 PowerShell 删除有问题的证书。我在门户上找不到任何选项。

# Install-Module 'Az.Network' # required for first use
Import-Module 'Az.Network'
$appGw = Get-AzApplicationGateway -ResourceGroupName 'myResourceGroup' -Name 'myAppGateway'
$cert = Get-AzApplicationGatewaySslCertificate -Name 'myCertificateName' -ApplicationGateway $appGw
$cert # see below for info on what this showed

# Delete the cert
Remove-AzApplicationGatewaySslCertificate -Name 'myCertificateName' -ApplicationGateway $appGw | Out-Null #out null because otherwise we see the full updated definition of the app gateway

# Also remove the associated listener, so we don't leave it in an invalid state
Remove-AzApplicationGatewayHttpListener -Name 'myHttpsListener' -ApplicationGateway $appGw | Out-Null

# Update the resource in Azure (earlier commands just updated our local variable/representation of the resource)
Set-AzApplicationGateway -ApplicationGateway $appGw | Out-Null

通过查看返回的证书的值(即在我们删除它之前),我们发现了问题。问题不在于我添加了第二个证书,而是第一个证书使网关处于无效状态,尽管我完成该步骤时说它是成功的。

Data              :
Password          :
PublicCertData    :
KeyVaultSecretId  :
ProvisioningState : Failed
Type              : Microsoft.Network/applicationGateways/sslCertificates
Name              : myCertificateName
Etag              : W/"00000000-1111-2222-3333-444444444444"
Id                : /subscriptions/mySubscriptionId/resourceGroups/myResourceGroup/providers/Microsoft.Network/applicationGateways/myAppGatway/sslCertificates/myCertificateName

根本原因

我尝试了几个选项(例如 LetsEncrypt 颁发的证书、各种证书名称和导出密码)。最后我发现,使用不包含井号 ( £) 符号的导出密码和包含连字符 ( -) 的证书名称可以让我创建一个不会导致应用网关出现配置错误/进入无效状态的侦听器。

答案2

我发现,如果我尝试通过密钥库安装证书,就会出现此错误。但是,如果我直接上传 PFX 文件(通过门户中的“侦听器”刀片),它就可以正常工作 - 如果我随后将其改回从密钥库获取证书,则一切都会正常进行。

相关内容