Configura TLS end-to-end utilizzando Application Gateway con PowerShell

Overview

gateway applicazione di Azure supporta la crittografia end-to-end del traffico. Application Gateway termina la connessione TLS/SSL presso il gateway applicativo. Il gateway applica quindi le regole di routing al traffico, ri-cripta il pacchetto e inoltra il pacchetto al server backend appropriato in base alle regole di routing definite. Eventuali risposte dal server Web subiscono lo stesso processo in ritorno verso l'utente finale.

Application Gateway supporta la definizione di opzioni TLS personalizzate. Supporta inoltre la disabilitazione delle seguenti versioni del protocollo: TLSv1.0, TLSv1.1 e TLSv1.2, oltre a definire quali suite di cifrari utilizzare e l'ordine di preferenza. Per altre informazioni sulle opzioni TLS configurabili, vedere Panoramica dei criteri TLS.

Note

SSL 2.0 e SSL 3.0 sono disabilitati di default e non possono essere abilitate. Sono considerate non sicure e non possono essere utilizzate con Application Gateway.

Immagine dello scenario

Scenario

In questo scenario, impari a creare un gateway applicativo usando TLS end-to-end con PowerShell.

Questo scenario illustrerà come:

  • Crea un gruppo di risorse chiamato appgw-rg.
  • Crea una rete virtuale chiamata appgwvnet con uno spazio di indirizzi 10.0.0.0/16.
  • Crea due subnet chiamate appgwsubnet e appsubnet.
  • Crea un piccolo gateway applicativo che supporti la crittografia TLS end-to-end che limiti le versioni del protocollo TLS e le suite di cifratura.

Prima di iniziare

Note

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo Az PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Per configurare TLS end-to-end con un gateway applicativo, è necessario un certificato per il gateway e certificati per i server backend. Il certificato gateway viene utilizzato per derivare una chiave simmetrica secondo la specifica del protocollo TLS. La chiave simmetrica viene quindi utilizzata per cifrare e decriptare il traffico inviato al gateway. Il certificato gateway deve essere in formato Personal Information Exchange (PFX). Questo formato di file permette di esportare la chiave privata richiesta dal gateway applicativo per eseguire la crittografia e la decrittazione del traffico.

Per la crittografia TLS end-to-end, il backend deve essere esplicitamente consentito dal gateway applicativo. Carica il certificato pubblico dei server backend sul gateway applicativo. L'aggiunta del certificato garantisce che il gateway applicazione comunichi solo con istanze back-end note. proteggendo ulteriormente la comunicazione end-to-end.

Il processo di configurazione è descritto nelle sezioni seguenti.

Creare il gruppo di risorse

Questa sezione ti guida nella creazione di un gruppo di risorse che contiene il gateway applicativo.

  1. Accedere all'account di Azure.

    Connect-AzAccount
    
  2. Seleziona l'abbonamento da utilizzare in questo scenario.

    Select-Azsubscription -SubscriptionName "<Subscription name>"
    
  3. Crea un gruppo di risorse. (Salta questo passaggio se stai usando un gruppo di risorse esistente.)

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

Creare una rete virtuale e una subnet per il gateway applicativo

Il seguente esempio crea una rete virtuale e due subnet. Una subnet viene utilizzata per ospitare il gateway applicativo. L'altra subnet viene utilizzata per i back-end che ospitano l'applicazione web.

  1. Assegna un intervallo di indirizzi per la sottorete da utilizzare per il gateway applicativo.

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

    Note

    Dimensiona correttamente le subnet configurate per un gateway applicativo. Un gateway applicativo v1 supporta fino a 32 istanze, mentre un gateway applicativo v2 può scalare fino a 125 istanze. Ogni istanza prende un indirizzo IP dalla subnet, quindi dimensiona la subnet per consentire la massima scalabilità per il tuo SKU. Una subnet troppo piccola può influire negativamente sulla scalabilità di un gateway applicativo. Per l'autoscaling v2 e i limiti delle istanze, vedi Scala Application Gateway v2 e WAF v2.

  2. Assegnare un intervallo di indirizzi da utilizzare per il pool di indirizzi backend.

    $nicSubnet = New-AzVirtualNetworkSubnetConfig  -Name 'appsubnet' -AddressPrefix 10.0.2.0/24
    
  3. Crea una rete virtuale con le subnet definite nei passaggi precedenti.

    $vnet = New-AzvirtualNetwork -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 di subnet da utilizzare nei passaggi successivi.

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

