gpt4 book ai didi

c# - azure sdk 将证书链接到新资源组

转载 作者:行者123 更新时间:2023-12-04 22:43:43 25 4
gpt4 key购买 nike

我正在从 ARM 模板迁移到 C# Azure SDK 部署选项,但在将现有证书的使用转换为新资源组时遇到问题。我有一个 SSL 证书存储在特定的资源组和 Keyvault 中。我将 3 个环境放入使用此证书(webapps ssl 绑定(bind))的 ARM 模板创建的其他 3 个资源组中。当我从 Azure 门户进入我的证书时,我可以看到私有(private)证书链接到我的 3 个资源组

这 block JSON 将 ssl 证书导入到新资源组中

{
"type": "Microsoft.Web/certificates",
"name": "MyCert",
"apiVersion": "2016-03-01",
"location": "[variables('Location')]",
"properties": {
"keyVaultId": "[parameters('keyvaultId')]",
"keyVaultSecretName": "[parameters('KeyvaultSecretName')]",
"thumbprint": "[parameters('certThumbprint')]"
},
"dependsOn": [
"[concat('Microsoft.Web/serverfarms/', variables('WebAppAppPlanName'))]"
],
},

使用此 json block 通过其指纹创建 ssl 绑定(bind):

{
"name": "[concat(variables('WebAppName'),'/',variables('subDomain'), '.domain.fr')]",
"apiVersion": "2016-08-01",
"type": "Microsoft.Web/sites/hostNameBindings",
"location": "[variables('Location')]",
"dependsOn": [
"[resourceId('Microsoft.Web/sites', variables('WebAppName'))]"
],
"tags": {
"displayName": "HostName"
},
"properties": {
"siteName": "[variables('WebAppName')]",
"customHostNameDnsRecordType": "CName",
"hostNameType": "Verified",
"sslState": "SniEnabled",
"thumbprint": "[reference(resourceId('Microsoft.Web/certificates', 'CertName')).Thumbprint]"
}
},

现在我尝试使用 Azure SDK 创建同样的东西:

 webApp = webApp.Update()
.DefineHostnameBinding()
.WithThirdPartyDomain(domain)
.WithSubDomain(subdomain)
.WithDnsRecordType(CustomHostNameDnsRecordType.CName)
.Attach()
.Apply();

webApp = webApp.Update()
.WithThirdPartyHostnameBinding(domain, subdomain)
.DefineSslBinding()
.ForHostname(hostName)
.WithExistingCertificate(certificateThumbPrint)
.WithSniBasedSsl()
.Attach()
.Apply();

此代码不起作用,因为在我新创建的资源组中找不到certificateThumbprint。缺少的相当于将我的证书链接到我的资源组的第一个 json block 。使用 Azure 门户并手动执行此操作称为“导入应用服务证书”

如何使用 C# 中的 azure SDK 以编程方式将现有应用服务证书导入到新资源组中?

最佳答案

尝试将现有证书从 key 保管库导入到应用服务时,您需要首先将 key 保管库证书添加/链接到资源组。

To do this with Azure REST API

使用旧版 Azure SDK ( Microsoft.Azure.Management.WebSites ) 时,有一个可用的 BeginCreateOrUpdateCertificate 类来执行此操作。但微软不建议使用它,因为它可能很快就会被弃用。

使用 Azure Fluent SDK - 我们无法使用默认的应用程序证书管理类来实现此目的。“Microsoft.Azure.Management.Fluent.Azure.AppServices.AppServiceCertificates.Define()”。

但是,“Microsoft.Azure.Management.ResourceManager.Fluent.Core”命名空间中有一个名为 RestClient 的类,该类旨在手动调用 azure API。我们可以利用WebSiteManagementClient它使用 RestClient 对 Web 应用程序资源进行 REST API 调用。

var restClient = Microsoft.Azure.Management.ResourceManager.Fluent.Core.RestClient.Configure().WithEnvironment(AzureEnvironment.AzureGlobalCloud).WithCredentials(credentials).Build();


var x = new WebSiteManagementClient(restClient);
x.SubscriptionId = "your-subscription-id";
var result = x.Certificates.CreateOrUpdateAsync(resourceGroupName, "UploadTest", new CertificateInner("your certificate-location (East-US)",
"certificate-password (pass string.Empty if null)",
keyVaultId: "/subscriptions/your-subscription-id/resourcegroups/your-resourcegroup-id/providers/microsoft.keyvault/vaults/your-key-vault-id",
keyVaultSecretName: "key-vault-secretname", hostNames: new List<string>() { "hostname" })).GetAwaiter().GetResult();

这会将 key 保管库中的现有证书添加/链接到资源组,并且可供应用服务使用。

关于c# - azure sdk 将证书链接到新资源组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56146265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com