【问题标题】:Create Azure web app SSL binding using certificate from key vault使用来自密钥保管库的证书创建 Azure Web 应用 SSL 绑定
【发布时间】:2020-09-29 20:51:57
【问题描述】:

我正在尝试使用从密钥保管库检索到的证书将 SSL 添加到 Azure Web 应用程序。我看不到通过门户执行此操作的方法,因此我一直在尝试使用 Azure API 来执行此操作。

我可以使用以下代码获取证书机密并将其转换为 X509 证书:

 AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
 KeyVaultClient keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));

 SecretBundle secret2 = await keyVaultClient.GetSecretAsync(KEY_VAULT_IDENTIFIER);
 string pass = null;
 X509Certificate2 certificate = new X509Certificate2(Convert.FromBase64String(secret2.Value), pass, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);

老实说,我不知道下一步该做什么。我一直在研究 Microsoft.Azure.Management.Fluent 库,但没有任何工作。

我是否朝着正确的方向前进?有没有可以帮助的例子?

【问题讨论】:

    标签: c# azure azure-web-app-service azure-keyvault


    【解决方案1】:

    对于C#代码,你可以使用Azure Management Libraries for .NET

    您可以使用以下 2 个 Nuget 包:

    • Microsoft.Azure.Management.Fluent

    • Microsoft.Azure.Management.ResourceManager.Fluent

    身份验证

    您可以阅读guidance here

    第一步是为 RBAC 创建一个服务主体,为其授予相关资源组的权限,然后在代码中使用 clientId、secret 和租户信息。

    az ad sp create-for-rbac
    

    代码

            string clientId = "xxxxx-xxx-xxxx";
            string clientSecret = "xxxxx-xxx-xxxx";
            string tenant = "xxxxx-xxx-xxxx";
            string subscriptionId = "xxxxx-xxx-xxxx";
    
            var creds = SdkContext.AzureCredentialsFactory.FromServicePrincipal(clientId, clientSecret, tenant, AzureEnvironment.AzureGlobalCloud);
            var azure = Azure.Authenticate(creds).WithSubscription(subscriptionId);
    
            var app1 = azure.WebApps.GetByResourceGroup("rgAppService", "MyAPIServiceName");
    
            app1.Update()
                .DefineSslBinding()
                .ForHostname("MyHostName")
                .WithExistingCertificate("<Thumbprint of the certificate>")
                .WithSniBasedSsl()  // could use different method .WithIpBasedSsl in case that is relevant
                .Attach()
                .Apply();
    

    GitHub 上的详细代码示例

    Managing Web Apps with custom domains in C#

    此示例做了很多事情,例如创建应用程序、域等,因此请选择适合您的部分。

    【讨论】:

    • 感谢您的回复。这非常接近,但是当我使用“az ad sp create-for-rbac”创建服务提供程序时,我收到一个错误,提示我无权“执行操作“Microsoft.Authorization/roleAssignments/write”。在与我的 IT 人员合作以获取访问权限时,他提出了一个危险信号,并询问为什么我的应用程序需要访问 Active Directory?有没有办法在不去 AD 的情况下获得使用 SDK 的授权?或者任何其他方式来设置 SSL 绑定?
    猜你喜欢
    • 1970-01-01
    • 2022-01-18
    • 2020-10-19
    • 2020-04-04
    • 1970-01-01
    • 2021-08-25
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多