Proteger um nome DNS personalizado com uma associação TLS/SSL no Serviço de Aplicativo do AzureSecure a custom DNS name with a TLS/SSL binding in Azure App Service

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.This article shows you how to secure the custom domain in your App Service app or function app by creating a certificate binding. 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).When you're finished, you can access your App Service app at the https:// endpoint for your custom DNS name (for example, https://www.contoso.com).

Aplicativo Web com certificado TLS/SSL personalizado

A proteção de um domínio personalizado com um certificado inclui duas etapas:Securing a custom domain with a certificate involves two steps:

Neste tutorial, você aprenderá como:In this tutorial, you learn how to:

  • Atualizar o tipo de preço do aplicativoUpgrade your app's pricing tier
  • Proteger um domínio personalizado com um certificadoSecure a custom domain with a certificate
  • Impor HTTPSEnforce HTTPS
  • Impor o TLS 1.1/1.2Enforce TLS 1.1/1.2
  • Automatizar o gerenciamento de TLS com scriptsAutomate TLS management with scripts

Pré-requisitosPrerequisites

Para seguir este guia de instruções, é necessário ter:To follow this how-to guide:

Observação

A maneira mais fácil de adicionar um certificado particular é criar um Certificado Gerenciado do Serviço de Aplicativo gratuito (versão prévia).The easiest way to add a private certificate is to create a free App Service Managed Certificate (Preview).

Preparar o aplicativo WebPrepare your web app

Para criar associações de segurança personalizadas ou habilitar certificados do cliente para o aplicativo do Serviço de Aplicativo, o Plano do Serviço de Aplicativo precisa estar no nível Básico, Standard, Premium ou Isolado.To create custom security bindings or enable client certificates for your App Service app, your App Service plan must be in the Basic, Standard, Premium, or Isolated tier. Nesta etapa, você precisa ter certeza de que seu aplicativo Web está no tipo de preço com suporte.In this step, you make sure that your web app is in the supported pricing tier.

Entrar no AzureSign in to Azure

Abra o Portal do Azure.Open the Azure portal.

Pesquise e selecione Serviços de Aplicativos.Search for and select App Services.

Selecionar Serviços de Aplicativos

Na página Serviços de Aplicativos, selecione o nome do seu aplicativo Web.On the App Services page, select the name of your web app.

Navegação no Portal para o aplicativo do Azure

Você aterrissou na página de gerenciamento do aplicativo Web.You have landed on the management page of your web app.

Verifique o tipo de preçoCheck the pricing tier

No painel de navegação à esquerda da página do aplicativo Web, role até a seção Configurações e selecione Escalar verticalmente (plano do Serviço de Aplicativo) .In the left-hand navigation of your web app page, scroll to the Settings section and select Scale up (App Service plan).

Menu Escalar verticalmente

Certifique-se de que o aplicativo Web não esteja na camada F1 ou D1.Check to make sure that your web app is not in the F1 or D1 tier. A camada atual do seu aplicativo Web é realçada por uma caixa azul escuro.Your web app's current tier is highlighted by a dark blue box.

Verificar tipo de preço

Não há suporte para SSL personalizado na camada F1 ou D1.Custom SSL is not supported in the F1 or D1 tier. Se precisar escalar verticalmente, siga as etapas da próxima seção.If you need to scale up, follow the steps in the next section. Caso contrário, feche a página Aumentar e ignore a seção Aumentar seu plano do Serviço de Aplicativo.Otherwise, close the Scale up page and skip the Scale up your App Service plan section.

Escalar verticalmente seu Plano do Serviço de AplicativoScale up your App Service plan

Selecione qualquer uma das camadas não gratuitas (B1, B2, B3 ou qualquer camada na categoria Produção).Select any of the non-free tiers (B1, B2, B3, or any tier in the Production category). Para obter opções adicionais, clique em Ver opções adicionais.For additional options, click See additional options.

Clique em Aplicar.Click Apply.

Escolha um tipo de preço

Quando você receber a notificação a seguir, a operação de escala terá sido concluída.When you see the following notification, the scale operation is complete.

Escalar verticalmente a notificação

Proteger um domínio personalizadoSecure a custom domain

Execute as seguintes etapas:Do the following steps:

No portal do Azure, no menu à esquerda, selecione Serviços de Aplicativos > <app-name> .In the Azure portal, from the left menu, select App Services > <app-name>.

No painel de navegação à esquerda do seu aplicativo, inicie a caixa de diálogo Associação TLS/SSL da seguinte maneira:From the left navigation of your app, start the TLS/SSL Binding dialog by:

  • Selecione Domínios personalizados > Adicionar associaçãoSelecting Custom domains > Add binding
  • Selecione Configurações de TLS/SSL > Adicionar associação TLS/SSLSelecting TLS/SSL settings > Add TLS/SSL binding

Adicionar uma associação ao domínio

Em domínio personalizado, selecione o domínio personalizado para o qual você deseja adicionar uma associação.In Custom Domain, select the custom domain you want to add a binding for.

