Configura TLS de extremo a extremo usando Application Gateway con PowerShell

Overview

Azure Application Gateway soporta cifrado de extremo a extremo del tráfico. La Pasarela de Aplicación termina la conexión TLS/SSL en la pasarela de la aplicación. La pasarela entonces aplica las reglas de enrutamiento al tráfico, vuelve a cifrar el paquete y reenvía el paquete al servidor backend correspondiente según las reglas de enrutamiento definidas. Cualquier respuesta del servidor web pasa por el mismo proceso en su regreso al usuario final.

Application Gateway permite definir opciones TLS personalizadas. También permite desactivar las siguientes versiones del protocolo: TLSv1.0, TLSv1.1 y TLSv1.2, así como definir qué suites de cifrados usar y el orden de preferencia. Para más información sobre las opciones configurables de TLS, consulte Introducción a la directiva TLS.

Note

SSL 2.0 y SSL 3.0 están desactivados por defecto y no pueden ser habilitados. Se consideran inseguros y no pueden usarse con Application Gateway.

Imagen del escenario

Scenario

En este escenario, aprendes a crear una pasarela de aplicaciones usando TLS de extremo a extremo con PowerShell.

En este escenario:

  • Crea un grupo de recursos llamado appgw-rg.
  • Crea una red virtual llamada appgwvnet con un espacio de direcciones 10.0.0.0/16.
  • Crea dos subredes llamadas appgwsubnet y appsubnet.
  • Crea una pequeña pasarela de aplicaciones que soporte cifrado TLS de extremo a extremo que limite las versiones y suites de cifrados del protocolo TLS.

Antes de empezar

Note

Se recomienda usar el módulo de PowerShell de Azure Az para interactuar con Azure. Para comenzar, consulte Instalación de Azure PowerShell. Para obtener información sobre cómo migrar al módulo Az PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.

Para configurar TLS de extremo a extremo con una pasarela de aplicaciones, se requiere un certificado para la pasarela y certificados para los servidores de backend. El certificado de pasarela se utiliza para derivar una clave simétrica según la especificación del protocolo TLS. La clave simétrica se utiliza entonces para cifrar y descifrar el tráfico enviado a la puerta de enlace. El certificado de pasarela debe estar en formato Personal Information Exchange (PFX). Este formato de archivo permite exportar la clave privada que requiere la pasarela de aplicación para realizar el cifrado y descifrado del tráfico.

Para el cifrado TLS de extremo a extremo, el backend debe estar explícitamente permitido por la pasarela de aplicaciones. Sube el certificado público de los servidores backend a la pasarela de aplicaciones. Al agregar el certificado, se garantiza que Application Gateway solo se comunique con instancias de back-end conocidas. Esto protege aún más la comunicación de un extremo a otro.

El proceso de configuración se describe en las siguientes secciones.

Creación del grupo de recursos

Esta sección te guía para crear un grupo de recursos que contenga la pasarela de la aplicación.

  1. Inicie sesión en su cuenta de Azure.

    Connect-AzAccount
    
  2. Selecciona la suscripción para usar en este escenario.

    Select-Azsubscription -SubscriptionName "<Subscription name>"
    
  3. Cree un grupo de recursos. (Sáltate este paso si estás usando un grupo de recursos existente.)

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

Creación de una red virtual y una subred para la puerta de enlace de aplicaciones

