Configurare SSL end-to-end e i criteri SSL con il gateway applicazione tramite PowerShell

Overview

Il gateway applicazione supporta la crittografia end-to-end del traffico. A tale scopo, il gateway applicazione chiude la connessione SSL nel gateway applicazione. Il gateway quindi applica le regole di routing al traffico, crittografare nuovamente il pacchetto e inoltra il pacchetto al back-end appropriato in base alle regole di routing definite. Eventuali risposte dal server Web subiscono lo stesso processo in ritorno verso l'utente finale.

Un'altra funzionalità supportata dal gateway applicazione è l a disabilitazione di alcune versioni del protocollo SSL. Gateway applicazione supporta la disattivazione della versione di protocollo seguente: TLSv1.0, TLSv1.1 e TLSv1.2.

Nota

SSL 2.0 e SSL 3.0 sono disabilitati per impostazione predefinita e non possono essere abilitati. Sono considerati non sicuri e non possono essere usati con il gateway applicazione.

immagine dello scenario

Scenario

Questo scenario mostra come creare un gateway applicazione usando SSL end-to-end tramite PowerShell.

Questo scenario illustrerà come:

  • Creare un gruppo di risorse denominato appgw-rg
  • Creare una rete virtuale denominata appgwvnet con un blocco CIDR riservato di 10.0.0.0/16.
  • Creare due subnet denominate appgwsubnet e appsubnet.
  • Creare un piccolo gateway applicazione che supporti la crittografia SSL end-to-end che disabilita alcuni protocolli SSL.

Prima di iniziare

Per configurare SSL end-to-end con un gateway applicazione, è richiesto un certificato per il gateway e diversi certificati per i server back-end. Il certificato del gateway viene usato per crittografare e decrittografare il traffico inviato usando SSL. Il certificato del gateway deve essere in formato PFX (Personal Information Exchange). Questo formato di file consente l'esportazione della chiave privata necessaria al gateway applicazione per eseguire la crittografia e la decrittografia del traffico.

Per la crittografia SSL end-to-end, il back-end deve essere incluso nell'elenco delle applicazioni consentite, insieme al gateway applicazione. A tale scopo, caricare il certificato pubblico dei back-end nel gateway applicazione. Ciò garantisce che il gateway applicazione comunichi solo con istanze di back-end note, proteggendo ulteriormente la comunicazione end-to-end.

Il processo è descritto nella procedura seguente:

Creare il gruppo di risorse

Questa sezione descrive la creazione di un gruppo di risorse che contiene il gateway applicazione.

Passaggio 1

Accedere all'account Azure.

Login-AzureRmAccount

Passaggio 2

Selezionare la sottoscrizione da usare per questo scenario.

Select-AzureRmsubscription -SubscriptionName "<Subscription name>"

Passaggio 3

Creare un gruppo di risorse. Ignorare questo passaggio se si usa un gruppo di risorse esistente.

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

Creare una rete virtuale e una subnet per il gateway applicazione

Nell'esempio seguente viene creata una rete virtuale e due subnet. Una subnet viene usata per contenere il gateway applicazione. L'altra subnet viene usata per i back-end che ospitano l'applicazione Web.

Passaggio 1

Assegnare un intervallo di indirizzi che la subnet possa usare per il gateway applicazione.

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

Le subnet configurate per il gateway applicazione devono essere ridimensionate in modo corretto. Un gateway applicazione può essere configurato per un massimo di 10 istanze. Ogni istanza accetta 1 indirizzo IP dalla subnet. Le dimensioni eccessivamente piccole di una subnet possono influire negativamente sull'aumento del numero di istanze di un gateway applicazione.

Passaggio 2

Assegnare un intervallo di indirizzi da usare per il pool di indirizzi di back-end.

$nicSubnet = New-AzureRmVirtualNetworkSubnetConfig  -Name 'appsubnet' -AddressPrefix 10.0.2.0/24

Passaggio 3

Creare una rete virtuale con le subnet definite nei passaggi precedenti.

