问题描述

正常情况下,如果需要为应用服务安装SSL证书,可以在证书准备好的情况,通过门户上传即可,详细步骤可以参考微软官方文档(在 Azure 应用服务中添加 TLS/SSL 证书:https://docs.azure.cn/zh-cn/app-service/configure-ssl-certificate), 但是由于Global Azure和中国区Azure的不同之处,在中国区微软云无法直接在门户中导入Key Vault中的证书。 以下是两个版本页面之间的不同之处:

中国区 Azure 国际版 Azure

那要这样才能在中国区中导入Key Vault中的SSL证书呢? 使用PowerShell脚本完成导入完成。(把KeyVaule中的证书转变为Secrets后,配置到App Service)

执行步骤

1) 在Key Vault中把证书已PFX/PEM格式导出(其实导出证书后,可以直接在App Service中上传证书,只是这样就没有Key Vault来保护证书

  (导航路径: Key Vault --> Settings Certificates --> Certificates Name --> Current Version)

2) 把证书导入到Key Vault中的Secrets中。自定义一个Key Vault Secret Name并复制出key vault的资源ID,第三步会使用到。

  • 选择Upload Options为Certificate
  • 上传第一步中下载的证书
  • 输入证书名:mysitecertfile(第三步 Powershell命令中需要)

3)修改指定的参数,运行PowerShell命令,把证书导入到App Service中

Connect-AzureRmAccount -Environment AzureChinaCloud

$location = "<resource location>"
$ResourceGroupName = "<app service resource group name>"
$AppServicePlanName = "/subscriptions/<subscription id>/resourceGroups/<app service resource group name>/providers/Microsoft.Web/serverfarms/<server farm id>"
$KeyVault = "/subscriptions/<subscription id>/resourcegroups/<key vault resource group name>/providers/microsoft.keyvault/vaults/<key vault name>"
$KeyVaultSecert = "<key vault secret name>" $newCert = "NewCertificate" $PropertiesObject = @{
keyVaultId= $KeyVault
keyVaultSecretName= $KeyVaultSecert
serverFarmId= $AppServicePlanName
} New-AzureRmResource -Name $newCert -Location $location `
-PropertyObject $PropertiesObject `
-ResourceGroupName $ResourceGroupName `
-ResourceType Microsoft.Web/certificates `
-Force

以上值都可以在相对应的资源中查看:

  • $AppServicePlanName:在应用服务的Overview页面中,通过App Service Plan链接进入,在Porperties(左侧目录)页面复制Resource ID值
  • $KeyVault:在Key Vault的Overview页面中,点击Porperties(左侧目录)页面复制Resource ID值
  • 如果登录后,有多个订阅信息,可以通过命令Select-AzureRmSubscription -Subscription '<your subscription name>' 来指定订阅
  • 在执行绑定Key Vault证书时,如果遇见"The service does not have access to '/subscriptions/............/microsoft.keyvault/vaults/...' Key Vault.Please make sure that you have granted necessary permissions to the service to perform the request operation. 需要执行以下两个步骤来为App Service复制访问Key Vault的授权
  1. 在App Service中开启Identity, System Assigned功能,并复制出Object ID用于在Key Value中赋予权限

2. 在Key Vault中的Access Policies中为App Service赋予访问权限

4)访问站点,验证证书。

参考资料

在 Azure 应用服务中添加 TLS/SSL 证书:https://docs.azure.cn/zh-cn/app-service/configure-ssl-certificate

添加系统分配的标识https://docs.azure.cn/zh-cn/app-service/overview-managed-identity?tabs=dotnet#add-a-system-assigned-identity

使用应用服务和 Azure Functions 的 Key Vault 引用https://docs.azure.cn/zh-cn/app-service/app-service-key-vault-references

关于 Azure Key Vaulthttps://docs.azure.cn/zh-cn/key-vault/general/overview

Azure Key Vault 有助于解决以下问题:

  • 机密管理 - Azure Key Vault 可以用来安全地存储令牌、密码、证书、API 密钥和其他机密,并对其访问进行严格控制
  • 密钥管理 - Azure Key Vault 也可用作密钥管理解决方案。 可以通过 Azure Key Vault 轻松创建和控制用于加密数据的加密密钥。
  • 证书管理 - Azure Key Vault 也是一项服务,可用来轻松预配、管理和部署公用和专用传输层安全性/安全套接字层 (TLS/SSL) 证书,以用于 Azure 以及内部连接资源。

为何使用 Azure Key Vault?

集中管理应用程序机密

在 Azure Key Vault 中集中存储应用程序机密就可以控制其分发。 Key Vault 可以大大减少机密意外泄露的可能性。 有了 Key Vault,应用程序开发人员就再也不需要将安全信息存储在应用程序中。 无需将安全信息存储在应用程序中,因此也无需将此信息作为代码的一部分。 例如,如果某个应用程序需要连接到数据库, 则可将连接字符串安全地存储在 Key Vault 中,而不是存储在应用代码中。

应用程序可以使用 URI 安全访问其所需的信息。 这些 URI 允许应用程序检索特定版本的机密。 这样就不需编写自定义代码来保护存储在 Key Vault 中的任何机密信息。

