Configuración de TLS de un extremo a otro con Application Gateway mediante PowerShell

Información general

Azure Application Gateway admite el cifrado de un extremo a otro del tráfico. Application Gateway termina la conexión TLS/SSL en Application Gateway. La puerta de enlace aplica las reglas de enrutamiento al tráfico, vuelve a cifrar el paquete y lo reenvía al servidor back-end adecuado 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 admite la definición de opciones TLS personalizadas. También admite deshabilitar las siguientes versiones de protocolo: TLSv1.0, TLSv1.1 y TLSv1.2, así como definir qué conjuntos de cifrado usar y el orden de preferencia. Para más información sobre las opciones configurables de TLS, consulte Introducción a la directiva TLS.

Nota:

SSL 2.0 y SSL 3.0 están deshabilitados de manera predeterminada y no se pueden habilitar. Se considera que no son seguros y no se pueden usar con Application Gateway.

scenario image

Escenario

En este escenario, aprenderá a crear una instancia de Application Gateway mediante TLS de un extremo a otro con PowerShell.

En este escenario:

  • Creará un grupo de recursos llamado appgw-rg.
  • Creará una red virtual denominada appgwvnet con un espacio de direcciones de 10.0.0.0/16.
  • Creará dos subredes llamadas appgwsubnet y appsubnet.
  • Creará una pequeña instancia de Application Gateway que admite el cifrado TLS de un extremo a otro que limita las versiones del protocolo TLS y los conjuntos de cifrado.

Antes de empezar

Nota:

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

Para configurar TLS de un extremo a otro con una instancia de Application Gateway, se requieren un certificado para la puerta de enlace y certificados para los servidores back-end. El certificado de puerta de enlace se usa para derivar una clave simétrica según la especificación del protocolo TLS. A continuación, la clave simétrica se usa para cifrar y descifrar el tráfico que se envía a la puerta de enlace. El certificado de la puerta de enlace debe estar en formato de Intercambio de información personal (PFX). Este formato de archivo permite la exportación de la clave privada, lo que es necesario para que la puerta de enlace de aplicaciones pueda realizar el cifrado y descifrado del tráfico.

Para el cifrado TLS de un extremo a otro, la instancia de Application Gateway debe permitir el back-end de forma explícita. Cargue el certificado público de los servidores back-end en la puerta de enlace de aplicación. 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 secciones siguientes.

Crear el grupo de recursos

Esta sección le explica cómo crear un grupo de recursos que contiene la puerta de enlace de aplicaciones.

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

    Connect-AzAccount
    
  2. Seleccione la suscripción que se usará en este escenario.

    Select-Azsubscription -SubscriptionName "<Subscription name>"
    
  3. Cree un grupo de recursos. (Si utiliza un grupo de recursos existente, puede omitir este paso).

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

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

En el ejemplo siguiente se crea una red virtual y dos subredes. Una subred se usa para alojar la puerta de enlace de aplicaciones. La otra se usa para los back-ends que hospedan la aplicación web.

  1. Asigne un rango de direcciones para la subred que se va a utiliza para la puerta de enlace de aplicaciones.

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

    Nota:

    Las subredes configuradas para una puerta de enlace de aplicaciones deben tener el tamaño correcto. Las puertas de enlace de aplicaciones se puede configurar para un máximo de diez instancias. Cada instancia toma una dirección IP de la subred. Una subred demasiado pequeña puede afectar negativamente el escalado horizontal de una puerta de enlace de aplicaciones.

  2. Asigne el intervalo de direcciones que se va a usar el grupo de direcciones de back-end.

    $nicSubnet = New-AzVirtualNetworkSubnetConfig  -Name 'appsubnet' -AddressPrefix 10.0.2.0/24
    
  3. Cree 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. Recupere el recurso de red virtual y los recursos de subred que se usarán 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
    

Creación de una IP pública para la configuración del front-end

Cree un recurso de IP pública para la puerta de enlace de aplicaciones. Esta dirección IP pública se usa en uno de los siguientes pasos.

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

Importante

Application Gateway no admite el uso de una IP pública creada con una etiqueta de dominio definida. Solo se admite una dirección IP pública con una etiqueta de dominio creada dinámicamente. Si necesita un nombre DNS descriptivo para la puerta de enlace de aplicaciones, se recomienda usar un registro CNAME como alias.

Creación de un objeto de configuración de la puerta de enlace de aplicaciones

