Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >如何使用Python上载和配置应用程序服务的SSL证书

如何使用Python上载和配置应用程序服务的SSL证书
EN

Stack Overflow用户
提问于 2017-03-09 00:06:26
回答 2查看 1.8K关注 0票数 0

我正在尝试使用Azure Python来驱动一些服务器配置管理,但我很难确定如何使用API来上传和配置SSL证书。

我可以成功地查询我的Azure帐户来发现WebSiteManagementClient中可用的Azure,并且可以使用DnsManagementClient询问和操作DNS配置。

我还可以使用Azure网站上的说明手动向Azure应用程序服务添加SSL证书。

但是,我根本不清楚我应该使用哪些API端点来安装自定义SSL证书。

如果我有一个名为WebSiteManagementClientclient,那么我可以看到:

  • client.certificates.get_certificate()允许我按名称获取特定的证书--但是client.certificates似乎没有一个API来列出所有可用的证书。
  • client.certificates.create_or_update_certificate()允许我以幂等的方式创建/更新证书--但它需要一个CertificateEnvelope参数,而且我看不出应该在哪里创建该对象。
  • 假设我手动上传了一个证书,我无法确定我将使用哪个API端点在站点上安装该证书。有对get_site_host_name_bindingsdelete_site_host_name_binding的调用,但没有明显的API来创建绑定;对configure_...create_or_update_...有数十次调用,但API端点的命名和API文档在任何方面都无法说明应该使用哪些调用。

谁能给我指明正确的方向?我需要进行哪些Python调用才能上传从第三方获得的证书,并在特定域下的AppService上安装该证书?

附录

以下是一些基于@peter-pan的建议的示例代码:

代码语言:javascript
代码运行次数:0
复制
creds = ServicePrincipalCredentials(
    client_id=UUID('<client>'),
    secret='<secret>',
    tenant=UUID('<tenant>'),
    resource='https://vault.azure.net'
)
kv = KeyVaultClient(
    credentials=creds
)
KEY_VAULT_URI = 'https://<vault>.vault.azure.net/'

with open('example.pfx', 'rb') as f:
    data = f.read()

# Try to get the certificates
for cert in kv.get_certificates(KEY_VAULT_URI):
    print(cert)

# or...
kv.import_certificate(KEY_VAULT_URI, 'cert name', data, 'password')

此代码引发:

代码语言:javascript
代码运行次数:0
复制
KeyVaultErrorException: Operation returned an invalid status code 'Forbidden'

凭据的值适用于其他操作,包括在密钥存储中获取和创建密钥。如果我将凭据修改为已知的坏值,则会得到:

代码语言:javascript
代码运行次数:0
复制
KeyVaultErrorException: Operation returned an invalid status code 'Unauthorized'
EN

回答 2

Stack Overflow用户

发布于 2020-12-31 12:15:56

如果您遵循从密钥库导入证书的App服务演练,它会告诉您,您的应用程序需要读取权限才能从保险库访问证书。但是,要像您正在做的那样,首先将证书导入到密钥库,还需要授予服务主体证书导入权限。尝试在没有导入权限的情况下导入证书将产生“禁止的”错误,就像您正在看到的错误一样。

还有一些新的包可以在Python中使用Key Vault来代替azure-keyvault

azure-身份是与这些包一起使用的用于身份验证的包。

下面是一个使用azure-keyvault-certificates导入证书的示例

代码语言:javascript
代码运行次数:0
复制
from azure.identity import DefaultAzureCredential
from azure.keyvault.certificates import CertificateClient

KEY_VAULT_URI = 'https://<vault>.vault.azure.net/'

credential = DefaultAzureCredential()
client = CertificateClient(KEY_VAULT_URI, credential)

with open('example.pfx', 'rb') as f:
    data = f.read()

client.import_certificate("cert-name", data.encode(), password="password")

通过设置与ServicePrincipalCredentialssecrettenant对应的环境变量,可以提供与secret相同的凭据。