Crea un indirizzo IP pubblico per la configurazione frontend

Crea una risorsa IP pubblica da utilizzare per il gateway applicativo. Questo indirizzo IP pubblico viene utilizzato in uno dei passaggi che seguono.

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

Importante

Application Gateway non supporta l'uso di un indirizzo IP pubblico creato con un'etichetta di dominio definita. È supportato solo un indirizzo IP pubblico con un'etichetta di dominio creata dinamicamente. Se hai bisogno di un nome DNS amichevole per il gateway applicativo, ti consigliamo di usare un record CNAME come alias.

Crea un oggetto di configurazione gateway applicativo

Tutti gli elementi di configurazione sono impostati prima della creazione del gateway applicativo. I passaggi seguenti creano gli elementi di configurazione necessari per una risorsa gateway applicativa.

  1. Crea una configurazione IP di gateway applicativo. Questa impostazione configura quali subreti utilizza il gateway applicativo. Quando il gateway applicativo avvia, rileva un indirizzo IP dalla subnet configurata e instrada il traffico di rete agli indirizzi IP nel pool IP backend. Tenere presente che ogni istanza ha un indirizzo IP.

    $gipconfig = New-AzApplicationGatewayIPConfiguration -Name 'gwconfig' -Subnet $gwSubnet
    
  2. Crea una configurazione di IP frontend. Questa impostazione mappa un indirizzo IP privato o pubblico al frontend del gateway applicativo. Il passaggio successivo associa l'indirizzo IP pubblico del passaggio precedente alla configurazione IP del frontend.

    $fipconfig = New-AzApplicationGatewayFrontendIPConfig -Name 'fip01' -PublicIPAddress $publicip
    
  3. Configura il pool di indirizzi IP del backend con gli indirizzi IP dei server web del backend. Questi indirizzi IP sono gli indirizzi IP che ricevono il traffico di rete proveniente dall'endpoint IP frontend. Sostituisci gli indirizzi IP nel campione con i tuoi endpoint di indirizzi IP applicativi.

    $pool = New-AzApplicationGatewayBackendAddressPool -Name 'pool01' -BackendIPAddresses 203.0.113.1, 203.0.113.2, 203.0.113.3
    

    Note

    Un nome di dominio completamente qualificato (FQDN) è anche un valore valido da utilizzare al posto di un indirizzo IP per i server backend. Lo abiliti usando lo switch -BackendFqdns .

  4. Configura la porta IP frontend per l'endpoint IP pubblico. Questa porta è quella a cui gli utenti finali si connettono.

    $fp = New-AzApplicationGatewayFrontendPort -Name 'port01'  -Port 443
    
  5. Configura il certificato per il gateway applicativo. Questo certificato viene utilizzato per decriptare e ricriptare il traffico sul gateway applicativo.

    $passwd = ConvertTo-SecureString  <certificate file password> -AsPlainText -Force 
    $cert = New-AzApplicationGatewaySSLCertificate -Name cert01 -CertificateFile <full path to .pfx file> -Password $passwd 
    

    Note

    Questo esempio configura il certificato utilizzato per la connessione TLS. Il certificato deve essere in formato .pfx.

  6. Crea l'ascoltatore HTTP per il gateway applicativo. Assegna la configurazione IP frontend, la porta e il certificato TLS/SSL da utilizzare.

    $listener = New-AzApplicationGatewayHttpListener -Name listener01 -Protocol Https -FrontendIPConfiguration $fipconfig -FrontendPort $fp -SSLCertificate $cert
    
  7. Carica il certificato da utilizzare sulle risorse del backend pool abilitate a TLS.

    Note

    La sonda predefinita ottiene la chiave pubblica dal binding TLS predefinito sull'indirizzo IP del backend e confronta il valore della chiave pubblica che riceve con il valore della chiave pubblica che fornisci qui.

    Se usi header host e Server Name Indication (SNI) nel backend, la chiave pubblica recuperata potrebbe non essere il sito previsto verso cui il traffico arriva. Se hai dubbi, visita https://127.0.0.1/ i server backend per confermare quale certificato viene usato per il binding TLS predefinito . Usa la chiave pubblica di quella richiesta in questa sezione. Se usi header host e SNI su binding HTTPS e non ricevi risposta e certificato da una richiesta manuale del browser sui https://127.0.0.1/ server backend, devi impostare un binding TLS predefinito su di essi. Se non lo fai, le sonde si guastano e il backend non è permesso.

    Per maggiori informazioni su SNI in Application Gateway, vedi Panoramica della terminazione TLS e TLS end-to-end con Application Gateway.

    $authcert = New-AzApplicationGatewayAuthenticationCertificate -Name 'allowlistcert1' -CertificateFile C:\cert.cer
    

    Note

    Il certificato fornito nel passaggio precedente dovrebbe essere la chiave pubblica del certificato .pfx presente nel backend. Esporta il certificato (non il certificato root) installato sul server backend in formato Claim, Evidence, and Reasoning (CER) e utilizzalo in questo passaggio. Questo passaggio consente il backend con il gateway applicativo.

    Se stai usando lo SKU Application Gateway v2, crea un certificato root affidabile invece di un certificato di autenticazione. Per ulteriori informazioni, vedi Panoramica del TLS end-to-end con Application Gateway:

    $trustedRootCert01 = New-AzApplicationGatewayTrustedRootCertificate -Name "test1" -CertificateFile  <path to root cert file>
    
  8. Configura le impostazioni HTTP per il backend del gateway applicativo. Assegna il certificato caricato nel passaggio precedente alle impostazioni HTTP.

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

    Per lo SKU Application Gateway v2, usa il seguente comando:

    $poolSetting01 = New-AzApplicationGatewayBackendHttpSettings -Name “setting01” -Port 443 -Protocol Https -CookieBasedAffinity Disabled -TrustedRootCertificate $trustedRootCert01 -HostName "test1"
    
  9. Crea una regola di routing per il bilanciatore di carico che configuri il comportamento del bilanciatore di carico. In questo esempio, viene creata una regola base del girone all'italiana.

    $rule = New-AzApplicationGatewayRequestRoutingRule -Name 'rule01' -RuleType basic -BackendHttpSettings $poolSetting -HttpListener $listener -BackendAddressPool $pool
    
  10. Configura la dimensione dell'istanza del gateway applicativo. Per lo SKU v1, le dimensioni disponibili sono Standard_Small, Standard_Medium e Standard_Large, e i valori di capacità sono da 1 a 32. La SKU v2 (Standard_v2 o WAF_v2) supporta fino a 125 istanze. Per altre informazioni, vedere Ridimensionare il gateway applicazione v2 e WAF v2.

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

    Note

    Per scopi di test può essere scelto un conteggio di istanze pari a 1. È importante sapere che qualsiasi conteggio di istanze inferiore a due istanze non è coperto dallo SLA e quindi non è raccomandato. I piccoli gateway devono essere usati per i test di sviluppo e non per scopi di produzione.

  11. Configura la policy TLS per essere utilizzata sul gateway applicativo. Application Gateway supporta la possibilità di impostare una versione minima per le versioni del protocollo TLS.

    I seguenti valori sono riportati da un elenco di versioni di protocollo che possono essere definite:

    • TLSV1_0
    • TLSV1_1
    • TLSV1_2

    Il seguente esempio imposta la versione minima del protocollo a 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 .

    $SSLPolicy = New-AzApplicationGatewaySSLPolicy -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" -PolicyType Custom
    