Se deben establecer todos los elementos de configuración antes de crear la puerta de enlace de aplicaciones. En los pasos siguientes, se crean los elementos de configuración necesarios para un recurso de puerta de enlace de aplicaciones.

  1. Cree una configuración de dirección IP de la puerta de enlace de aplicaciones. Este valor configura qué subredes utiliza la puerta de enlace de aplicaciones. Cuando se inicia Application Gateway, elige una dirección IP de la subred configurada y enruta el tráfico de red a las direcciones IP del grupo de IP de back-end. Tenga en cuenta que cada instancia toma una dirección IP.

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

    $fipconfig = New-AzApplicationGatewayFrontendIPConfig -Name 'fip01' -PublicIPAddress $publicip
    
  3. Configure el grupo de direcciones IP de back-end con las direcciones IP de los servidores web de back-end. Estas direcciones IP son las que reciben el tráfico de red procedente del punto de conexión de la IP del front-end. Reemplace las direcciones IP del ejemplo por sus propios puntos de conexión de direcciones IP de la aplicación.

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

    Nota:

    Un nombre de dominio completo (FQDN) es también un valor válido que se puede usar en lugar de una dirección IP para los servidores back-end. Se habilita mediante el conmutador -BackendFqdns.

  4. Configure el puerto IP de front-end para el punto de conexión de la IP pública. Este puerto es el puerto al que se conectan los usuarios finales.

    $fp = New-AzApplicationGatewayFrontendPort -Name 'port01'  -Port 443
    
  5. Configure el certificado de la puerta de enlace de aplicaciones. Este certificado se usa para descifrar y volver a cifrar el tráfico de la puerta de enlace de aplicaciones.

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

    Nota:

    En este ejemplo se configura el certificado que se usa para la conexión TLS. El certificado debe estar en formato .pfx.

  6. Cree el agente de escucha HTTP para la puerta de enlace de aplicaciones. Asigne la configuración de la IP de front-end, el puerto y el certificado de TLS/SSL que se van a usar.

    $listener = New-AzApplicationGatewayHttpListener -Name listener01 -Protocol Https -FrontendIPConfiguration $fipconfig -FrontendPort $fp -SSLCertificate $cert
    
  7. Cargue el certificado que se usará en los recursos del grupo de back-end habilitado para TLS/SSL.

    Nota:

    El sondeo predeterminado obtiene la clave pública del enlace TLS predeterminado que esta en la dirección IP del back-end y compara el valor de la clave pública que recibe con el valor de la clave pública que se especifique aquí.

    Si usa encabezados host e Indicación de nombre de servidor (SNI) en el back-end, es posible que la clave pública recuperada no sea el sitio previsto al que el tráfico fluirá. En caso de duda, visite https://127.0.0.1/ en los servidores back-end para confirmar qué certificado se usa para el enlace TLS predeterminado. Utilice la clave pública de dicha solicitud en esta sección. Si usa encabezados host y SNI en enlaces HTTPS y no recibe una respuesta y un certificado de una solicitud manual de un explorador a https://127.0.0.1/ en los servidores back-end, debe configurar un enlace TLS de forma predeterminada en ellos. Si no lo hace, se producirán errores en los sondeos y el back-end no estará en la lista de permitidos.

    Para más información sobre SNI en Application Gateway, consulte Introducción a la terminación TLS y a TLS de extremo a extremo con Application Gateway.

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

    Nota:

    El certificado proporcionado en el paso anterior debe ser la clave pública del certificado .pfx presente en el back-end. Exporte el certificado (no el certificado raíz) instalado en el servidor back-end en formato CER (notificación, evidencia y razonamiento) y utilícelo en este paso. En este paso se incluye el back-end en la lista de permitidos de Application Gateway.

    Si usa la SKU de Application Gateway v2, cree un certificado raíz de confianza en lugar de un certificado de autenticación. Para más información, consulte Introducción a TLS de un extremo a otro con Application Gateway:

    $trustedRootCert01 = New-AzApplicationGatewayTrustedRootCertificate -Name "test1" -CertificateFile  <path to root cert file>
    
  8. Configure los valores HTTP para el back-end de la puerta de enlace de aplicaciones. Asigne el certificado cargado en el paso anterior a la configuración HTTP.

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

    Para la SKU V2 de Application Gateway, use el siguiente comando:

    $poolSetting01 = New-AzApplicationGatewayBackendHttpSettings -Name “setting01” -Port 443 -Protocol Https -CookieBasedAffinity Disabled -TrustedRootCertificate $trustedRootCert01 -HostName "test1"
    
  9. Cree una regla de enrutamiento del equilibrador de carga que configure el comportamiento de este último. En este ejemplo, se crea una regla básica de round robin.

    $rule = New-AzApplicationGatewayRequestRoutingRule -Name 'rule01' -RuleType basic -BackendHttpSettings $poolSetting -HttpListener $listener -BackendAddressPool $pool
    
  10. Configure el tamaño de la instancia de la Puerta de enlace de aplicaciones. Los tamaños disponibles son Standard_Small, Standard_Medium y Standard_Large. Para la capacidad, los valores disponibles son de 1 a 10.

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

    Nota:

    Para las pruebas se puede elegir 1 en Número de instancias. Es importante saber que el Acuerdo de Nivel de Servicio no cubre ningún número de instancias que esté por debajo de las dos instancias y, por consiguiente, no se recomienda. Las puertas de enlace pequeñas se deben usar para pruebas de desarrollo, no con fines de producción.

  11. Configure la directiva TLS que se usará en Application Gateway. Application Gateway admite la posibilidad de establecer una versión mínima para las versiones del protocolo TLS.

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

    • TLSV1_0
    • TLSV1_1
    • TLSV1_2

    El ejemplo siguiente establece la versión mínima del protocolo en TLSv1_2 y habilita solamente 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