代码语言:javascript
代码运行次数:0
复制
export AZURE_CLIENT_ID="<client>"
export AZURE_CLIENT_SECRET="<secret>"
export AZURE_TENANT_ID="<tenant>"

(我使用Python编写Azure SDK )

票数 1
EN

Stack Overflow用户

发布于 2017-03-14 00:36:05

根据您的描述,根据我的理解,我认为您想上传一个证书并在Azure应用程序服务上使用它。

根据我在Azure的经验,似乎没有任何Python可以直接将证书上传到Azure experience。但是,通过将证书导入Azure密钥库并从Azure App使用它,可以找到解决办法。有关更多细节,请参见下面的docuemtn列表。

  1. Import Certificate REST的Key Valut。相关的Azure是来自这里的方法这里,您可以参考key Vault的参考文献来了解如何使用它。
  2. 关于使用Azue WebApp的密钥库证书的文档有两个:使用Web应用程序中的Azure密钥库 & 通过密钥库部署Azure Web应用程序证书。Azure上证书的Create Or Update REST用于部署,相关的Python是create_or_update,其用法请参考这里

希望能帮上忙。

正如Azure对KeyVault Access Policy的引用所述,如下所示。

访问策略 有些操作要求您的凭据具有正确的访问策略。 如果您有“未经授权”的错误,请使用Azure Portal、Azure CLI或Key Vault Management SDK本身向此凭据添加正确的访问策略。