El siguiente ejemplo crea una red virtual y dos subredes. Una subred se utiliza para albergar la pasarela de aplicaciones. La otra subred se utiliza para los backends que alojan la aplicación web.

  1. Asigna un rango de direcciones para la subred que se usará para la pasarela de aplicaciones.

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

    Note

    Ajusta correctamente el tamaño de las subredes configuradas para una pasarela de aplicaciones. Una pasarela de aplicaciones v1 soporta hasta 32 instancias, mientras que una pasarela v2 escala hasta 125 instancias. Cada instancia toma una dirección IP de la subred, así que dimensiona la subred para que permita la máxima escalabilidad para tu SKU. Una subred demasiado pequeña puede afectar negativamente la ampliación de una pasarela de aplicaciones. Para el escalado automático de la v2 y los límites de instancias, véase Escalar Application Gateway v2 y WAF v2.

  2. Asigna un rango de direcciones para usar en el pool de direcciones del backend.

    $nicSubnet = New-AzVirtualNetworkSubnetConfig  -Name 'appsubnet' -AddressPrefix 10.0.2.0/24
    
  3. Crea una red virtual con las subredes definidas en los pasos anteriores.

    $vnet = New-AzvirtualNetwork -Name 'appgwvnet' -ResourceGroupName appgw-rg -Location "West US" -AddressPrefix 10.0.0.0/16 -Subnet $gwSubnet, $nicSubnet
    
  4. Recuperar el recurso de red virtual y los recursos de subred para usarlos en los pasos siguientes.

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

Crea una dirección IP pública para la configuración frontend

Crea un recurso IP público para usar en la pasarela de aplicaciones. Esta dirección IP pública se utiliza en uno de los pasos que siguen.

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

Importante

Application Gateway no soporta el uso de una dirección IP pública creada con una etiqueta de dominio definida. Solo se soporta una dirección IP pública con una etiqueta de dominio creada dinámicamente. Si necesitas un nombre DNS amigable para la pasarela de la aplicación, te recomendamos usar un registro CNAME como alias.

Crear un objeto de configuración de pasarela de aplicación

