Proteger um nome DNS personalizado com uma associação TLS/SSL no Serviço de Aplicativo do Azure

Este artigo mostra como proteger o domínio personalizado em seu aplicativo do Serviço de Aplicativo ou no aplicativo de funções criando uma associação de certificado. Quando tiver terminado, você poderá acessar seu aplicativo do Serviço de Aplicativo no ponto de extremidade https:// para seu nome DNS personalizado (por exemplo, https://www.contoso.com).

Web app with custom TLS/SSL certificate

Pré-requisitos

1. Adicionar a associação

No portal do Azure:

  1. No menu à esquerda, selecione Serviços de Aplicativos><app-name>.

  2. Na navegação à esquerda do seu aplicativo, selecione Domínios personalizados

  3. Ao lado do domínio personalizado, selecione Adicionar Associação

    A screenshot showing how to launch the Add TLS/SSL Binding dialog.

  4. Se o aplicativo já tiver um certificado para o domínio personalizado selecionado, você poderá selecioná-lo em Certificado. Caso contrário, você deve adicionar um certificado usando uma das seleções em Origem.

    • Criar um Certificado Gerenciado de Serviço de Aplicativo: permita que o Serviço de Aplicativo crie um certificado gerenciado para o domínio selecionado. Esta opção é a mais simples. Para obter mais informações, confira Criar um certificado gerenciado gratuito .
    • Importar Certificado do Serviço de Aplicativo: em Certificado do Serviço de Aplicativo, escolha um certificado do serviço de aplicativo que você comprou para o domínio selecionado.
    • Carregar o certificado (.pfx): siga o fluxo de trabalho em Carregar um certificado privado para carregar um certificado PFX do seu computador local e especificar a senha do certificado.
    • Importar do Cofre de Chaves: selecione Selecionar certificado do cofre de chaves e selecione o certificado na caixa de diálogo.
  5. Em Tipo de TLS/SSL, escolha entre SSL baseado em SNI e SSL baseado em IP.

    • SSL baseado em SNI: várias associações de SSL SNI podem ser adicionadas. Esta opção permite que vários certificados TLS/SSL protejam vários domínios no mesmo endereço IP. A maioria dos navegadores modernos (incluindo Internet Explorer, Chrome, Firefox e Opera) é compatível com SNI (para saber mais, confira Indicação de Nome de Servidor).
      • SSL baseado em IP: apenas uma associação do IP SSL pode ser adicionada. Esta opção permite apenas um certificado TLS/SSL para proteger um endereço IP público dedicado. Depois de configurar a associação, siga as etapas em 2. Remapear registros para o SSL baseado em IP.
        O IP SSL é suportado somente na camada Básica ou superior.
  6. Ao adicionar um novo certificado, valide o novo certificado selecionando Validar.

  7. Selecione Adicionar.

    Quando a operação for concluída, o estado TLS/SSL do domínio personalizado será alterado para Seguro.

    A screenshot showing the custom domain secured by a certificate binding.

Observação

Um estado Seguro nos Domínios personalizados significa que ele é protegido com um certificado, mas o Serviço de Aplicativo não verifica se o certificado é autoassinado ou expirou, por exemplo, o que também pode fazer com que os navegadores mostrem um erro ou um aviso.

2. Remapear os registros para o SSL baseado em IP

Esta etapa é necessária apenas para o SSL baseado em IP. Para uma associação SSL baseado em SNI, pule para Testar HTTPS para seu domínio personalizado .

Há duas alterações que você potencialmente precisa fazer:

  • Por padrão, o aplicativo usa um endereço IP público compartilhado. Quando você associa um certificado com IP SSL, o Serviço de Aplicativo cria um novo endereço IP dedicado para o aplicativo. Se você mapeou um registro A para o aplicativo, atualize o registro do domínio com esse novo endereço IP dedicado.

    A página Domínio personalizado de seu aplicativo é atualizada com o novo endereço IP dedicado. Copie esse endereço IP e remapeie o registro A para esse novo endereço IP.

  • Se você tiver uma associação SSL SNI para <app-name>.azurewebsites.net, remapeie qualquer mapeamento CNAME para apontar para sni.<app-name>.azurewebsites.net em vez disso (adicione o prefixo sni).

3. Testar HTTPS

