Configurar o TLS ponto a ponto com o Gateway de Aplicação através do PowerShell

Descrição geral

O Gateway de Aplicativo do Azure dá suporte à criptografia de ponta a ponta do tráfego. O Application Gateway encerra a conexão TLS/SSL no gateway de aplicativo. Em seguida, o gateway aplica as regras de roteamento ao tráfego, criptografa novamente o pacote e encaminha o pacote para o servidor back-end apropriado com base nas regras de roteamento definidas. Qualquer resposta do servidor Web atravessa o mesmo processo para o utilizador final.

O Application Gateway suporta a definição de opções TLS personalizadas. Ele também suporta a desativação das seguintes versões de protocolo: TLSv1.0, TLSv1.1 e TLSv1.2, bem como a definição de quais pacotes de codificação usar e a ordem de preferência. Para saber mais sobre as opções configuráveis de TLS, consulte a visão geral da política de TLS.

Nota

O SSL 2.0 e o SSL 3.0 estão desativados por padrão e não podem ser habilitados. Eles são considerados não seguros e não podem ser usados com o Application Gateway.

scenario image

Scenario

Nesse cenário, você aprenderá a criar um gateway de aplicativo usando TLS de ponta a ponta com PowerShell.

Este cenário irá:

  • Crie um grupo de recursos chamado appgw-rg.
  • Crie uma rede virtual chamada appgwvnet com um espaço de endereço de 10.0.0.0/16.
  • Crie duas sub-redes chamadas appgwsubnet e appsubnet.
  • Crie um pequeno gateway de aplicativo que suporte criptografia TLS de ponta a ponta que limite as versões do protocolo TLS e os pacotes de codificação.

Antes de começar

Nota

Recomendamos que utilize o módulo do Azure Az PowerShell para interagir com o Azure. Veja Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.

Para configurar o TLS de ponta a ponta com um gateway de aplicativo, um certificado é necessário para o gateway e certificados são necessários para os servidores back-end. O certificado de gateway é usado para derivar uma chave simétrica de acordo com a especificação do protocolo TLS. A chave simétrica é então usada para criptografar e descriptografar o tráfego enviado para o gateway. O certificado de gateway precisa estar no formato PFX (Personal Information Exchange). Esse formato de arquivo permite exportar a chave privada exigida pelo gateway de aplicativo para executar a criptografia e a descriptografia do tráfego.

Para criptografia TLS de ponta a ponta, o back-end deve ser explicitamente permitido pelo gateway de aplicativo. Carregue o certificado público dos servidores back-end para o gateway de aplicativo. Adicionar o certificado garante que o gateway de aplicativo se comunique apenas com instâncias de back-end conhecidas. Isso garante ainda mais a comunicação de ponta a ponta.

O processo de configuração é descrito nas seções a seguir.

Criar o grupo de recursos

Esta seção o orienta na criação de um grupo de recursos que contém o gateway de aplicativo.

  1. Inicie sessão na sua conta do Azure.

    Connect-AzAccount
    
  2. Selecione a assinatura a ser usada para esse cenário.

    Select-Azsubscription -SubscriptionName "<Subscription name>"
    
  3. Crie um grupo de recursos. (Ignore este passo se estiver a utilizar um grupo de recursos existente.)

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

Criar uma rede virtual e uma sub-rede para o gateway de aplicação

O exemplo a seguir cria uma rede virtual e duas sub-redes. Uma sub-rede é usada para armazenar o gateway de aplicativo. A outra sub-rede é usada para os back-ends que hospedam o aplicativo Web.

  1. Atribua um intervalo de endereços para a sub-rede a ser usada para o gateway de aplicativo.

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

    Nota

    As sub-redes configuradas para um gateway de aplicativo devem ser dimensionadas corretamente. Um gateway de aplicativo pode ser configurado para até 10 instâncias. Cada instância usa um endereço IP da sub-rede. Uma sub-rede muito pequena pode afetar negativamente a expansão de um gateway de aplicativo.

  2. Atribua um intervalo de endereços a ser usado para o pool de endereços de back-end.

    $nicSubnet = New-AzVirtualNetworkSubnetConfig  -Name 'appsubnet' -AddressPrefix 10.0.2.0/24
    
  3. Crie uma rede virtual com as sub-redes definidas nas etapas anteriores.

    $vnet = New-AzvirtualNetwork -Name 'appgwvnet' -ResourceGroupName appgw-rg -Location "West US" -AddressPrefix 10.0.0.0/16 -Subnet $gwSubnet, $nicSubnet
    
  4. Recupere o recurso de rede virtual e os recursos de sub-rede a serem usados nas etapas a seguir.

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

Criar um endereço IP público para a configuração de frontend

Crie um recurso IP público a ser usado para o gateway de aplicativo. Esse endereço IP público é usado em uma das etapas a seguir.

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

Importante

O Application Gateway não suporta o uso de um endereço IP público criado com um rótulo de domínio definido. Apenas um endereço IP público com um rótulo de domínio criado dinamicamente é suportado. Se você precisar de um nome DNS amigável para o gateway de aplicativo, recomendamos usar um registro CNAME como um alias.