Todos los elementos de configuración se configuran antes de crear la pasarela de aplicación. Los siguientes pasos crean los elementos de configuración necesarios para un recurso de pasarela de aplicación.

  1. Crea una configuración de IP de pasarela de aplicación. Esta configuración configura qué subredes utiliza la pasarela de aplicación. Cuando se inicia la pasarela de aplicación, recoge una dirección IP de la subred configurada y enruta el tráfico de red a las direcciones IP del pool de IP del backend. Tenga en cuenta que cada instancia toma una dirección IP.

    $gipconfig = New-AzApplicationGatewayIPConfiguration -Name 'gwconfig' -Subnet $gwSubnet
    
  2. Crea una configuración de IP frontend. Esta configuración asigna una dirección IP privada o pública al frontend de la pasarela de aplicaciones. El siguiente paso asocia la dirección IP pública del paso anterior con la configuración de la IP frontal.

    $fipconfig = New-AzApplicationGatewayFrontendIPConfig -Name 'fip01' -PublicIPAddress $publicip
    
  3. Configura el pool de direcciones IP del backend con las direcciones IP de los servidores web del backend. Estas direcciones IP son las que reciben el tráfico de red que proviene del punto final de la IP frontal. Sustituye las direcciones IP de la muestra por los endpoints de tus propias direcciones IP de aplicación.

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

    Note

    Un nombre de dominio totalmente cualificado (FQDN) también es un valor válido para usar en lugar de una dirección IP para los servidores backend. Lo habilitas usando el switch -BackendFqdns .

  4. Configura el puerto IP frontal para el endpoint de IP pública. Este puerto es el al que los usuarios finales se conectan.

    $fp = New-AzApplicationGatewayFrontendPort -Name 'port01'  -Port 443
    
  5. Configura el certificado para la pasarela de aplicaciones. Este certificado se utiliza para descifrar y volver a cifrar el tráfico en la pasarela de aplicaciones.

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

    Note

    Este ejemplo configura el certificado utilizado para la conexión TLS. El certificado debe estar en formato .pfx.

  6. Crea el oyente HTTP para la pasarela de la aplicación. Asigna la configuración de la IP frontal, el puerto y el certificado TLS/SSL para usar.

    $listener = New-AzApplicationGatewayHttpListener -Name listener01 -Protocol Https -FrontendIPConfiguration $fipconfig -FrontendPort $fp -SSLCertificate $cert
    
  7. Sube el certificado que se usará en los recursos del backend del pool habilitados para TLS.

    Note

    La sonda predeterminada obtiene la clave pública del enlace TLS predeterminado en la dirección IP del backend y compara el valor de clave pública que recibe con el valor de clave pública que proporcionas aquí.

    Si usas cabeceras de host e Indicación de Nombre de Servidor (SNI) en el backend, la clave pública recuperada puede que no sea el sitio al que se dirige el tráfico. Si tienes dudas, visita https://127.0.0.1/ los servidores backend para confirmar qué certificado se usa para el enlace TLS por defecto . Utiliza la clave pública de esa petición en esta sección. Si usas encabezados host-headers y SNI en enlaces HTTPS y no recibes respuesta ni certificado de una solicitud manual del navegador en https://127.0.0.1/ los servidores backend, debes configurar un enlace TLS por defecto en ellos. Si no lo haces, las sondas fallan y el backend no está permitido.

    Para más información sobre SNI en Application Gateway, véase Resumen de la terminación de TLS y TLS de extremo a extremo con Application Gateway.

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

    Note

    El certificado proporcionado en el paso anterior debe ser la clave pública del certificado .pfx presente en el backend. Exporta el certificado (no el certificado raíz) instalado en el servidor backend en formato de Reclamación, Evidencia y Razonamiento (CER) y úsalo en este paso. Este paso permite el backend con la pasarela de aplicaciones.

    Si usas el SKU Application Gateway v2, crea un certificado raíz de confianza en lugar de un certificado de autenticación. Para más información, consulte Resumen de TLS de extremo a extremo con la Pasarela de Aplicaciones:

    $trustedRootCert01 = New-AzApplicationGatewayTrustedRootCertificate -Name "test1" -CertificateFile  <path to root cert file>
    
  8. Configura los ajustes HTTP para el backend del gateway de aplicaciones. Asigna el certificado subido en el paso anterior a la configuración HTTP.

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

    Para el SKU Application Gateway v2, utilice el siguiente comando:

    $poolSetting01 = New-AzApplicationGatewayBackendHttpSettings -Name “setting01” -Port 443 -Protocol Https -CookieBasedAffinity Disabled -TrustedRootCertificate $trustedRootCert01 -HostName "test1"
    
  9. Crea una regla de enrutamiento para balanceadores de carga que configure el comportamiento del balanceador de carga. En este ejemplo, se crea una regla básica de todos contra todos.

    $rule = New-AzApplicationGatewayRequestRoutingRule -Name 'rule01' -RuleType basic -BackendHttpSettings $poolSetting -HttpListener $listener -BackendAddressPool $pool
    
  10. Configura el tamaño de la instancia de la pasarela de aplicaciones. Para la SKU v1, los tamaños disponibles son Standard_Small, Standard_Medium y Standard_Large, y los valores de capacidad son del 1 al 32. El SKU v2 (Standard_v2 o WAF_v2) soporta hasta 125 instancias. Para más información, vea Escalado de Application Gateway v2 y WAF v2.

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

    Note

    Se puede elegir un conteo de instancias de 1 para fines de prueba. Es importante saber que cualquier recuento de instancias por debajo de dos instancias no está cubierto por el SLA y, por tanto, no se recomienda. Los pequeños gateways se usan para pruebas de desarrollo y no para fines de producción.

  11. Configura la política TLS para que se use en la pasarela de aplicaciones. Application Gateway permite establecer una versión mínima para las versiones del protocolo TLS.

    Los siguientes valores son una lista de versiones de protocolo que pueden definirse:

    • TLSV1_0
    • TLSV1_1
    • TLSV1_2

    El siguiente ejemplo establece la versión mínima del protocolo a TLSv1_2 y solo habilita TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 y 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
    

Creación de la puerta de enlace de aplicaciones

Siguiendo todos los pasos anteriores, crea la pasarela de aplicaciones. La creación de la puerta de entrada es un proceso que tarda mucho tiempo en ejecutarse.

Para el SKU V1 utiliza el siguiente comando

$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

