Azure

MultiSite Azure 應用程序網關錯誤:“必須為證書指定數據或 KeyVaultSecretId”

  • January 6, 2022

在應用程序網關上添加第二個多站點 HTTPS 偵聽器時,出現以下異常:

無法將配置更改保存到應用程序網關“MyAppGateway”。錯誤:必須為應用程序網關中的證書“MyResourceGroup/providers/Microsoft.Network/applicationGateways/MyAppGateway/sslCertificates/myCertificateName”>MyAppGateway/myCertificateName 指定數據或 KeyVaultSecretId。

無論我是為兩個偵聽器使用相同的證書(SAN 列表涵蓋不同的域),還是為每個偵聽器配置單獨的證書,都會發生此錯誤。

一旦遇到此錯誤,我就無法以任何方式更新應用程序網關/唯一的解決方法似乎是刪除它。

這是一個已知問題,還是我做錯了什麼?我正在按照此處描述的步驟進行操作;只有我對初始 SSL 證書使用自簽名證書(即,而不是讓 LetsEncrypt 頒發初始證書/因為它無論如何都會被覆蓋)。當我為單個站點執行此 POC 時,一切都按預期工作;所以這個問題似乎與我對多站點功能的使用有關(即有不同的 FQDN 指向應用程序網關的共享公共 IP,然後根據主機標頭值將請求路由到不同的後端)。

修復損壞的應用程序網關狀態

通過執行以下 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 頒發的證書、各種證書名稱和導出密碼)。最終我發現使用不包含井號 ( £) 符號的導出密碼和包含連字元 () 的證書名稱-允許我創建一個不會導致應用程序網關遇到配置錯誤的偵聽器/轉到無效狀態。

引用自:https://serverfault.com/questions/1063486