【Azure Cloud Service】使用Key Vault Secret新增.CER證書到Cloud Service Extended Support中

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

問題描述

因為Key Vault的證書上傳功能中,只支援pfx格式的證書,而中間證書,根證書不能轉換為pfx格式,只能是公鑰證書格式 cet 或者 crt,能透過文字工具直接檢視base64編碼內容。

【Azure Cloud Service】使用Key Vault Secret新增.CER證書到Cloud Service Extended Support中

如一個證書鏈檔案中可以看見中間證書,根證書:

【Azure Cloud Service】使用Key Vault Secret新增.CER證書到Cloud Service Extended Support中

當把包含完成證書鏈的證書PFX上傳到Key Vault certificates中後,certificates只會顯示伺服器證書的指紋,導致無法直接在Cloud Service(Extended Support)的配置檔案中修改。

所以,如果中間證書,根證書需要安裝到Cloud Service (Extended Support) 中,要先把中間證書,根證書放置在Key Vault Secrets中,然後呼叫Cloud Service API更新證書和配置Secrets Identifier URL來完成證書配置。

操作步驟

第一步:準備中間證書和根證書的cer 檔案

(* 如果已經有中間證書的cer/crt 檔案,用記事本檢視證書Base64編碼內容則可以跳過第一步)

檢視PFX證書及證書鏈資訊:

mmc certmgr.msc /CERTMGR:FILENAME="C:\Users\... \Downloads\mykey.pfx"

選中中間證書-> Details -> Copy to File

【Azure Cloud Service】使用Key Vault Secret新增.CER證書到Cloud Service Extended Support中

在開啟的嚮導視窗中,點選Next,選擇 "Base-64 encoded X.509 (.CER)“ --》設定儲存路徑 --》 匯出成功

【Azure Cloud Service】使用Key Vault Secret新增.CER證書到Cloud Service Extended Support中

用記事本開啟,檢視證書Base64編碼內容

【Azure Cloud Service】使用Key Vault Secret新增.CER證書到Cloud Service Extended Support中

(重複以上操作,把根證書也儲存為CER檔案)

(非常重要)第二步:把證書內容JSON格式化後,透過az cli命令設定到Key Vault Secret中

(這一步不能透過門戶完成)

把證書的Base64編碼內容填入JSON格式的data中

{
"data": "Your base64 certificate",
"dataType": "PFX",
"password": ""
 }

然後把JSON內容儲存為一個檔案,使用az keyvault secret set --file “” --encoding base64 新增到Key Vault中

注意:可以使用證書指紋作為機密名稱,以方便更好的關聯到證書資訊

【Azure Cloud Service】使用Key Vault Secret新增.CER證書到Cloud Service Extended Support中

## 設定Key Vault機密

##intermediate
az keyvault secret set  --vault-name <key value name> --name <thumbprint>  --file ".\SSL\intermediate.txt" --encoding base64  

##root
az keyvault secret set  --vault-name <key value name> --name <thumbprint>  --file ".\SSL\root.txt" --encoding base64  

執行完成後,從返回結果中獲取到 id 值(Secret Identifier URL).

【Azure Cloud Service】使用Key Vault Secret新增.CER證書到Cloud Service Extended Support中

完成以上內容後,複製出指紋值和Secret ID URL,就可以透過Cloud Service (Extended Support)的API更新證書。

第三步:獲取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】使用Key Vault Secret新增.CER證書到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."
  }
}

【Azure Cloud Service】使用Key Vault Secret新增.CER證書到Cloud Service Extended Support中

獲取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)同時,使用第二步中的機密標識URL來替換舊的certificateUrl值

【Azure Cloud Service】使用Key Vault Secret新增.CER證書到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

PUT https:// management.chinacloudapi.cn /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/cloudServices/{cloudServiceName}?api-version=2022-04-04

使用第三步中同樣的URL,把請求型別修改為PUT,然後把第三步修改的JSON放入Request Body。點選傳送,檢視請求的狀態。

【Azure Cloud Service】使用Key Vault Secret新增.CER證書到Cloud Service Extended Support中

* 如果遇見證書格式不對錯誤,需要檢查Key Vault Secret中儲存的內容是否是正確的JSON格式。

格式不對的錯誤資訊:

{
  "error": {
    "code": "CertificateImproperlyFormatted",
    "message": "The data retrieved from https://XXXXXXXXX.vault.azure.cn/secrets/XXXXX/7eXXXX is not deserializable into JSON."
  }
}

【END】

相關文章