Para el SKU V2 utiliza el siguiente comando

$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

Solicita un nuevo certificado si el certificado backend está caducado

Utiliza este procedimiento para aplicar un nuevo certificado si el certificado backend está caducado.

  1. Recupera la pasarela de aplicaciones para actualizarla.

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. Añadir el nuevo recurso de certificado del archivo .cer, que contiene la clave pública del certificado y puede ser el mismo certificado añadido al oyente para la terminación TLS en la pasarela de aplicación.

    Add-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name 'NewCert' -CertificateFile "appgw_NewCert.cer" 
    
  3. Introduce el nuevo objeto certificado de autenticación en una variable (NombreTipo: Microsoft.Azure. Commands.Network.Models.PSApplationGatewayAuthenticationCertificate).

    $AuthCert = Get-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name NewCert
    
  4. Asigna el nuevo certificado a la configuración BackendHttp y refiere a él con la variable $AuthCert. (Especifica el nombre de la configuración HTTP que quieres cambiar.)

$out= Set-AzApplicationGatewayBackendHttpSetting -ApplicationGateway $gw -Name "HTTP1" -Port 443 -Protocol "Https" -CookieBasedAffinity Disabled -AuthenticationCertificates $Authcert
  1. Compromete el cambio en la pasarela de aplicaciones y pasa la nueva configuración contenida a la variable $out.
Set-AzApplicationGateway -ApplicationGateway $gw  

Eliminar un certificado caducado no utilizado de la configuración HTTP

Utiliza este procedimiento para eliminar un certificado caducado no utilizado de la configuración HTTP.

  1. Recupera la pasarela de aplicaciones para actualizarla.

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. Indica el nombre del certificado de autenticación que quieres eliminar.

    Get-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw | select name
    
  3. Elimina el certificado de autenticación de una pasarela de aplicaciones.

    $gw=Remove-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name ExpiredCert
    
  4. Confirme el cambio.

Set-AzApplicationGateway -ApplicationGateway $gw

Limitar las versiones del protocolo TLS en una pasarela de aplicación existente

Los pasos anteriores te llevaban a crear una aplicación con TLS de extremo a extremo y desactivar ciertas versiones del protocolo TLS. El siguiente ejemplo desactiva ciertas políticas TLS en una pasarela de aplicaciones existente.

  1. Recupera la pasarela de aplicaciones para actualizarla.

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. Define una política TLS. En el siguiente ejemplo, TLSv1.0 y TLSv1.1 están deshabilitados y solo se permiten las suites de cifrado TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 y TLS_RSA_WITH_AES_128_GCM_SHA256 .

    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. Por último, actualiza la puerta de enlace. Este último paso es una tarea de larga duración. Cuando termina, se configura TLS de extremo a extremo en la pasarela de aplicaciones.

    $gw | Set-AzApplicationGateway
    

Obtén un nombre DNS de pasarela de aplicación

Una vez creado el gateway, el siguiente paso es configurar el frontend para la comunicación. Application Gateway requiere un nombre DNS asignado dinámicamente cuando se utiliza una IP pública, lo cual no es amigable. Para asegurar que los usuarios finales puedan acceder a la pasarela de aplicaciones, puedes usar un registro CNAME para apuntar al punto final público de la pasarela de aplicaciones. Para más información, consulta Configuración de un nombre de dominio personalizado para en Azure.

Para configurar un alias, recupera los detalles de la pasarela de aplicaciones y su nombre IP/DNS asociado utilizando el elemento PublicIPAddress adjunto a la pasarela de aplicaciones. Utiliza el nombre DNS de la pasarela de aplicaciones para crear un registro CNAME que apunta a las dos aplicaciones web a este nombre DNS. No recomendamos el uso de registros A, porque el VIP puede cambiar al reiniciar la pasarela de aplicaciones.

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"
                            }

Pasos siguientes

Para más información sobre cómo reforzar la seguridad de tus aplicaciones web con Web Application Firewall through Application Gateway, consulta la visión general de Web application firewall.