下面是通过Azure CLI设置证书操作访问策略的步骤。

  1. 为您的应用程序获取Azure服务主体,命令azure ad sp show --search <your-application-display-name>,然后复制Service Principal Names(spn)类似于xxxx-xxxx-xxxxx-xxxx-xxxx
  2. 设置证书操作策略,命令azure keyvault set-policy brucechen --spn <your-applicaiton-spn> --perms-to-certificates <perms-to-certificates, such as [\"all\"]><perms-to-certificates>的解释如下所示。

表示证书操作的字符串的JSON编码数组;每个字符串可以是[所有的、获取、列表、删除、创建、导入、更新、管理本体、地理组织、异构组织、排序器、删除者]之一。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42689852

复制
相关文章
git merge 命令详解
如果当前指针指向的是 master 分支,那么下面代码就是将 dev 分支合并到 master 分支
很酷的站长
2022/12/14
5890
git merge 命令详解
git merge用法详解_git merge 冲突
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/03
8170
Git Merge
Git Merge 人生不如意之事十之八九,合并分支往往也不是一番风顺的,团队协作开发时,两个共同修修改了同一个地方,就会出现冲突(CONFLICT),文件如果是文本文件,Git会在文件中加入特殊字
程序手艺人
2019/02/21
1.1K0
git merge后 丢失文件 以及 代码
git merge 快速合并时会以某个文件新的操作为准,如果master将一个dev合并进来,而dev分支中对某个文件进行过删除操作,那么merge之后master就会将那个文件删除。
MickyInvQ
2020/09/27
6.1K0
原始值和复杂值
1、定义:本身很简单,不能由其他值组成的值,例如5、“foo”、true、null和undefined等,因为它们是不可细化的。也就是说,数字是数字,字符是字符,布尔值则是true或false,null和undefined就是null和undefined。
jojo
2022/03/21
5710
Git - Git Merge VS Git Rebase
Git merge和Git rebase是两种不同的版本控制工作流程,它们用于将一个分支的更改合并到另一个分支。它们有不同的工作原理和应用场景,下面是它们的主要区别:
小小工匠
2023/09/14
3030
Git - Git Merge VS Git Rebase
git 如何将dev merge到master上
之前开发主要是在dev上,从master上clone下代码,开发完以后提交到dev交由测试测完没问题,再由项目经理merge到master上(生产环境).如今自己的角色改变了。需要自己meger到master。之前从来没meger过。于是网上看了些资源,加上自己git学的,大概总结以下git命令。(我平时一直用idea,但是我觉得使用命令操作是比较通用的,而且不容易出错)
编程软文
2019/04/28
4710
git 如何将dev merge到master上
git 如何将dev merge到master上
之前开发主要是在dev上,从master上clone下代码,开发完以后提交到dev交由测试测完没问题,再由项目经理merge到master上(生产环境).如今自己的角色改变了。需要自己meger到master。之前从来没meger过。于是网上看了些资源,加上自己git学的,大概总结以下git命令。(我平时一直用idea,但是我觉得使用命令操作是比较通用的,而且不容易出错)
编程软文
2019/03/19
8880
git 如何将dev merge到master上
idea git merge
当两个开发人员修改了同一个文件,A提交之后,B再获取或者提交代码时,就会产生冲突。
week
2018/08/24
1.1K0
idea git merge
git merge 和 git rebase
为什么会说这两个呢,是因为我觉得这两个命令有一些共同点,而且git merge 常用,git rebase 不常用,放在一起说的时候,可以更方便了解记忆git rebase。
艳龙
2021/12/16
4710
git merge 和 git rebase
git merge vs git rebase
https://www.atlassian.com/git/tutorials/merging-vs-rebasing/conceptual-overview
jiewuyou
2022/09/29
4050
git merge用法
1、每次发布版本之后,需要打tag。具体步骤是 先把开发分支的代码合并到master,在打tag.
公众号iOS逆向
2021/01/18
1.8K0
git merge用法
原 原始值和复杂值
作者:汪娇娇 日期:2016.10.12 一、原始值 1、定义:本身很简单,不能由其他值组成的值,例如5、“foo”、true、null和undefined等,因为它们是不可细化的。也就是说,数字是数字,字符是字符,布尔值则是true或false,null和undefined就是null和undefined。 2、存储和复制:复制是真实值复制。 都知道,我们将字符串“foo”存储到myString中后,也同时将它存储到了内存中。myString的值复制给myStringCopy后,因为复制是真实值复制,而不
jojo
2018/05/03
9370
git merge的使用
在实际开发中经常会用到git merge操作。但很多情况下我们并不想合并后直接提交,这里介绍git merge的两个常用参数:
用户8704835
2021/06/07
6050
JavaScript-原始值和引用值
(1)原始值指的是 原始类型 的值,也叫 基本类型,例如 Number、Stirng、Boolean、Null、Underfined 。
WEBING
2019/02/26
1K0
JavaScript-原始值和引用值
4.1 红宝书 📒 原始值与引用值
原始值:最简单的数据 (Undefined、Null、Boolean、Number、String、Symbol)。我们操作的就是存储在变量的实际值
用户4793865
2023/01/12
3840
git rebase merge 区别
老是问rebase merge 的区别,先问,他们为什么要有区别? 我的理解:为了看提交日志需要【主要看顺序,不同的提交排序规则】 A 在orignal 分支 am 8:00提交一次修改 【修改8】 B 在master 分支  am 9:00提交一次修改 【修改9】 A 在orignal 分支 am 10:00提交一次修改 【修改10】 B 在master 分支  am 11:00提交一次修改 【修改11】 现在,进入master 分支目录 执行git merge orignal 然后看下日志,应该是: 1
技术蓝海
2018/04/26
6660
「小技巧」使用Git从其他分支merge个别文件
产品经理:我们本次开发三个功能,列表页功能、详情页功能、系统消息功能,分两次上线,先上列表功能,再上详情页和系统消息。
程序员小明
2019/09/20
3.6K0
「小技巧」使用Git从其他分支merge个别文件
复杂值vs原始值&&内存空间
okaychen
2018/01/05
8630
复杂值vs原始值&&内存空间
Git - 使用命令和P4Merge进行diff
P4Merge P4Merge是Git的一个第三发Diff和Merge工具(可视化冲突解决工具). 下载地址: https://www.perforce.com/downloads/visual-me
solenovex
2018/03/29
2.9K0
Git - 使用命令和P4Merge进行diff

相似问题

Git merge命令

13

git merge命令使用

22

Git中的Merge命令删除文件

12

git重基失败,“ebase-merge”不被识别.“

13

将Visual (2013)中的文件重命名为GIT重命名为GIT?

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文