Configurare SSL end-to-end usando un gateway applicazione con PowerShellConfigure end-to-end SSL by using Application Gateway with PowerShell

PanoramicaOverview

Il gateway applicazione di Azure supporta la crittografia end-to-end del traffico.Azure Application Gateway supports end-to-end encryption of traffic. Il gateway applicazione termina la connessione SSL nel gateway applicazione stesso.Application Gateway terminates the SSL connection at the application gateway. Il gateway applica quindi le regole di routing al traffico, crittografa di nuovo il pacchetto e inoltra il pacchetto al server back-end appropriato in base alle regole di routing definite.The gateway then applies the routing rules to the traffic, reencrypts the packet, and forwards the packet to the appropriate back-end server based on the routing rules defined. Eventuali risposte dal server Web subiscono lo stesso processo in ritorno verso l'utente finale.Any response from the web server goes through the same process back to the end user.

Il gateway applicazione supporta la definizione di opzioni SSL personalizzate.Application Gateway supports defining custom SSL options. Il gateway applicazione supporta anche queste versioni del protocollo: TLSv1.0, TLSv1.1 e TLSv1.2, oltre alla definizione dei pacchetti di crittografia da usare e l'ordine di preferenza.It also supports disabling the following protocol versions: TLSv1.0, TLSv1.1, and TLSv1.2, as well defining which cipher suites to use and the order of preference. Per altre informazioni sulle opzioni SSL configurabili, vedere Panoramica dei criteri SSL.To learn more about configurable SSL options, see the SSL policy overview.

Nota

SSL 2.0 e SSL 3.0 sono disabilitati per impostazione predefinita e non possono essere abilitati.SSL 2.0 and SSL 3.0 are disabled by default and cannot be enabled. Sono considerati non sicuri e non possono essere usati con il gateway applicazione.They are considered unsecure and cannot be used with Application Gateway.

immagine dello scenario

ScenarioScenario

Questo scenario mostra come creare un gateway applicazione usando SSL end-to-end con PowerShell.In this scenario, you learn how to create an application gateway by using end-to-end SSL with PowerShell.

Questo scenario illustrerà come:This scenario will:

  • Creare un gruppo di risorse chiamato appgw-rg.Create a resource group named appgw-rg.
  • Creare una rete virtuale chiamata appgwvnet con uno spazio indirizzi 10.0.0.0/16.Create a virtual network named appgwvnet with an address space of 10.0.0.0/16.
  • Creare due subnet denominate appgwsubnet e appsubnet.Create two subnets called appgwsubnet and appsubnet.
  • Creare un piccolo gateway applicazione che supporti la crittografia SSL end-to-end, che limita le versioni del protocollo SSL e i pacchetti di crittografia.Create a small application gateway supporting end-to-end SSL encryption that limits SSL protocol versions and cipher suites.

Prima di iniziareBefore you begin

Per configurare SSL end-to-end con un gateway applicazione, sono necessari un certificato per il gateway e i certificati per i server back-end.To configure end-to-end SSL with an application gateway, a certificate is required for the gateway and certificates are required for the back-end servers. Il certificato del gateway viene usato per crittografare e decrittografare il traffico inviato tramite SSL.The gateway certificate is used to encrypt and decrypt the traffic sent to it through SSL. Il certificato del gateway deve essere in formato PFX (Personal Information Exchange).The gateway certificate needs to be in Personal Information Exchange (PFX) format. Questo formato di file consente l'esportazione della chiave privata necessaria al gateway applicazione per eseguire la crittografia e la decrittografia del traffico.This file format allows you to export the private key that is required by the application gateway to perform the encryption and decryption of traffic.

Per la crittografia SSL end-to-end, il back-end deve essere incluso nell'elenco elementi consentiti con il gateway applicazione.For end-to-end SSL encryption, the back end must be whitelisted with the application gateway. È necessario caricare il certificato pubblico dei server back-end nel gateway applicazione.You need to upload the public certificate of the back-end servers to the application gateway. L'aggiunta del certificato garantisce che il gateway applicazione comunichi solo con istanze di back-end note,Adding the certificate ensures that the application gateway only communicates with known back-end instances. proteggendo ulteriormente la comunicazione end-to-end.This further secures the end-to-end communication.