【应用服务 App Service】App Service证书导入,使用Key Vault中的证书的更多相关文章

  1. 【Azure 环境】把OpenSSL生产的自签名证书导入到Azure Key Vault Certificate中报错

    问题描述 通过本地生成的自签名证书导入到Azure Key Vault Certificate报错. 错误信息 the specified PEM X.509 certificate content ...

  2. Android : 关于HTTPS、TLS/SSL认证以及客户端证书导入方法

    一.HTTPS 简介 HTTPS 全称 HTTP over TLS/SSL(TLS就是SSL的新版本3.1).TLS/SSL是在传输层上层的协议,应用层的下层,作为一个安全层而存在,翻译过来一般叫做传 ...

  3. 使用jdk生成证书以及把证书导入到jdk中

    证书对于实现此单点登录非常之重要,证书是服务器端和客户端安全通信的凭证,本教程只是演示,所有用了JDK自带的证书生成工具keytool.当然在实际项目中你可以到专门的证书认证中心购买证书. 中文官方网 ...

  4. java将SSL证书导入系统密钥库

    之前安装JIRA和Confluence,配置了SSL证书之后遇到应用程序链接的问题: SSL证书不被信任,导致JIRA和Confluence无法关联. 尝试过很多办法无果之后打算放弃. 最终还是放弃了 ...

  5. charles证书导入系统信任区(Android7.0以上)

    打开charles,跟着下图来,下载好charles的证书 后缀是pem的格式,挺方便的了,burp的证书是der的,还需要再进一步转化成pem,这里就不再多说, 利用openssl来计算出文件名 加 ...

  6. 【Azure Developer - 密钥保管库 】使用 Python Azure SDK 实现从 Azure Key Vault Certificate 中下载证书(PEM文件)

    问题描述 在Azure Key Vault中,我们可以从Azure门户中下载证书PEM文件到本地. 可以通过OpenSSL把PFX文件转换到PEM文件.然后用TXT方式查看内容,操作步骤如下图: Op ...

  7. Azure App object和Service Principal

    为了把Identity(身份)和Access Management function(访问管理功能)委派给Azure AD,必须向Azure AD tenant注册应用程序.使用Azure AD注册应 ...

  8. 导入android源码中的APP源码到eclipse

    导入android源码中的APP源码到eclipse 一般最简单的办法就是创建新的android工程,选择create project from existing source选项,直接导入源码就OK ...

  9. APP中https证书有效性验证引发安全问题(例Fiddler可抓https包)

    原文: https://blog.csdn.net/woddle/article/details/71175140 在实际项目代码审计中发现,目前很多手机银行虽然使用了https通信方式,但是只是简单 ...

随机推荐

  1. python-igraph

    linux安装python-igraph: $ sudo apt-get install -y libigraph0-dev $ pip install python-igraph ------for ...

  2. java安全编码指南之:异常处理

    目录 简介 异常简介 不要忽略checked exceptions 不要在异常中暴露敏感信息 在处理捕获的异常时,需要恢复对象的初始状态 不要手动完成finally block 不要捕获NullPoi ...

  3. Spring AOP系列(二) — 动态代理引言

    接上一篇Spring AOP系列(一)- 代理模式,本篇来聊聊动态代理. 动态代理与静态代理的区别 要想了解动态代理与静态代理的区别,需要有两个前置知识点:java程序是如何执行的以及类加载机制. j ...

  4. Centos-搜索文件或目录-find

    find 在指定的目录下查找指定的文件 相关选项 -type 指定文件类型 -name   指定文件名字,支持通配符 -gid   指定用户组ID -uid   指定用户ID -empty 查找长度为 ...

  5. Communicating to 2 SPI Slaves with USART & SPI ports on Atmega16U2

    原文来自:https://www.avrfreaks.net/comment/2236256 I'm writing code for an embedded chip that consists o ...

  6. 【题解】CF940F Machine Learning

    Link 题目大意:单点修改,每次询问一个区间的所有颜色出现次数的\(\text{Mex}.\) 例如,区间中三种颜色分别出现了\(2,2,3\)次,又因为其他颜色出现次数一定是\(0\),所以这里的 ...

  7. Tensorflow学习笔记No.6

    数据的批标准化 本篇主要讲述什么是标准化,为什么要标准化,以及如何进行标准化(添加BN层). 1.什么是标准化 传统机器学习中标准化也叫做归一化. 一般是将数据映射到指定的范围,用于去除不同维度数据的 ...

  8. Nuxt/Vue自定义导航栏Topbar+标签栏Tabbar组件

    基于Vue.js实现自定义Topbar+Tabbar组件|仿咸鱼底部凸起导航 最近一直在倒腾Nuxt项目,由于Nuxt.js是基于Vue.js的服务端渲染框架,只要是会vue,基本能很快上手了. 一般 ...

  9. Windows 系统蓝屏错误小全

    0 0x00000000 作业完成. 1 0x00000001 不正确的函数. 2 0x00000002 系统找不到指定的档案. 3 0x00000003 系统找不到指定的路径. 4 0x000000 ...

  10. linux块设备驱动---相关结构体(转)

    上回最后面介绍了相关数据结构,下面再详细介绍 块设备对象结构 block_device 内核用结构block_device实例代表一个块设备对象,如:整个硬盘或特定分区.如果该结构代表一个分区,则其成 ...