Con todos los pasos anteriores, cree la puerta de enlace de aplicaciones. La creación de la puerta de enlace es un proceso que tarda mucho tiempo en ejecutarse.

Para SKU V1, use 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 SKU V2, use 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

Aplicación de un certificado nuevo si el certificado de back-end ha caducado

Use este procedimiento para aplicar un certificado nuevo si el certificado de back-end ha caducado.

  1. Recupere la puerta de enlace de aplicaciones que se actualizará.

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. Agregue el nuevo recurso de certificado desde el archivo .cer, que contiene la clave pública del certificado y que también puede ser el mismo certificado que se agrega al agente de escucha para la terminación TLS en Application Gateway.

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

    $AuthCert = Get-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name NewCert
    
  4. Asigne el nuevo certificado en el valor BackendHttp y hágale referencia con la variable $AuthCert. (Especifique el nombre del valor HTTP que quiere cambiar).

$out= Set-AzApplicationGatewayBackendHttpSetting -ApplicationGateway $gw -Name "HTTP1" -Port 443 -Protocol "Https" -CookieBasedAffinity Disabled -AuthenticationCertificates $Authcert
  1. Confirme el cambio en la instancia de Application Gateway y pase la nueva configuración contenida en la variable $out.
Set-AzApplicationGateway -ApplicationGateway $gw  

Eliminación de un certificado expirado sin usar de la configuración de HTTP

Use este procedimiento para eliminar un certificado expirado sin usar de la configuración de HTTP.

  1. Recupere la puerta de enlace de aplicaciones que se actualizará.

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. Enumere el nombre del certificado de autenticación que quiera quitar.

    Get-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw | select name
    
  3. Quite el certificado de autenticación de una instancia de Application Gateway.

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

Set-AzApplicationGateway -ApplicationGateway $gw

Límite de las versiones del protocolo TLS en una puerta de aplicaciones existente

En los pasos anteriores se ha realizado la creación de una aplicación con TLS de un extremo a otro y la deshabilitación de determinadas versiones del protocolo TLS. En el ejemplo siguiente se deshabilitan determinadas directivas TLS en una instancia de Application Gateway existente.

  1. Recupere la puerta de enlace de aplicaciones que se actualizará.

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. Defina una directiva de TLS. En el ejemplo siguiente, TLSv1.0 y TLSv1.1 están deshabilitados y los conjuntos 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 son los únicos permitidos.

    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, actualice la puerta de enlace. Este último paso es una tarea de ejecución prolongada. Una vez terminado, TLS de un extremo a otro está configurada en Application Gateway.

    $gw | Set-AzApplicationGateway
    

Obtención de un nombre DNS de una puerta de enlace de aplicaciones

Una vez creada la puerta de enlace, el siguiente paso consiste en configurar el front-end para la comunicación. La puerta de enlace de aplicaciones requiere un nombre DNS asignado dinámicamente, que no es descriptivo, cuando se utiliza una dirección IP pública. Para asegurarse de que los usuarios finales puedan llegar a la puerta de enlace de aplicaciones, puede utilizar un registro CNAME para que apunte al punto de conexión público de dicha puerta. Para más información, consulte Configuración de un nombre de dominio personalizado en Azure.

Para configurar un alias, recupere los detalles de la puerta de enlace de aplicaciones y su nombre de IP o DNS asociado mediante el elemento PublicIPAddress asociado a dicha puerta de enlace de aplicaciones. Utilice el nombre DNS de la puerta de enlace de aplicaciones para crear un registro CNAME, que hace que las dos aplicaciones web apunten a este nombre DNS. No se recomienda el uso de registros A, ya que la IP virtual puede cambiar al reiniciarse la puerta de enlace 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 la protección de la seguridad de las aplicaciones web con el firewall de aplicaciones web mediante Application Gateway, consulte Información general sobre el firewall de aplicaciones web.