$vnet = New-AzureRmvirtualNetwork -Name 'appgwvnet' -ResourceGroupName appgw-rg -Location "West US" -AddressPrefix 10.0.0.0/16 -Subnet $gwSubnet, $nicSubnet

Passaggio 4

Recuperare la risorsa di rete virtuale e le risorse della subnet da usare nei passaggi seguenti:

$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-end

Creare una risorsa IP pubblica da usare per il gateway applicazione. Questo indirizzo IP pubblico viene usato in uno dei prossimi passaggi.

$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 la definizione di un'etichetta di dominio. È supportato solo un indirizzo IP pubblico con etichetta di dominio creata in modo dinamico. Se è necessario un nome DNS intuitivo per il gateway applicazione, è consigliabile usare un record cname come alias.

Creare un oggetto di configurazione gateway applicazione

È necessario impostare tutti gli elementi di configurazione prima di creare il gateway applicazione. La procedura seguente consente di creare gli elementi di configurazione necessari per una risorsa del gateway applicazione.

Passaggio 1

Creare una configurazione IP del gateway applicazione che consente di configurare la subnet usata dal gateway applicazione. 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 back-end. Tenere presente che ogni istanza ha un indirizzo IP.

$gipconfig = New-AzureRmApplicationGatewayIPConfiguration -Name 'gwconfig' -Subnet $gwSubnet

Passaggio 2

Creare una configurazione IP front-end che consente di eseguire il mapping di un indirizzo IP pubblico o privato al front-end del gateway applicazione. Il passaggio seguente consente di associare l'indirizzo IP pubblico del passaggio precedente alla configurazione IP front-end.

$fipconfig = New-AzureRmApplicationGatewayFrontendIPConfig -Name 'fip01' -PublicIPAddress $publicip

Passaggio 3

Configurare il pool di indirizzi IP back-end con gli indirizzi IP dei server Web back-end. Questi indirizzi IP saranno quelli che ricevono il traffico di rete proveniente dall'endpoint IP front-end. Sostituire gli indirizzi IP seguenti e aggiungere gli endpoint di indirizzi IP dell'applicazione.

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

Il nome di dominio completo (FQDN) è un valore valido per sostituire un indirizzo IP per i server back-end usando l'opzione -BackendFqdns.

Passaggio 4

Configurare la porta d indirizzo IP front-end con l'endpoint di indirizzo IP pubblico. Si tratta della porta a cui si connettono gli utenti finali.

$fp = New-AzureRmApplicationGatewayFrontendPort -Name 'port01'  -Port 443

Passaggio 5

Configurare il certificato per il gateway applicazione. Il certificato viene usato per crittografare e decrittografare il traffico sul gateway applicazione.

$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. Il certificato deve essere in formato PFX e la password deve essere compresa tra 4 e 12 caratteri.

Passaggio 6

Creare il listener HTTP per il gateway applicazione. Assegnare la configurazione IP, la porta e il certificato SSL front-end da usare.

$listener = New-AzureRmApplicationGatewayHttpListener -Name listener01 -Protocol Https -FrontendIPConfiguration $fipconfig -FrontendPort $fp -SslCertificate $cert

Passaggio 7

Caricare il certificato da usare per le risorse del pool back-end SSL abilitato.

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. La chiave pubblica recuperata potrebbe non corrispondere esattamente al sito previsto a cui il traffico verrà trasferito se si usano intestazioni host e SNI nel back-end. In caso di dubbio, visitare https://127.0.0.1/ nei back-end per verificare quale certificato viene usato per l'associazione SSL predefinita. In questa sezione usare la chiave pubblica ottenuta da tale richiesta. Se si usano intestazioni host e SNI nelle associazioni HTTPS e non si ricevono una risposta e un certificato da una richiesta del browser manuale a https://127.0.0.1/ nei back-end, è necessario configurare un'associazione SSL predefinita nei back-end. In caso contrario, i probe avranno esito negativo e il back-end non sarà consentito.

$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 con estensione PFX presente nel back-end. Esportare il certificato (non il certificato radice) installato nel server back-end in formato CER e usarlo in questo passaggio. Questo passaggio illustra come aggiungere il back-end all'elenco dei consentiti del gateway applicazione.