Criar um objeto de configuração do gateway de aplicação

Todos os itens de configuração são definidos antes de criar o gateway de aplicativo. Com os seguintes passos, irá criar os itens de configuração necessários para um recurso do gateway de aplicação.

  1. Crie uma configuração IP do gateway de aplicativo. Essa configuração define qual das sub-redes o gateway de aplicativo usa. Quando o gateway de aplicativo é iniciado, ele pega um endereço IP da sub-rede configurada e roteia o tráfego de rede para os endereços IP no pool de IP de back-end. Note que cada instância terá um endereço IP.

    $gipconfig = New-AzApplicationGatewayIPConfiguration -Name 'gwconfig' -Subnet $gwSubnet
    
  2. Crie uma configuração de IP frontend. Essa configuração mapeia um endereço IP privado ou público para o front-end do gateway de aplicativo. A etapa a seguir associa o endereço IP público na etapa anterior à configuração de IP frontend.

    $fipconfig = New-AzApplicationGatewayFrontendIPConfig -Name 'fip01' -PublicIPAddress $publicip
    
  3. Configure o pool de endereços IP de back-end com os endereços IP dos servidores Web de back-end. Esses endereços IP são os endereços IP que recebem o tráfego de rede que vem do ponto de extremidade IP frontend. Substitua os endereços IP no exemplo por seus próprios pontos de extremidade de endereço IP do aplicativo.

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

    Nota

    Um nome de domínio totalmente qualificado (FQDN) também é um valor válido a ser usado no lugar de um endereço IP para os servidores back-end. Você habilitá-lo usando a opção -BackendFqdns .

  4. Configure a porta IP frontend para o ponto de extremidade IP público. Essa porta é a porta à qual os usuários finais se conectam.

    $fp = New-AzApplicationGatewayFrontendPort -Name 'port01'  -Port 443
    
  5. Configure o certificado para o gateway de aplicativo. Esse certificado é usado para descriptografar e criptografar novamente o tráfego no gateway de aplicativo.

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

    Nota

    Este exemplo configura o certificado usado para a conexão TLS. O certificado precisa estar no formato .pfx.

  6. Crie o ouvinte HTTP para o gateway de aplicativo. Atribua a configuração de IP frontend, a porta e o certificado TLS/SSL a serem usados.

    $listener = New-AzApplicationGatewayHttpListener -Name listener01 -Protocol Https -FrontendIPConfiguration $fipconfig -FrontendPort $fp -SSLCertificate $cert
    
  7. Carregue o certificado a ser usado nos recursos do pool de back-end habilitado para TLS.

    Nota

    O teste padrão obtém a chave pública da ligação TLS padrão no endereço IP do back-end e compara o valor da chave pública que ele recebe com o valor da chave pública que você fornece aqui.

    Se você estiver usando cabeçalhos de host e Indicação de Nome do Servidor (SNI) no back-end, a chave pública recuperada pode não ser o site pretendido para o qual o tráfego flui. Em caso de dúvida, visite https://127.0.0.1/ os servidores de back-end para confirmar qual certificado é usado para a ligação TLS padrão . Use a chave pública dessa solicitação nesta seção. Se você estiver usando cabeçalhos de host e SNI em ligações HTTPS e não receber uma resposta e um certificado de uma solicitação manual do navegador para https://127.0.0.1/ nos servidores back-end, deverá configurar uma associação TLS padrão neles. Se você não fizer isso, as sondas falharão e o back-end não será permitido.

    Para obter mais informações sobre SNI no Application Gateway, consulte Visão geral da terminação TLS e TLS de ponta a ponta com o Application Gateway.

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

    Nota

    O certificado fornecido na etapa anterior deve ser a chave pública do certificado .pfx presente no back-end. Exporte o certificado (não o certificado raiz) instalado no servidor back-end no formato Claim, Evidence and Reasoning (CER) e use-o nesta etapa. Esta etapa permite o back-end com o gateway de aplicativo.

    Se você estiver usando a SKU do Application Gateway v2, crie um certificado raiz confiável em vez de um certificado de autenticação. Para obter mais informações, consulte Visão geral do TLS de ponta a ponta com o Application Gateway:

    $trustedRootCert01 = New-AzApplicationGatewayTrustedRootCertificate -Name "test1" -CertificateFile  <path to root cert file>
    
  8. Configure as configurações HTTP para o back-end do gateway de aplicativo. Atribua o certificado carregado na etapa anterior às configurações HTTP.

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

    Para a SKU do Application Gateway v2, use o seguinte comando:

    $poolSetting01 = New-AzApplicationGatewayBackendHttpSettings -Name “setting01” -Port 443 -Protocol Https -CookieBasedAffinity Disabled -TrustedRootCertificate $trustedRootCert01 -HostName "test1"
    
  9. Crie uma regra de roteamento do balanceador de carga que configure o comportamento do balanceador de carga. Neste exemplo, uma regra round-robin básica é criada.

    $rule = New-AzApplicationGatewayRequestRoutingRule -Name 'rule01' -RuleType basic -BackendHttpSettings $poolSetting -HttpListener $listener -BackendAddressPool $pool
    
  10. Configure o tamanho da instância do gateway de aplicação. Os tamanhos disponíveis são Standard_Small, Standard_Medium e Standard_Large. Para a capacidade, os valores disponíveis são de 1 a 10.

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

    Nota

    Uma contagem de instâncias de 1 pode ser escolhida para fins de teste. É importante saber que qualquer contagem de instâncias em duas instâncias não é coberta pelo SLA e, portanto, não é recomendada. Pequenos gateways devem ser usados para teste de desenvolvimento e não para fins de produção.

  11. Configure a política TLS a ser usada no gateway de aplicativo. O Application Gateway suporta a capacidade de definir uma versão mínima para versões do protocolo TLS.

    Os valores a seguir são uma lista de versões de protocolo que podem ser definidas:

    • TLSV1_0
    • TLSV1_1
    • TLSV1_2

    O exemplo a seguir define a versão mínima do protocolo como TLSv1_2 e habilita apenas 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
    