Creare il gateway dell'applicazione

Utilizzando tutti i passaggi precedenti, crea il gateway applicativo. La creazione del gateway è un processo che richiede molto tempo per essere eseguito.

Per lo SKU V1 usa il comando qui sotto

$appgw = New-AzApplicationGateway -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

Per lo SKU V2 usa il comando qui sotto

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

Richiedi un nuovo certificato se il certificato backend è scaduto

Utilizzare questa procedura per applicare un nuovo certificato se il certificato backend è scaduto.

  1. Recupera il gateway applicativo per aggiornare.

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. Aggiungi la nuova risorsa del certificato dal file .cer, che contiene la chiave pubblica del certificato e può anche essere lo stesso certificato aggiunto all'ascoltatore per la terminazione TLS nel gateway applicativo.

    Add-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name 'NewCert' -CertificateFile "appgw_NewCert.cer" 
    
  3. Inserisci il nuovo oggetto certificato di autenticazione in una variabile (TypeName: Microsoft.Azure. Comandi.Rete.Modelli.PSApplicazioneGatewayAutenticazioneCertificato).

    $AuthCert = Get-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name NewCert
    
  4. Assegna il nuovo certificato all'impostazione BackendHttp e riferiscilo con la variabile $AuthCert. (Specifica il nome dell'impostazione HTTP che vuoi cambiare.)

