c# - 使用 Azure SDK 从 Azure 函数中删除/重新绑定 SSL 证书
问题描述
我正在尝试自动化在我的 azure 门户上获取 SSL 证书的过程。为此,我编写了一个 Azure 函数,它下载一个新证书,然后将其上传/绑定到我的 Web 应用程序。代码如下所示:
app.Update()
.DefineSslBinding()
.ForHostname("*.my.domain")
.WithPfxCertificateToUpload(Path.Combine(executionContext.FunctionDirectory, "cert.pfx"), "pwd")
.WithSniBasedSsl()
.Attach()
.Apply();
它应该上传一个新证书并创建一个新的绑定。它在没有现有证书/绑定的 Web 应用程序上按预期工作,但如果我再次运行该函数,我会遇到一些问题:
- 新证书未出现在 Azure 门户中
- 绑定保持不变
- 如果我手动删除绑定并再次运行我的代码,它将使用我拥有的第一个证书创建相同的绑定,即再次变得相同
- 有趣的是:我没有收到任何失败
经过一番研究,我发现如果我在 azure cli 中列出我的证书,az webapp config ssl list
并且门户上的列表会更新,即所有证书都在那里。但这并没有多大帮助。
我的一般问题是:还有其他方法可以重新绑定证书吗?
或者,一个明显的解决方法是提前删除现有绑定和证书:如何使用 .NET SDK 在 azure 函数中删除 SSL 证书?
解决方案
找到了路。应该分两步执行此操作:首先,上传证书
var certificate = await azure.AppServices.AppServiceCertificates
.Define($"some-name")
.WithRegion(app.Region)
.WithExistingResourceGroup(app.ResourceGroupName)
.WithPfxByteArray(pfxBytes)
.WithPfxPassword("test")
.CreateAsync();
然后使用WithExistingCertificate
:
await app.Update()
.DefineSslBinding()
.ForHostname("*.my.domain")
.WithExistingCertificate(certificate.Thumbprint)
.WithSniBasedSsl()
.Attach()
.ApplyAsync();
有一个待处理的拉取请求,以便在单个调用中执行此操作https://github.com/Azure/azure-libraries-for-net/pull/208
UPD: PR 已合并,因此您可以简单地使用一个,而不是 2 个调用:
var certBytes = certificateService.RetreiveCertificate();
webapp
.Update()
.DefineSslBinding()
.ForHostname("my.hostname")
.WithPfxByteArrayToUpload(certBytes, "password")
.WithSniBasedSsl()
.Attach()
.Apply();
推荐阅读
- javascript - React 原生动画循环钩子
- firebase - 不允许 createUserWithEmailAndPassword 错误操作(已启用 Firebase 身份验证)
- python - Python 3.8 中的子排序
- tensorflow - 为具有 1000 个标签的输出向量选择大小
- locking - 哪个更快,细粒度或粗粒度?
- cmd - 通过没有登录参数的Windows命令行设置代理
- python - 在 pycharm 中使用 python 实现 WebdriverWait 时显示未解析的引用“EC”
- mongodb - 按特定字段对 MongoDB 文档进行分组和计数
- uiwebview - 将 UIWebView 替换为 WKWebView,但仍然来自 Apple 的相同错误
- python - 使用 shift 替换 DataFrame 中的 NaT