【Azure Cloud Service】使用Key Vault Secret添加.CER证书到Cloud Service Extended Support中

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
性能测试 PTS,5000VUM额度
云原生网关 MSE Higress,422元/月
简介: 由于Key Vault仅支持上传pfx格式的证书,而中间证书和根证书通常为crt或cer格式,无法直接转换为pfx。因此,将完整的证书链上传至Key Vault后,只能显示服务器证书的指纹,无法直接在Cloud Service (Extended Support)中修改。解决方法是先将中间证书和根证书存储在Key Vault Secrets中,再通过调用Cloud Service API更新证书配置。具体步骤包括准备证书文件、将证书内容JSON格式化并使用az cli命令设置到Key Vault Secret中,最后通过API更新Cloud Service信息。

问题描述

因为Key Vault的证书上传功能中,只支持pfx格式的证书,而中间证书,根证书不能转换为pfx格式,只能是公钥证书格式 cet 或者 crt,能通过文本工具直接查看base64编码内容。

如一个证书链文件中可以看见中间证书,根证书:

当把包含完成证书链的证书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

在打开的向导窗口中,点击Next,选择 "Base-64 encoded X.509 (.CER)“ --》设置保存路径 --》 导出成功

用记事本打开,查看证书Base64编码内容

(重复以上操作,把根证书也保存为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中

注意:可以使用证书指纹作为机密名称,以方便更好的关联到证书信息

## 设置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).

完成以上内容后,复制出指纹值和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

注意,在中国区需要修改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)同时,使用第二步中的机密标识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

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

 

使用第三步中同样的URL,把请求类型修改为PUT,然后把第三步修改的JSON放入Request Body。点击发送,查看请求的状态。

* 如果遇见证书格式不对错误,需要检查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】

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

相关文章
|
1月前
|
JSON API 数据安全/隐私保护
【Azure Cloud Service】使用RESTAPI更新Cloud Service(Extended Support) 中所配置的证书
本文介绍了在更新Azure Cloud Service (Extended Support) 证书时,若旧证书(如中间证书、根证书)存储在Key Vault Secret中,而新证书仅匹配到服务器证书时,可能导致的错误及解决方法。建议使用PowerShell或RestAPI进行涉及机密的更新。文章详细描述了使用REST API更新证书的三个步骤:上传证书到Azure Key Vault、获取Cloud Service信息并发送GET请求、更新Cloud Service信息并发送PUT请求。通过这些步骤,可以成功更新证书并在云服务节点中验证证书信息。
|
3月前
|
存储 安全 网络安全
【应用服务 App Service】App Service证书导入,使用Key Vault中的证书
【应用服务 App Service】App Service证书导入,使用Key Vault中的证书
|
3月前
|
网络安全 数据安全/隐私保护
【Azure 应用服务】 在App Service中无法上传证书[Private Key Certificates (.pfx)],导入Azure Key Vault中的证书也无法成功
【Azure 应用服务】 在App Service中无法上传证书[Private Key Certificates (.pfx)],导入Azure Key Vault中的证书也无法成功
|
3月前
|
Java
【Azure 应用服务】在App Service 中如何通过Managed Identity获取访问Azure资源的Token呢? 如Key Vault
【Azure 应用服务】在App Service 中如何通过Managed Identity获取访问Azure资源的Token呢? 如Key Vault
|
3月前
|
安全 前端开发 网络安全
【Azure App Service】访问App Service应用报错 SSL: WRONG_VERSION_NUMBER
【Azure App Service】访问App Service应用报错 SSL: WRONG_VERSION_NUMBER
136 0
|
3月前
|
API 网络架构
【Azure Cloud Service(Extended Support)】如何使用外延服务迁移应用?
【Azure Cloud Service(Extended Support)】如何使用外延服务迁移应用?
|
3月前
|
存储 安全 数据安全/隐私保护
【Azure 环境】Azure Key Vault 采用自签名证书,是否需要CA provider
【Azure 环境】Azure Key Vault 采用自签名证书,是否需要CA provider
|
3月前
|
数据中心 容器
【Azure 应用服务】在创建App Service时,遇见“No available instances to satisfy this request. App Service is attempting to increase capacity.”错误
【Azure 应用服务】在创建App Service时,遇见“No available instances to satisfy this request. App Service is attempting to increase capacity.”错误
|
3月前
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
|
3月前
|
Linux 网络安全 API
【Azure 应用服务】App Service For Linux 环境中,如何从App Service中获取GitHub私有库(Private Repos)的Deploy Key(RSA key)呢?
【Azure 应用服务】App Service For Linux 环境中,如何从App Service中获取GitHub私有库(Private Repos)的Deploy Key(RSA key)呢?