問題描述
當根據Cloud Service (Extended Support) 文件更新證書 ( https://docs.azure.cn/zh-cn/cloud-services-extended-support/certificates-and-key-vault )時,如果遇見舊的證書(如中間證書,根證書)資訊儲存在Key Vault Secret中,而更新的時候,只能從Key Vault證書中匹配到伺服器證書(葉子證書)時。 而中間證書,根證書會出現如下錯誤:
出現錯誤資訊為:
在所選金鑰保管庫中找不到 .cscfg 中定義的一個或多個證書。請確保已將所有證書上傳到所選金鑰保管庫,然後單擊下面的重新整理以重新驗證。如果雲服務正在新增基於金鑰保管庫機密的證書,則必須透過門戶以外的方法新增基於機密的證書。
Go to the selected key vault
Learn more about using secret based certificates outside of the portal
而在提示的文件中,可以找到這句話
“但如果計劃將證書用作機密,則無法驗證這些證書的指紋,並且透過門戶進行的任何涉及新增機密的更新操作都會失敗。”
“ 建議客戶使用 PowerShell 或 RestAPI 繼續進行涉及機密的更新。”
本文將介紹如何使用REST API來更新證書!
操作步驟
第一步:上傳證書到Azure Key Vault
根據證書文件步驟(https://docs.azure.cn/zh-cn/cloud-services-extended-support/certificates-and-key-vault#upload-a-certificate-to-key-vault) ,把PFX證書上傳到Key Vault中,然後複製出證書的指紋資訊和機密標識:
- Trumbprint, 證書指紋,具有唯一性,用於判斷證書是否一樣
- Secret Identifier,證書在Key Vault中的儲存地址,儲存的格式為base64加密後的JSON格式,如果是證書檔案並且用於Cloud Service Extended Support,它的格式必須是如下的JSON格式:
{ "data": "Your base64 certificate", "dataType": "PFX", "password": "optional, 如有密碼則填入密碼" }
如: |
第二步:獲取Cloud Service的資訊,呼叫介面為GET API
參考文件:https://learn.microsoft.com/en-us/rest/api/compute/cloud-services/get?view=rest-compute-2024-07-01&tabs=HTTP
注意,在中國區需要修改Host Endpoint為:management.chinacloudapi.cn
GET https:// management.chinacloudapi.cn /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}?api-version=2022-04-04
需要攜帶Authorization Token,否則會獲得如下錯誤:
{
"error": {
"code": "AuthenticationFailed",
"message": "Authentication failed. The 'Authorization' header is missing."
}
}
獲取Token的方式可以透過瀏覽器訪問Cloud Service(Extended Support)門戶,然後透過開發者工具(F12)檢視網路請求,從訪問Cloud Service的請求頭中獲取Authorization內容。或者透過az cli獲取token
az cloud set --name AzureChinaCloud az login az account get-access-token --scope "https://management.core.chinacloudapi.cn/.default" --query accessToken
當成功獲取到Cloud Service的資訊後,調整 JSON內容:刪除Properties中,除了configuration 和 osProfile 外的全部內容。
整理之後JSON格式如下:
{ "name": "cloud service extended support name", "id": "cloud service (extended) support resource id", "type": "Microsoft.Compute/cloudServices", "location": "chinanorth3", "properties": { "configuration": "{ServiceConfiguration}", "osProfile": { "secrets": [ { "sourceVault": { "id": "key vault resource id" }, "vaultCertificates": [ { "certificateUrl": "key vault Secret Identifier" }, { "certificateUrl": "key vault Secret Identifier" }, { "certificateUrl": "key vault Secret Identifier" } ] } ] } } }
需要修改的地方有兩處:
1)configuration內容中Certificates指紋,用第一步中的指紋值替換檔案中需要修改的內容
2)osProfile.secrets中certificateUrl值,用第一步中的機密標識URL來替換舊的certificateUrl
準備好以上的內容後,既可以進行第三步,傳送PUT請求把新證書更新到Cloud Service(Extended Support)
第三步:更新Cloud Service的資訊,呼叫介面為PUT API
參考文件:https://learn.microsoft.com/en-us/rest/api/compute/cloud-services/create-or-update?view=rest-compute-2024-07-01&tabs=HTTP
使用第二步中同樣的URL,把請求型別修改為PUT,然後把第二步修改的JSON放入Request Body。點選傳送,檢視請求的狀態。
同時,可以回到Cloud Service (Extended Support) Azure門戶頁面,檢視證書是否成功修改。
同時,更深入的驗證是透過RDP到雲服務的節點中,檢視證書資訊!
RDP --> 輸入“cert” --> 選擇“Manage Computer Certificates” --> 檢視 Pernonal Certificates
【END】