【Azure Cloud Service】使用RESTAPI更新Cloud Service(Extended Support) 中所配置的證書

路边两盏灯發表於2024-10-12

問題描述

當根據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中,然後複製出證書的指紋資訊和機密標識:

【Azure Cloud Service】使用RESTAPI更新Cloud Service(Extended Support) 中所配置的證書

  • 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

【Azure Cloud Service】使用RESTAPI更新Cloud Service(Extended Support) 中所配置的證書

注意,在中國區需要修改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

【Azure Cloud Service】使用RESTAPI更新Cloud Service(Extended Support) 中所配置的證書

準備好以上的內容後,既可以進行第三步,傳送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。點選傳送,檢視請求的狀態。

【Azure Cloud Service】使用RESTAPI更新Cloud Service(Extended Support) 中所配置的證書

同時,可以回到Cloud Service (Extended Support) Azure門戶頁面,檢視證書是否成功修改。

【Azure Cloud Service】使用RESTAPI更新Cloud Service(Extended Support) 中所配置的證書

同時,更深入的驗證是透過RDP到雲服務的節點中,檢視證書資訊!

RDP --> 輸入“cert” --> 選擇“Manage Computer Certificates” --> 檢視 Pernonal Certificates

【Azure Cloud Service】使用RESTAPI更新Cloud Service(Extended Support) 中所配置的證書

【END】

相關文章