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

news/2024/10/14 20:34:37

问题描述

因为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】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/71597.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

java多线程基础知识速通

1.线程和进程的区别 进程是正在运行的程序实例,每个进程包含了多个线程,每个现场执行不同的任务 进程都有自己的内存空间,而一个进程下的线程们则是共享内存空间 线程更加轻量,线程上下文切换的成本远低于进程上下文切换的成本2.并行与并发的区别 并行是多核CPU一般执行相应…

程序员必看!从菜鸟到专家你要这么做,8年互联网老兵爆肝总结

“互联网行业工作8年多,在国内Top互联网大厂B(ytedance)AT中的两家待过。喜欢研究计算机基础原理,有移动端全栈(包括Android & iOS & 鸿蒙等)开发经验,对逆向和网络安全有一定经验。” 不管是在校大学生,还是初入职场的菜鸟,抑或是在互联网行业打拼多年的老码农…

CTF 的基础知识 题型 Trick总结

idk.references: 1 2 web php 语法基础 references: 1 php 脚本的基本格式: <?php //coding here ?>php 代码同样以 ; 结尾。 php 文件的后缀名大多是 php ,也有诸如 php5 php4 phps 之类,如果普通的后缀名被拦截不妨试试其他的。 php 变量用 $ 来定义,大小写敏感…

微服务03 微服务sentinel, springcloudgateway

6 Sentinel 6.1 Sentinel 介绍和工作机制 6.1.1 微服务流量治理组件介绍 随着微服务的流行,服务和服务之间的调用导致服务的稳定性问题变得越来越重要。 雪崩问题: 微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用,即雪崩。 解决雪崩问题的常见方式有…

Web刷题之polarctf靶场(3)

1. 干正则 打开靶场发现是简单的php代码审计, 先构造id=a[0]=www.polarctf.com, 由于要ping两次, 所以先构造cmd=|ls <?php error_reporting(0); if (empty($_GET[id])) {show_source(__FILE__);die(); } else {include flag.php;$a = "www.baidu.com";$result =…

题解:P2315 [HNOI2005] 数三角形

Problem Link [HNOI2005] 数三角形 题意 输入一个大三角形的各个边存在情况,输出里面有多少个正三角形。 Solution 简单暴力即可,用 \(4\) 个数组维护每条边能延伸的最大长度,然后逐个判断三角形是否可行即可。如图,l_upper 维护左端点向上(即 $\ell_{BA} $),l_lower 维…

梳理好本职工作之项目管理

项目整个里程碑,每个阶段应该输出什么

微服务01 ZooKeeper, Kafka

1.4 微服务 1.4.6 Spring Cloud JAVA 微服务技术 Dubbo是2014年之前阿里退出的分布式系统的技术(不属于微服务)。现在主流是 Spring Cloud Spring Cloud官网地址: https://spring.io/projects/spring-cloud 官网上实现方法有很多种,目前主流是阿里巴巴实现的方法Spring Boot…