如何通过 Management Rest API 在 Azure Web Apps 上设置 SSL 绑定?

How to set SSL bindings on Azure Web Apps via Management Rest API?

我们正在使用网站管理 SDK 在 Azure 上构建自动化部署。
我们目前设法通过代码将主机名添加到 Web 应用程序。

1
2
3
4
5
6
7
8
using (websiteClient)
{
     var configuration = websiteClient.WebSites.Get(webspace, WebsiteName +"-" + Version, new WebSiteGetParameters());

     configuration.WebSite.HostNames.Add(ClientName +"." + DnsZoneName);

     var response = websiteClient.WebSites.Update(webspace, WebsiteName +"-" + Version, new WebSiteUpdateParameters() { HostNames = configuration.WebSite.HostNames });
}

但是我们无法让 HostNameSslStates 正常工作。
以类似的方式,我们尝试为该网站添加 SSL 状态。

1
 configuration.WebSite.HostNameSslStates.Add(new WebSite.WebSiteHostNameSslState() { Name = ClientName +"." + DnsZoneName, SslState = WebSiteSslState.SniEnabled, Thumbprint ="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" });

但这不会导致 Azure 门户上的 SSL 绑定。

enter


希望对大家有所帮助。

安装管理包

1
Install-Package Microsoft.Azure.Management.Fluent

设置 AAD、设置密钥和密码

https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-service-principal-portal#get-application-id-and-authentication-key

在订阅下为特定应用设置访问级别

https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-service-principal-portal

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
var creds = new AzureCredentialsFactory().FromServicePrincipal( APPLICATION_ID, KEY_PASSWORD, DIRECTORY_ID, AzureEnvironment.AzureGlobalCloud);
var azure = Azure.Authenticate(creds).WithSubscription(SUSCRIPTION_ID);
var apps = azure.WebApps.List( );
foreach( var app in apps )
{
    if( app.Name == REQUIRED_APP_NAME  )
    {
        Console.WriteLine( app.Name );
        Console.WriteLine( $"Applying domain name {SUB_DOMAIN}.{DOMAIN}" );

        var updatedApp = app.Update( )
                                      .DefineHostnameBinding( )
                                      .WithThirdPartyDomain( DOMAIN )
                                      .WithSubDomain( SUB_DOMAIN )
                                      .WithDnsRecordType( CustomHostNameDnsRecordType.CName )
                                      .Attach( )
                                      .Apply( );

         Console.WriteLine( $"Applying SSL for {SUB_DOMAIN}.{DOMAIN}" );

         await azure
                    .WebApps
                    .Inner
                    .CreateOrUpdateHostNameBindingWithHttpMessagesAsync(      
                        RESOURCE_GROUP,
                        app.Name,
                        $"{SUB_DOMAIN}.{DOMAIN}",
                        new HostNameBindingInner(
                            azureResourceType: AzureResourceType.Website,
                            hostNameType: HostNameType.Verified,
                            customHostNameDnsRecordType: CustomHostNameDnsRecordType.CName,
                            sslState: SslState.SniEnabled,
                            thumbprint: EXISTING_THUMBPRINT ) );

         Console.WriteLine("OK" );
    }
}