Em vários navegadores, navegue até https://<your.custom.domain> para verificar se ele leva até seu aplicativo.

Screenshot showing an example of browsing to your custom domain with the contoso.com URL highlighted.

O código do aplicativo pode inspecionar o protocolo por meio do cabeçalho "x-appservice-proto". O cabeçalho apresenta o valor http ou https.

Observação

Caso seu aplicativo retorne erros de validação de certificado, você provavelmente está usando um certificado autoassinado.

Se não for o caso, talvez você tenha deixado de fora certificados intermediários quando exportou o certificado para o arquivo PFX.

Perguntas frequentes

Como fazer para garantir que o endereço IP do aplicativo não seja alterado quando eu fizer alterações na associação do certificado?

Seu endereço IP de entrada pode ser alterado ao excluir uma associação, mesmo se essa associação for IP SSL. Isso é especialmente importante quando você renova um certificado que já está em uma associação IP SSL. Para evitar uma alteração no endereço IP do seu aplicativo, siga estas etapas pela ordem:

  1. Carregar o novo certificado.
  2. Associe o novo certificado para o domínio personalizado que você deseja sem excluir o antigo. Essa ação substitui a associação em vez de remover a antiga.
  3. Exclua o certificado antigo.

Posso desabilitar o redirecionamento forçado de HTTP para HTTPS?

Por padrão, o Serviço de Aplicativo força um redirecionamento de solicitações HTTP para HTTPS. Para desabilitar esse comportamento, confira Definir configurações gerais .

Como posso alterar as versões mínimas do TLS para o aplicativo?

Seu aplicativo permite o TLS 1.2 por padrão, que é o nível TLS recomendado segundo os padrões do setor, como PCI DSS. Para impor diferentes versões do TLS, confira Definir configurações gerais .

Como fazer para lidar com a terminação TLS no Serviço de Aplicativo?

No Serviço de Aplicativo, a Terminação TLS ocorre nos balanceadores de carga de rede de modo que todas as solicitações HTTPS cheguem ao seu aplicativo como solicitações HTTP não criptografadas. Se a lógica de aplicativo precisar verificar se as solicitações do usuário estão criptografadas ou não, inspecione o cabeçalho X-Forwarded-Proto.

Os guias de configuração específicos da linguagem, como o guia de configuração do Linux Node.js, mostram como detectar uma sessão HTTPS no código do aplicativo.

Automatizar com scripts

CLI do Azure

Associar um certificado TLS/SSL personalizado a um aplicativo Web

PowerShell

$fqdn="<Replace with your custom domain name>"
$pfxPath="<Replace with path to your .PFX file>"
$pfxPassword="<Replace with your .PFX password>"
$webappname="mywebapp$(Get-Random)"
$location="West Europe"

# Create a resource group.
New-AzResourceGroup -Name $webappname -Location $location

# Create an App Service plan in Free tier.
New-AzAppServicePlan -Name $webappname -Location $location `
-ResourceGroupName $webappname -Tier Free

# Create a web app.
$webapp = New-AzWebApp -Name $webappname -Location $location -AppServicePlan $webappname `
-ResourceGroupName $webappname

Write-Host "Sign in to your domain provider's website and configure the following records:"
Write-Host "A CNAME record that maps $fqdn to $webappname.azurewebsites.net"
Write-Host "A TXT record that maps asuid.$fqdn to the domain verification ID $($webapp.CustomDomainVerificationId)"
Read-Host "Press [Enter] key when ready ..."

# Before continuing, go to your DNS configuration UI for your custom domain and follow the 
# instructions at https://aka.ms/appservicecustomdns to configure a CNAME record for the 
# hostname "www" and point it your web app's default domain name.

# Upgrade App Service plan to Basic tier (minimum required by custom SSL certificates)
Set-AzAppServicePlan -Name $webappname -ResourceGroupName $webappname `
-Tier Basic

# Add a custom domain name to the web app. 
Set-AzWebApp -Name $webappname -ResourceGroupName $webappname `
-HostNames @($fqdn,"$webappname.azurewebsites.net")

# Upload and bind the SSL certificate to the web app.
New-AzWebAppSSLBinding -WebAppName $webappname -ResourceGroupName $webappname -Name $fqdn `
-CertificateFilePath $pfxPath -CertificatePassword $pfxPassword -SslState SniEnabled

Mais recursos