Criar o gateway de aplicação

Usando todas as etapas anteriores, crie o gateway de aplicativo. A criação do gateway é um processo que leva muito tempo para ser executado.

Para V1 SKU use o comando abaixo

$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 V2 SKU use o comando abaixo

$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

Aplicar um novo certificado se o certificado de back-end tiver expirado

Use este procedimento para aplicar um novo certificado se o certificado de back-end tiver expirado.

  1. Recupere o gateway de aplicativo a ser atualizado.

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. Adicione o novo recurso de certificado do arquivo .cer, que contém a chave pública do certificado e também pode ser o mesmo certificado adicionado ao ouvinte para terminação TLS no gateway de aplicativo.

    Add-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name 'NewCert' -CertificateFile "appgw_NewCert.cer" 
    
  3. Obtenha o novo objeto de certificado de autenticação em uma variável (TypeName: Microsoft.Azure.Commands.Network.Models.PSApplicationGatewayAuthenticationCertificate).

    $AuthCert = Get-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name NewCert
    
  4. Atribua o novo certificado à configuração BackendHttp e consulte-o com a variável $AuthCert. (Especifique o nome da configuração HTTP que você deseja alterar.)

$out= Set-AzApplicationGatewayBackendHttpSetting -ApplicationGateway $gw -Name "HTTP1" -Port 443 -Protocol "Https" -CookieBasedAffinity Disabled -AuthenticationCertificates $Authcert
  1. Confirme a alteração no gateway de aplicativo e passe a nova configuração contida para a variável $out.
Set-AzApplicationGateway -ApplicationGateway $gw  

Remover um certificado expirado não utilizado das Configurações HTTP

Use este procedimento para remover um certificado expirado não utilizado das Configurações HTTP.

  1. Recupere o gateway de aplicativo a ser atualizado.

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. Liste o nome do certificado de autenticação que você deseja remover.

    Get-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw | select name
    
  3. Remova o certificado de autenticação de um gateway de aplicativo.

    $gw=Remove-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name ExpiredCert
    
  4. Confirme a alteração.

Set-AzApplicationGateway -ApplicationGateway $gw

Limitar versões do protocolo TLS em um gateway de aplicativo existente

As etapas anteriores levaram você a criar um aplicativo com TLS de ponta a ponta e desabilitar determinadas versões do protocolo TLS. O exemplo a seguir desabilita determinadas políticas TLS em um gateway de aplicativo existente.

  1. Recupere o gateway de aplicativo a ser atualizado.

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. Defina uma política TLS. No exemplo a seguir, TLSv1.0 e TLSv1.1 são desabilitados e os pacotes de codificação TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 e TLS_RSA_WITH_AES_128_GCM_SHA256 são os ú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 fim, atualize o gateway. Este último passo é uma tarefa de longa duração. Quando isso é feito, o TLS de ponta a ponta é configurado no gateway de aplicativo.

    $gw | Set-AzApplicationGateway
    

Obter um nome DNS do gateway de aplicativo

Depois que o gateway é criado, a próxima etapa é configurar o front-end para comunicação. O Application Gateway requer um nome DNS atribuído dinamicamente ao usar um IP público, que não é amigável. Para garantir que os usuários finais possam acessar o gateway de aplicativo, você pode usar um registro CNAME para apontar para o ponto de extremidade público do gateway de aplicativo. Para obter mais informações, consulte Configurando um nome de domínio personalizado para no Azure.

Para configurar um alias, recupere detalhes do gateway de aplicativo e seu nome IP/DNS associado usando o elemento PublicIPAddress anexado ao gateway de aplicativo. Use o nome DNS do gateway de aplicativo para criar um registro CNAME que aponte os dois aplicativos Web para esse nome DNS. Não recomendamos o uso de registros A, porque o VIP pode mudar na reinicialização do gateway de aplicativo.

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

Próximos passos

Para obter mais informações sobre como proteger a segurança de seus aplicativos Web com o Web Application Firewall por meio do Application Gateway, consulte a visão geral do firewall de aplicativos Web.