Se seu aplicativo já tiver um certificado para o domínio personalizado selecionado, vá diretamente para Criar associação.If your app already has a certificate for the selected custom domain, go to Create binding directly. Caso contrário, continue.Otherwise, keep going.

Adicionar um certificado para o domínio personalizadoAdd a certificate for custom domain

Se seu aplicativo não tiver nenhum certificado para o domínio personalizado selecionado, você terá duas opções:If your app has no certificate for the selected custom domain, then you have two options:

Observação

Você também pode Criar um certificado gratuito (versão prévia) ou Importar um certificado Key Vault, mas é preciso fazer isso separadamente e retornar à caixa de diálogo Associação TLS/SSL.You can also Create a free certificate (Preview) or Import a Key Vault certificate, but you must do it separately and then return to the TLS/SSL Binding dialog.

Criar associaçãoCreate binding

Use a tabela a seguir para configurar a associação TLS na caixa de diálogo Associação TLS/SSL e, em seguida, clique em Adicionar Associação.Use the following table to help you configure the TLS binding in the TLS/SSL Binding dialog, then click Add Binding.

ConfiguraçãoSetting DescriçãoDescription
Domínio personalizadoCustom domain O nome de domínio ao qual adicionar a associação TLS/SSL.The domain name to add the TLS/SSL binding for.
Impressão Digital do Certificado PrivadoPrivate Certificate Thumbprint O certificado a ser associado.The certificate to bind.
Tipo de TLS/SSLTLS/SSL Type
  • SSL SNI – É possível adicionar várias associações SSL SNI.SNI SSL - Multiple SNI SSL bindings may be added. Esta opção permite que vários certificados TLS/SSL protejam vários domínios no mesmo endereço IP.This option allows multiple TLS/SSL certificates to secure multiple domains on the same IP address. 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).Most modern browsers (including Internet Explorer, Chrome, Firefox, and Opera) support SNI (for more information, see Server Name Indication).
  • IP SSL – Apenas uma associação IP SSL pode ser adicionada.IP SSL - Only one IP SSL binding may be added. Esta opção permite apenas um certificado TLS/SSL para proteger um endereço IP público dedicado.This option allows only one TLS/SSL certificate to secure a dedicated public IP address. Depois de configurar a associação, siga as etapas em Remapear registros para IP SSL.After you configure the binding, follow the steps in Remap records for IP SSL.
    IP SSL é compatível apenas com o nível Standard ou superior.IP SSL is supported only in Standard tier or above.

Quando a operação for concluída, o estado TLS/SSL do domínio personalizado será alterado para Seguro.Once the operation is complete, the custom domain's TLS/SSL state is changed to Secure.

Associação TLS/SSL bem-sucedida

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.A Secure state in the Custom domains means that it is secured with a certificate, but App Service doesn't check if the certificate is self-signed or expired, for example, which can also cause browsers to show an error or warning.

Remapear registros para IP SSLRemap records for IP SSL

Caso não use IP SSL no seu aplicativo, pule para Testar o HTTPS para o domínio personalizado.If you don't use IP SSL in your app, skip to Test HTTPS for your custom domain.

Há duas alterações que você potencialmente precisa fazer:There are two changes you need to make, potentially:

  • Por padrão, o aplicativo usa um endereço IP público compartilhado.By default, your app uses a shared public IP address. Quando você associa um certificado com IP SSL, o Serviço de Aplicativo cria um novo endereço IP dedicado para o aplicativo.When you bind a certificate with IP SSL, App Service creates a new, dedicated IP address for your app. Se você mapeou um registro A para o aplicativo, atualize o registro do domínio com esse novo endereço IP dedicado.If you mapped an A record to your app, update your domain registry with this new, dedicated IP address.

    A página Domínio personalizado de seu aplicativo é atualizada com o novo endereço IP dedicado.Your app's Custom domain page is updated with the new, dedicated IP address. Copie esse endereço IP e, em seguida, remapeie o registro para esse novo endereço IP.Copy this IP address, then remap the A record to this new IP address.

  • 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).If you have an SNI SSL binding to <app-name>.azurewebsites.net, remap any CNAME mapping to point to sni.<app-name>.azurewebsites.net instead (add the sni prefix).

Testar HTTPSTest HTTPS

Em vários navegadores, navegue até https://<your.custom.domain> para verificar se ele leva até seu aplicativo.In various browsers, browse to https://<your.custom.domain> to verify that it serves up your app.

Captura de tela mostrando um exemplo de como fazer a navegação até o domínio personalizado com a URL contoso.com realçada.

O código do aplicativo pode inspecionar o protocolo por meio do cabeçalho "x-appservice-proto".Your application code can inspect the protocol via the "x-appservice-proto" header. O cabeçalho terá um valor de http ou https.The header will have a value of http or https.

Observação

Caso seu aplicativo retorne erros de validação de certificado, você provavelmente está usando um certificado autoassinado.If your app gives you certificate validation errors, you're probably using a self-signed certificate.