Passaggio 8

Configurare le impostazioni http di back-end del gateway applicazione. Assegnare il certificato caricato nel passaggio precedente alle impostazioni http.

$poolSetting = New-AzureRmApplicationGatewayBackendHttpSettings -Name 'setting01' -Port 443 -Protocol Https -CookieBasedAffinity Enabled -AuthenticationCertificates $authcert

Passaggio 9:

Creare la regola di routing del servizio di bilanciamento del carico che configura il comportamento di bilanciamento del carico. In questo esempio viene creata una regola round robin di base.

$rule = New-AzureRmApplicationGatewayRequestRoutingRule -Name 'rule01' -RuleType basic -BackendHttpSettings $poolSetting -HttpListener $listener -BackendAddressPool $pool

Passaggio 10

Configurare le dimensioni dell'istanza del gateway applicazione. Le dimensioni disponibili sono Standard_Small, Standard_Medium e Standard_Large. Per la capacità, i valori disponibili vanno da 1 a 10.

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

A scopo di test si può scegliere 1 come numero di istanze. È importante sapere che un numero di istanze inferiore a due non è coperto dal contratto di servizio e non è quindi consigliabile. È opportuno usare gateway Small a scopo di sviluppo/test e non per la produzione.

Passaggio 11

Configurare i criteri SSL da usare sul gateway applicazione. Il gateway applicazione supporta la funzionalità di disattivazione di alcune versioni del protocollo SSL.

I valori seguenti rappresentano un elenco di versioni del protocollo che possono essere disabilitate.

  • TLSv1_0
  • TLSv1_1
  • TLSv1_2

L'esempio seguente disabilita TLSv1_0.

$sslPolicy = New-AzureRmApplicationGatewaySslPolicy -DisabledSslProtocols TLSv1_0

Creare il gateway applicazione

Tramite tutti i passaggi precedenti è possibile creare il gateway applicazione. La creazione del gateway è un processo a esecuzione prolungata.

$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

Disabilitare le versioni del protocollo SSL su un gateway applicazione esistente

La procedura precedente guida nella creazione di un'applicazione con SSL end-to-end e nella disabilitazione di alcune versioni del protocollo SSL. Nell'esempio seguente alcuni criteri SSL vengono disabilitati su un gateway applicazione esistente.

Passaggio 1

Recuperare il gateway applicazione da aggiornare.

$gw = Get-AzureRmApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG

Passaggio 2

Definire un criterio SSL. Nell'esempio seguente vengono disabilitati TLSv1.0 e TLSv1.1.

Set-AzureRmApplicationGatewaySslPolicy -DisabledSslProtocols TLSv1_0, TLSv1_1 -ApplicationGateway $gw

Passaggio 3

Infine, aggiornare il gateway. È importante notare che quest'ultimo passaggio rappresenta un'attività a esecuzione prolungata. Al termine, SSL end-to-end è configurato nel gateway applicazione.

$gw | Set-AzureRmApplicationGateway

Ottenere il nome DNS del gateway applicazione

Dopo avere creato il gateway, il passaggio successivo prevede la configurazione del front-end per la comunicazione. Quando si usa un IP pubblico, il gateway applicazione richiede un nome DNS assegnato in modo dinamico, non descrittivo. Per assicurarsi che gli utenti finali possano raggiungere il gateway applicazione, è possibile usare un record CNAME per fare riferimento all'endpoint pubblico del gateway applicazione. Configurazione di un nome di dominio personalizzato in Azure. A questo scopo, recuperare i dettagli del gateway applicazione e il nome DNS e l'IP associati, usando l'elemento PublicIPAddress collegato al gateway applicazione. Il nome DNS del gateway applicazione dovrà essere usato per creare un record CNAME che associa le due applicazioni Web a questo nome DNS. Non è consigliabile usare record A perché l'indirizzo VIP può cambiare al riavvio del gateway applicazione.

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 successivi

Per altre informazioni sul potenziamento della protezione delle applicazioni Web con il firewall applicazione Web tramite il gateway applicazione, visitare Web Application Firewall Overview