Questo processo di configurazione viene descritto nelle sezioni seguenti.The configuration process is described in the following sections.

Creare il gruppo di risorse.Create the resource group

Questa sezione descrive la creazione di un gruppo di risorse che contiene il gateway applicazione.This section walks you through creating a resource group that contains the application gateway.

  1. Accedere all'account Azure.Sign in to your Azure account.

    Login-AzureRmAccount
    
  2. Selezionare la sottoscrizione da usare per questo scenario.Select the subscription to use for this scenario.

    Select-AzureRmsubscription -SubscriptionName "<Subscription name>"
    
  3. Creare un gruppo di risorse.Create a resource group. Se si usa un gruppo di risorse esistente, ignorare questo passaggio.(Skip this step if you're using an existing resource group.)

    New-AzureRmResourceGroup -Name appgw-rg -Location "West US"
    

Creare una rete virtuale e una subnet per il gateway applicazioneCreate a virtual network and a subnet for the application gateway

Nell'esempio seguente viene creata una rete virtuale e due subnet.The following example creates a virtual network and two subnets. Una subnet viene usata per contenere il gateway applicazione.One subnet is used to hold the application gateway. L'altra subnet viene usata per i back-end che ospitano l'applicazione Web.The other subnet is used for the back ends that host the web application.

  1. Assegnare un intervallo di indirizzi per la subnet da usare per il gateway applicazione.Assign an address range for the subnet to be used for the application gateway.

    $gwSubnet = New-AzureRmVirtualNetworkSubnetConfig -Name 'appgwsubnet' -AddressPrefix 10.0.0.0/24
    

    Nota

    Le subnet configurate per un gateway applicazione devono essere ridimensionate nel modo corretto.Subnets configured for an application gateway should be properly sized. Un gateway applicazione può essere configurato per un massimo di 10 istanze.An application gateway can be configured for up to 10 instances. Ogni istanza accetta un indirizzo IP dalla subnet.Each instance takes one IP address from the subnet. Le dimensioni eccessivamente piccole di una subnet possono influire negativamente sull'aumento del numero di istanze di un gateway applicazione.Too small of a subnet can adversely affect scaling out an application gateway.

  2. Assegnare un intervallo di indirizzi da usare per il pool di indirizzi dei back-end.Assign an address range to be used for the back-end address pool.

    $nicSubnet = New-AzureRmVirtualNetworkSubnetConfig  -Name 'appsubnet' -AddressPrefix 10.0.2.0/24
    
  3. Creare una rete virtuale con le subnet definite nei passaggi precedenti.Create a virtual network with the subnets defined in the preceding steps.

    $vnet = New-AzureRmvirtualNetwork -Name 'appgwvnet' -ResourceGroupName appgw-rg -Location "West US" -AddressPrefix 10.0.0.0/16 -Subnet $gwSubnet, $nicSubnet
    
  4. Recuperare la risorsa di rete virtuale e le risorse della subnet da usare nei passaggi seguenti.Retrieve the virtual network resource and subnet resources to be used in the steps that follow.

    $vnet = Get-AzureRmvirtualNetwork -Name 'appgwvnet' -ResourceGroupName appgw-rg
    $gwSubnet = Get-AzureRmVirtualNetworkSubnetConfig -Name 'appgwsubnet' -VirtualNetwork $vnet
    $nicSubnet = Get-AzureRmVirtualNetworkSubnetConfig -Name 'appsubnet' -VirtualNetwork $vnet
    

Creare un indirizzo IP pubblico per la configurazione front-endCreate a public IP address for the front-end configuration

Creare una risorsa IP pubblica da usare per il gateway applicazione.Create a public IP resource to be used for the application gateway. Questo indirizzo IP pubblico viene usato in uno dei passaggi seguenti.This public IP address is used in one of the steps that follow.

$publicip = New-AzureRmPublicIpAddress -ResourceGroupName appgw-rg -Name 'publicIP01' -Location "West US" -AllocationMethod Dynamic

Importante

Il gateway applicazione non supporta l'uso di un indirizzo IP pubblico creato con un'etichetta di dominio definita.Application Gateway does not support the use of a public IP address created with a defined domain label. È supportato solo un indirizzo IP pubblico con etichetta di dominio creata in modo dinamico.Only a public IP address with a dynamically created domain label is supported. Se è necessario un nome DNS intuitivo per il gateway applicazione, è consigliabile usare un record CNAME come alias.If you require a friendly DNS name for the application gateway, we recommend you use a CNAME record as an alias.

Creare un oggetto di configurazione gateway applicazioneCreate an application gateway configuration object

Tutti gli elementi di configurazione vengono impostati prima di creare il gateway applicazione.All configuration items are set before creating the application gateway. La procedura seguente consente di creare gli elementi di configurazione necessari per una risorsa del gateway applicazione.The following steps create the configuration items that are needed for an application gateway resource.

  1. Creare una configurazione IP per il gateway applicazione.Create an application gateway IP configuration. Questa impostazione configura le subnet usate dal gateway applicazione.This setting configures which of the subnets the application gateway uses. All'avvio, il gateway applicazione seleziona un indirizzo IP dalla subnet configurata e instrada il traffico di rete agli indirizzi IP nel pool di indirizzi IP dei back-end.When application gateway starts, it picks up an IP address from the configured subnet and routes network traffic to the IP addresses in the back-end IP pool. Tenere presente che ogni istanza ha un indirizzo IP.Keep in mind that each instance takes one IP address.

    $gipconfig = New-AzureRmApplicationGatewayIPConfiguration -Name 'gwconfig' -Subnet $gwSubnet
    
  2. Creare una configurazione di indirizzi IP front-end.Create a front-end IP configuration. Questa impostazione esegue il mapping di un indirizzo IP pubblico o privato al front-end del gateway applicazione.This setting maps a private or public IP address to the front end of the application gateway. Il passaggio seguente consente di associare l'indirizzo IP pubblico del passaggio precedente alla configurazione IP front-end.The following step associates the public IP address in the preceding step with the front-end IP configuration.

    $fipconfig = New-AzureRmApplicationGatewayFrontendIPConfig -Name 'fip01' -PublicIPAddress $publicip
    
  3. Configurare il pool di indirizzi IP dei back-end con gli indirizzi IP dei server Web back-end.Configure the back-end IP address pool with the IP addresses of the back-end web servers. Questi indirizzi IP saranno quelli che ricevono il traffico di rete proveniente dall'endpoint IP front-end.These IP addresses are the IP addresses that receive the network traffic that comes from the front-end IP endpoint. Sostituire gli indirizzi IP nell'esempio con gli endpoint di indirizzi IP dell'applicazione.Replace the IP addresses in the sample with your own application IP address endpoints.

    $pool = New-AzureRmApplicationGatewayBackendAddressPool -Name 'pool01' -BackendIPAddresses 1.1.1.1, 2.2.2.2, 3.3.3.3
    

    Nota

    Anche un nome di dominio completo (FQDN) è un valore valido da usare al posto di un indirizzo IP per i server back-end.A fully qualified domain name (FQDN) is also a valid value to use in place of an IP address for the back-end servers. Per abilitarlo, usare l'opzione -BackendFqdns.You enable it by using the -BackendFqdns switch.

  4. Configurare la porta d indirizzo IP front-end con l'endpoint di indirizzo IP pubblico.Configure the front-end IP port for the public IP endpoint. Si tratta della porta a cui si connettono gli utenti finali.This port is the port that end users connect to.

    $fp = New-AzureRmApplicationGatewayFrontendPort -Name 'port01'  -Port 443
    
  5. Configurare il certificato per il gateway applicazione.Configure the certificate for the application gateway. Questo certificato viene usato per decrittografare e crittografare di nuovo il traffico nel gateway applicazione.This certificate is used to decrypt and reencrypt the traffic on the application gateway.

    $cert = New-AzureRmApplicationGatewaySSLCertificate -Name cert01 -CertificateFile <full path to .pfx file> -Password <password for certificate file>
    

    Nota

    Questo esempio configura il certificato usato per la connessione SSL.This sample configures the certificate used for the SSL connection. Il certificato deve essere in formato PFX e la password deve contenere da 4 a 12 caratteri.The certificate needs to be in .pfx format, and the password must be 4 to 12 characters.

  6. Creare il listener HTTP per il gateway applicazione.Create the HTTP listener for the application gateway. Assegnare la configurazione IP, la porta e il certificato SSL del front-end da usare.Assign the front-end IP configuration, port, and SSL certificate to use.

    $listener = New-AzureRmApplicationGatewayHttpListener -Name listener01 -Protocol Https -FrontendIPConfiguration $fipconfig -FrontendPort $fp -SSLCertificate $cert
    
  7. Caricare il certificato da usare per le risorse del pool back-end abilitate per SSL.Upload the certificate to be used on the SSL-enabled back-end pool resources.

    Nota

    Il probe predefinito ottiene la chiave pubblica dall'associazione SSL predefinita nell'indirizzo IP del back-end e confronta il valore della chiave pubblica ricevuta con il valore della chiave pubblica specificata qui.The default probe gets the public key from the default SSL binding on the back-end's IP address and compares the public key value it receives to the public key value you provide here.

    Se si usano intestazioni host e la funzionalità Indicazione nome server (SNI) nel back-end, la chiave pubblica recuperata potrebbe non corrispondere al sito previsto in cui viene trasferito il traffico.If you are using host headers and Server Name Indication (SNI) on the back end, the retrieved public key might not be the intended site to which traffic flows. In caso di dubbi, visitare la pagina all'indirizzo https://127.0.0.1/ nei server back-end per determinare il certificato usato per l'associazione SSL predefinita.If you're in doubt, visit https://127.0.0.1/ on the back-end servers to confirm which certificate is used for the default SSL binding. In questa sezione usare la chiave pubblica ottenuta da tale richiesta.Use the public key from that request in this section. Se si usano intestazioni host e la funzionalità Indicazione nome server (SNI) nelle associazioni HTTPS e non si riceve una risposta e un certificato da una richiesta del browser manuale a https://127.0.0.1/ nei server back-end, è necessario configurare un'associazione SSL predefinita nei server.If you are using host-headers and SNI on HTTPS bindings and you do not receive a response and certificate from a manual browser request to https://127.0.0.1/ on the back-end servers, you must set up a default SSL binding on the them. In caso contrario, i probe hanno esito negativo e il back-end non è consentito.If you do not do so, probes fail and the back end is not whitelisted.

    $authcert = New-AzureRmApplicationGatewayAuthenticationCertificate -Name 'whitelistcert1' -CertificateFile C:\users\gwallace\Desktop\cert.cer
    

    Nota

    Il certificato fornito in questo passaggio deve essere la chiave pubblica del certificato PFX presente nel back-end.The certificate provided in this step should be the public key of the .pfx certificate present on the back end. Esportare il certificato (non il certificato radice) installato nel server back-end in formato CER e usarlo in questo passaggio.Export the certificate (not the root certificate) installed on the back-end server in Claim, Evidence, and Reasoning (CER) format and use it in this step. Questo passaggio mostra come aggiungere il back-end all'elenco elementi consentiti con il gateway applicazione.This step whitelists the back end with the application gateway.

  8. Configurare le impostazioni HTTP per il back-end del gateway applicazione.Configure the HTTP settings for the application gateway back end. Assegnare il certificato caricato nel passaggio precedente alle impostazioni HTTP.Assign the certificate uploaded in the preceding step to the HTTP settings.

    $poolSetting = New-AzureRmApplicationGatewayBackendHttpSettings -Name 'setting01' -Port 443 -Protocol Https -CookieBasedAffinity Enabled -AuthenticationCertificates $authcert
    
  9. Creare la regola di routing del bilanciamento del carico per la configurazione del comportamento di bilanciamento del carico.Create a load-balancer routing rule that configures the load balancer behavior. In questo esempio viene creata una regola di round robin di base.In this example, a basic round-robin rule is created.

    $rule = New-AzureRmApplicationGatewayRequestRoutingRule -Name 'rule01' -RuleType basic -BackendHttpSettings $poolSetting -HttpListener $listener -BackendAddressPool $pool
    
  10. Configurare le dimensioni dell'istanza del gateway applicazione.Configure the instance size of the application gateway. Le dimensioni disponibili sono Standard_Small, Standard_Medium e Standard_Large.The available sizes are Standard_Small, Standard_Medium, and Standard_Large. Per la capacità, i valori disponibili sono compresi tra 1 e 10.For capacity, the available values are 1 through 10.

    $sku = New-AzureRmApplicationGatewaySku -Name Standard_Small -Tier Standard -Capacity 2
    

    Nota

    A scopo di test si può scegliere 1 come numero di istanze.An instance count of 1 can be chosen for testing purposes. È importante tenere presente che qualsiasi numero di istanze inferiore a due non è coperto dal contratto di servizio ed è quindi sconsigliato.It is important to know that any instance count under two instances is not covered by the SLA and is therefore not recommended. È opportuno usare gateway Small a scopo di sviluppo/test e non per la produzione.Small gateways are to be used for dev test and not for production purposes.

  11. Configurare i criteri SSL da usare nel gateway applicazione.Configure the SSL policy to be used on the application gateway. Il gateway applicazione supporta la funzionalità di impostazione di una versione minima per le versioni del protocollo SSL.Application Gateway supports the ability to set a minimum version for SSL protocol versions.

    I valori seguenti rappresentano un elenco di versioni del protocollo che è possibile definire:The following values are a list of protocol versions that can be defined:

    • TLSV1_0TLSV1_0
    • TLSV1_1TLSV1_1
    • TLSV1_2TLSV1_2

    L'esempio seguente imposta la versione minima del protocollo su TLSv1_2 e abilita solo TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 e TLS_RSA_WITH_AES_128_GCM_SHA256.The following example sets the minimum protocol version to TLSv1_2 and enables TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, and TLS_RSA_WITH_AES_128_GCM_SHA256 only.

    $SSLPolicy = New-AzureRmApplicationGatewaySSLPolicy -MinProtocolVersion TLSv1_2 -CipherSuite "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "TLS_RSA_WITH_AES_128_GCM_SHA256"
    

Creare il gateway applicazioneCreate the application gateway

Creare il gateway applicazione seguendo tutti i passaggi precedenti.Using all the preceding steps, create the application gateway. La creazione del gateway è un processo a esecuzione prolungata.The creation of the gateway is a process that takes a long time to run.

$appgw = New-AzureRmApplicationGateway -Name appgateway -SSLCertificates $cert -ResourceGroupName "appgw-rg" -Location "West US" -BackendAddressPools $pool -BackendHttpSettingsCollection $poolSetting -FrontendIpConfigurations $fipconfig -GatewayIpConfigurations $gipconfig -FrontendPorts $fp -HttpListeners $listener -RequestRoutingRules $rule -Sku $sku -SSLPolicy $SSLPolicy -AuthenticationCertificates $authcert -Verbose

Limitare le versioni del protocollo SSL in un gateway applicazione esistenteLimit SSL protocol versions on an existing application gateway

I passaggi precedenti descrivono la creazione di un'applicazione con SSL end-to-end e la disabilitazione di alcune versioni del protocollo SSL.The preceding steps took you through creating an application with end-to-end SSL and disabling certain SSL protocol versions. Nell'esempio seguente alcuni criteri SSL vengono disabilitati su un gateway applicazione esistente.The following example disables certain SSL policies on an existing application gateway.

  1. Recuperare il gateway applicazione da aggiornare.Retrieve the application gateway to update.

    $gw = Get-AzureRmApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. Definire un criterio SSL.Define an SSL policy. Nell'esempio seguente TLSv1.0 e TLSv1.1 sono disabilitati e i pacchetti di crittografia TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 e TLS_RSA_WITH_AES_128_GCM_SHA256 sono gli unici consentiti.In the following example, TLSv1.0 and TLSv1.1 are disabled and the cipher suites TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, and TLS_RSA_WITH_AES_128_GCM_SHA256 are the only ones allowed.

    Set-AzureRmApplicationGatewaySSLPolicy -MinProtocolVersion -PolicyType Custom -CipherSuite "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "TLS_RSA_WITH_AES_128_GCM_SHA256" -ApplicationGateway $gw
    
  3. Infine, aggiornare il gateway.Finally, update the gateway. Notare che questo ultimo passaggio rappresenta un'attività a esecuzione prolungata.Note that this last step is a long-running task. Al termine, SSL end-to-end è configurato nel gateway applicazione.When it is done, end-to-end SSL is configured on the application gateway.

    $gw | Set-AzureRmApplicationGateway
    

Ottenere un nome DNS del gateway applicazioneGet an application gateway DNS name

Dopo avere creato il gateway, il passaggio successivo prevede la configurazione del front-end per la comunicazione.After the gateway is created, the next step is to configure the front end for communication. Il gateway applicazione richiede un nome DNS assegnato in modo dinamico, non descrittivo quando si usa un IP pubblico.Application Gateway requires a dynamically assigned DNS name when using a public IP, which is not friendly. Per assicurarsi che gli utenti finali possano raggiungere il gateway applicazione, è possibile usare un record CNAME che faccia riferimento all'endpoint pubblico del gateway applicazione.To ensure end users can hit the application gateway, you can use a CNAME record to point to the public endpoint of the application gateway. Per altre informazioni, vedere Configurare un nome di dominio personalizzato in Azure.For more information, see Configuring a custom domain name for in Azure.

Per configurare un alias, recuperare i dettagli del gateway applicazione e il nome DNS/indirizzo IP associato usando l'elemento PublicIPAddress collegato al gateway applicazione.To configure an alias, retrieve details of the application gateway and its associated IP/DNS name by using the PublicIPAddress element attached to the application gateway. Usare il nome DNS del gateway applicazione per creare un record CNAME che associ le due applicazioni Web a questo nome DNS.Use the application gateway's DNS name to create a CNAME record that points the two web applications to this DNS name. Non è consigliabile usare record A perché l'indirizzo VIP può cambiare al riavvio del gateway applicazione.We don't recommend the use of A-records, because the VIP can change on restart of the application gateway.

Get-AzureRmPublicIpAddress -ResourceGroupName appgw-RG -Name publicIP01
Name                     : publicIP01
ResourceGroupName        : appgw-RG
Location                 : westus
Id                       : /subscriptions/<subscription_id>/resourceGroups/appgw-RG/providers/Microsoft.Network/publicIPAddresses/publicIP01
Etag                     : W/"00000d5b-54ed-4907-bae8-99bd5766d0e5"
ResourceGuid             : 00000000-0000-0000-0000-000000000000
ProvisioningState        : Succeeded
Tags                     : 
PublicIpAllocationMethod : Dynamic
IpAddress                : xx.xx.xxx.xx
PublicIpAddressVersion   : IPv4
IdleTimeoutInMinutes     : 4
IpConfiguration          : {
                                "Id": "/subscriptions/<subscription_id>/resourceGroups/appgw-RG/providers/Microsoft.Network/applicationGateways/appgwtest/frontendIP
                            Configurations/frontend1"
                            }
DnsSettings              : {
                                "Fqdn": "00000000-0000-xxxx-xxxx-xxxxxxxxxxxx.cloudapp.net"
                            }

Passaggi successiviNext steps

Per altre informazioni su come rafforzare la sicurezza delle applicazioni Web con il web application firewall tramite il gateway applicazione, vedere Panoramica del web application firewall.For more information about hardening the security of your web applications with Web Application Firewall through Application Gateway, see the Web application firewall overview.