$out= Set-AzApplicationGatewayBackendHttpSetting -ApplicationGateway $gw -Name "HTTP1" -Port 443 -Protocol "Https" -CookieBasedAffinity Disabled -AuthenticationCertificates $Authcert
  1. Effettua il commit della modifica nel gateway applicativo e passa la nuova configurazione contenuta nella variabile $out.
Set-AzApplicationGateway -ApplicationGateway $gw  

Rimuovi un certificato scaduto inutilizzato dalle impostazioni HTTP

Usa questa procedura per rimuovere un certificato scaduto inutilizzato dalle impostazioni HTTP.

  1. Recupera il gateway applicativo per aggiornare.

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. Indica il nome del certificato di autenticazione che vuoi rimuovere.

    Get-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw | select name
    
  3. Rimuovi il certificato di autenticazione da un gateway applicativo.

    $gw=Remove-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name ExpiredCert
    
  4. Approvare la modifica.

Set-AzApplicationGateway -ApplicationGateway $gw

Limitare le versioni del protocollo TLS su un gateway applicativo esistente

I passaggi precedenti ti hanno accompagnato nella creazione di un'applicazione con TLS end-to-end e nella disabilitazione di alcune versioni del protocollo TLS. Il seguente esempio disabilita alcune policy TLS su un gateway applicativo esistente.

  1. Recupera il gateway applicativo per aggiornare.

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. Definisci una policy TLS. Nel seguente esempio, TLSv1.0 e TLSv1.1 sono disabilitati e le suite di cifrari 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 le uniche ammesse.

    Set-AzApplicationGatewaySSLPolicy -MinProtocolVersion TLSv1_2 -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, aggiorna il gateway. Quest'ultimo passo è un compito che dura da tempo. Quando è terminato, il TLS end-to-end viene configurato sul gateway applicativo.

    $gw | Set-AzApplicationGateway
    

Ottieni un nome DNS per un gateway applicativo

Dopo la creazione del gateway, il passo successivo è configurare il front-end per la comunicazione. Application Gateway richiede un nome DNS assegnato dinamicamente quando si utilizza un IP pubblico, il che non è amichevole. Per garantire che gli utenti finali possano accedere al gateway applicativo, puoi usare un record CNAME per puntare all'endpoint pubblico del gateway applicativo. Per maggiori informazioni, vedi Configurare un nome di dominio personalizzato per in Azure.

Per configurare un alias, recuperare i dettagli del gateway applicativo e del nome IP/DNS associato utilizzando l'elemento PublicIPAddress associato al gateway applicativo. Usa il nome DNS del gateway applicativo per creare un record CNAME che punti le due applicazioni web a questo nome DNS. Non consigliamo l'uso degli A-record, perché il VIP può cambiare al riavvio del gateway applicativo.

Get-AzPublicIpAddress -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 maggiori informazioni su come rafforzare la sicurezza delle tue applicazioni web con Web application firewall tramite Application Gateway, consulta la panoramica del Web application firewall.