Se não for o caso, talvez você tenha deixado de fora certificados intermediários quando exportou o certificado para o arquivo PFX.If that's not the case, you may have left out intermediate certificates when you export your certificate to the PFX file.

Impedir alterações de IPPrevent IP changes

Seu endereço IP de entrada pode ser alterado ao excluir uma associação, mesmo se essa associação for IP SSL.Your inbound IP address can change when you delete a binding, even if that binding is IP SSL. Isso é especialmente importante quando você renova um certificado que já está em uma associação IP SSL.This is especially important when you renew a certificate that's already in an IP SSL binding. Para evitar uma alteração no endereço IP do seu aplicativo, siga estas etapas pela ordem:To avoid a change in your app's IP address, follow these steps in order:

  1. Carregar o novo certificado.Upload the new certificate.
  2. Associe o novo certificado para o domínio personalizado que você deseja sem excluir o antigo.Bind the new certificate to the custom domain you want without deleting the old one. Essa ação substitui a associação em vez de remover a antiga.This action replaces the binding instead of removing the old one.
  3. Exclua o certificado antigo.Delete the old certificate.

Impor HTTPSEnforce HTTPS

Por padrão, qualquer pessoa ainda pode acessar seu aplicativo usando HTTP.By default, anyone can still access your app using HTTP. Você pode redirecionar todas as solicitações HTTP para a porta HTTPS.You can redirect all HTTP requests to the HTTPS port.

Na página do seu aplicativo, na navegação esquerda, selecione Configurações SSL.In your app page, in the left navigation, select SSL settings. Depois, em HTTPS somente, selecione Ligado.Then, in HTTPS Only, select On.

Impor HTTPS

Quando a operação estiver concluída, navegue até qualquer uma das URLs HTTP que aponte para seu aplicativo.When the operation is complete, navigate to any of the HTTP URLs that point to your app. Por exemplo: For example:

  • http://<app_name>.azurewebsites.net
  • http://contoso.com
  • http://www.contoso.com

Impor as versões do TLSEnforce TLS versions

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.Your app allows TLS 1.2 by default, which is the recommended TLS level by industry standards, such as PCI DSS. Para impor versões diferentes do TLS, execute estas etapas:To enforce different TLS versions, follow these steps:

Na página do seu aplicativo, na navegação esquerda, selecione Configurações SSL.In your app page, in the left navigation, select SSL settings. Depois, em Versão do TLS, selecione a versão mínima desejada do TLS.Then, in TLS version, select the minimum TLS version you want. Essa configuração controla somente as chamadas de entrada.This setting controls the inbound calls only.

Impor o TLS 1.1 ou 1.2

Após a conclusão da operação, seu aplicativo rejeitará todas as conexões com versões inferiores do TLS.When the operation is complete, your app rejects all connections with lower TLS versions.

Processar a terminação TLSHandle TLS termination

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.In App Service, TLS termination happens at the network load balancers, so all HTTPS requests reach your app as unencrypted HTTP requests. 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.If your app logic needs to check if the user requests are encrypted or not, inspect the X-Forwarded-Proto header.

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.Language specific configuration guides, such as the Linux Node.js configuration guide, shows you how to detect an HTTPS session in your application code.

Automatizar com scriptsAutomate with scripts

CLI do AzureAzure CLI

#!/bin/bash

fqdn=<replace-with-www.{yourdomain}>
pfxPath=<replace-with-path-to-your-.PFX-file>
pfxPassword=<replace-with-your=.PFX-password>
resourceGroup=myResourceGroup
webappname=mywebapp$RANDOM

# Create a resource group.
az group create --location westeurope --name $resourceGroup

# Create an App Service plan in Basic tier (minimum required by custom domains).
az appservice plan create --name $webappname --resource-group $resourceGroup --sku B1

# Create a web app.
az webapp create --name $webappname --resource-group $resourceGroup \
--plan $webappname

echo "Configure a CNAME record that maps $fqdn to $webappname.azurewebsites.net"
read -p "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.

# Map your prepared custom domain name to the web app.
az webapp config hostname add --webapp-name $webappname --resource-group $resourceGroup \
--hostname $fqdn

# Upload the SSL certificate and get the thumbprint.
thumbprint=$(az webapp config ssl upload --certificate-file $pfxPath \
--certificate-password $pfxPassword --name $webappname --resource-group $resourceGroup \
--query thumbprint --output tsv)

# Binds the uploaded SSL certificate to the web app.
az webapp config ssl bind --certificate-thumbprint $thumbprint --ssl-type SNI \
--name $webappname --resource-group $resourceGroup

echo "You can now browse to https://$fqdn"

PowerShellPowerShell

$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.
New-AzWebApp -Name $webappname -Location $location -AppServicePlan $webappname `
-ResourceGroupName $webappname

Write-Host "Configure a CNAME record that maps $fqdn to $webappname.azurewebsites.net"
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 recursosMore resources