Proteggere un nome DNS personalizzato con un'associazione TLS/SSL nel Servizio app di AzureSecure a custom DNS name with a TLS/SSL binding in Azure App Service

Questo articolo illustra come proteggere il dominio personalizzato nel Servizio app di Azure o app per le funzioni creando un'associazione di certificati.This article shows you how to secure the custom domain in your App Service app or function app by creating a certificate binding. Al termine, sarà possibile accedere Servizio app di Azure all'endpoint https:// per nome DNS personalizzato (ad esempio 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).

App Web con certificato TLS/SSL personalizzato

La protezione di un dominio personalizzato con un certificato implica due passaggi:Securing a custom domain with a certificate involves two steps:

In questa esercitazione verranno illustrate le procedure per:In this tutorial, you learn how to:

  • Aggiornare il piano tariffario dell'appUpgrade your app's pricing tier
  • Proteggere un dominio personalizzato con un certificatoSecure a custom domain with a certificate
  • Applicare HTTPSEnforce HTTPS
  • Applicare TLS 1.1/1.2Enforce TLS 1.1/1.2
  • Automatizzare la gestione TLS con scriptAutomate TLS management with scripts

PrerequisitiPrerequisites

Per completare questa guida pratica:To follow this how-to guide:

Nota

Il modo più semplice per aggiungere un certificato privato consiste nel creare un certificato gestito di Servizio app di Azure (anteprima).The easiest way to add a private certificate is to create a free App Service Managed Certificate (Preview).

Preparare l'app WebPrepare your web app

Per creare binding di sicurezza personalizzati o abilitare i certificati client per l'app del servizio app, il livello del piano di servizio app deve essere Basic, Standard, Premium o Isolato.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. In questo passaggio si verifica che l'app Web sia supportata dal piano tariffario adeguato.In this step, you make sure that your web app is in the supported pricing tier.

Accedere ad AzureSign in to Azure

Aprire il portale di Azure.Open the Azure portal.

Cercare e selezionare Servizi app.Search for and select App Services.

Selezionare Servizi app

Nella pagina Servizi app selezionare il nome dell'app Web.On the App Services page, select the name of your web app.

Passaggio all'app di Azure nel portale

Viene visualizzata la pagina di gestione dell'app Web.You have landed on the management page of your web app.

Scegliere il piano tariffarioCheck the pricing tier

Nel riquadro di spostamento a sinistra della pagina dell'app Web scorrere fino alla sezione Impostazioni e selezionare Scala verticalmente (piano di servizio app) .In the left-hand navigation of your web app page, scroll to the Settings section and select Scale up (App Service plan).

Menu di scalabilità verticale

Verificare che l'app Web non sia inclusa nel livello F1 o D1.Check to make sure that your web app is not in the F1 or D1 tier. Il livello corrente dell'app Web è evidenziato da una casella blu scuro.Your web app's current tier is highlighted by a dark blue box.

Controllare il piano tariffario

Il certificato SSL personalizzato non è supportato nel livello F1 o D1.Custom SSL is not supported in the F1 or D1 tier. Se è necessario passare a un livello superiore, seguire la procedura della sezione successiva.If you need to scale up, follow the steps in the next section. Altrimenti, chiudere la pagina Aumenta e ignorare la sezione Passare a un piano di servizio app superiore sezione.Otherwise, close the Scale up page and skip the Scale up your App Service plan section.

Passare a un piano di servizio app superioreScale up your App Service plan

Selezionare uno dei livelli non gratuiti (B1, B2, B3 o uno qualsiasi dei livelli della categoria Produzione).Select any of the non-free tiers (B1, B2, B3, or any tier in the Production category). Per altre opzioni, fare clic su Visualizza opzioni aggiuntive.For additional options, click See additional options.

Fare clic su Apply.Click Apply.

Scegliere un piano tariffario

La visualizzazione della notifica seguente indica che l'operazione di passaggio al livello superiore è stata completata.When you see the following notification, the scale operation is complete.

Notifica di passaggio al livello superiore

Proteggere un dominio personalizzatoSecure a custom domain

Eseguire i passaggi seguenti:Do the following steps:

Nel menu a sinistra del portale di Azure scegliere Servizi app > <nome app> .In the Azure portal, from the left menu, select App Services > <app-name>.

Dalla barra di spostamento a sinistra dell'app avviare la finestra di dialogo Associazione TLS/SSL tramite:From the left navigation of your app, start the TLS/SSL Binding dialog by:

  • Selezione di Domini personalizzati > Aggiungi associazioneSelecting Custom domains > Add binding
  • Selezione di Impostazioni TLS/SSL > Aggiungi associazione TLS/SSLSelecting TLS/SSL settings > Add TLS/SSL binding

Aggiungere il binding al dominio

In Dominio personalizzato selezionare il dominio personalizzato a cui si vuole aggiungere un'associazione.In Custom Domain, select the custom domain you want to add a binding for.

Se l'app dispone già di un certificato per il dominio personalizzato selezionato, passare direttamente a Crea associazione.If your app already has a certificate for the selected custom domain, go to Create binding directly. In caso contrario, continuare.Otherwise, keep going.

Aggiungere un certificato per dominio personalizzatoAdd a certificate for custom domain

Se l'app non dispone di certificato per il dominio personalizzato selezionato, sono disponibili due opzioni:If your app has no certificate for the selected custom domain, then you have two options:

Nota

È anche possibile creare un di certificato gratuito (anteprima) o importare un certificato Key Vault, ma è necessario eseguire questa operazione separatamente e quindi tornare alla finestra di dialogo Associazione 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.

Crea associazioneCreate binding

Usare la tabella seguente per configurare l'associazione TLS nella finestra di dialogo Associazione TLS/SSL, quindi fare clic su Aggiungi associazione.Use the following table to help you configure the TLS binding in the TLS/SSL Binding dialog, then click Add Binding.

ImpostazioneSetting DescrizioneDescription
Dominio personalizzatoCustom domain Nome di dominio per cui aggiungere l'associazione TLS/SSL.The domain name to add the TLS/SSL binding for.
Identificazione personale del certificato privatoPrivate Certificate Thumbprint Certificato da associare.The certificate to bind.
Tipo TLS/SSLTLS/SSL Type
  • SNI SSL : è possibile aggiungere più associazioni SSL SNI.SNI SSL - Multiple SNI SSL bindings may be added. Questa opzione consente di usare più certificati TLS/SSL per proteggere più domini nello stesso indirizzo IP.This option allows multiple TLS/SSL certificates to secure multiple domains on the same IP address. La maggior parte dei browser moderni (tra cui Internet Explorer, Chrome, Firefox e Opera) supporta SNI (per altre informazioni vedere Indicazione nome server).Most modern browsers (including Internet Explorer, Chrome, Firefox, and Opera) support SNI (for more information, see Server Name Indication).
  • IP SSL: è possibile aggiungere una sola associazione IP SSL.IP SSL - Only one IP SSL binding may be added. Questa opzione consente di usare solo un certificato TLS/SSL per proteggere un indirizzo IP pubblico dedicato.This option allows only one TLS/SSL certificate to secure a dedicated public IP address. Dopo aver configurato l'associazione, seguire i passaggi descritti in Modificare il mapping dei record per IP SSL.After you configure the binding, follow the steps in Remap records for IP SSL.
    IP SSL è supportato solo nel livello Standard o superiore.IP SSL is supported only in Standard tier or above.

Al termine dell'operazione, lo stato TLS/SSL del dominio personalizzato passa a Protetto.Once the operation is complete, the custom domain's TLS/SSL state is changed to Secure.

Associazione TLS/SSL riuscita

Nota

Lo stato Protetto nei domini personalizzati indica che i domini sono protetti con un certificato, ma, ad esempio, il Servizio app non verifica se il certificato è autofirmato o scaduto e questo può causare la visualizzazione di un errore o di un avviso nei browser.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.

Modificare il mapping dei record per IP SSLRemap records for IP SSL

Se non si usa il protocollo IP SSL nell'app, passare alla sezione Testare HTTPS per il dominio personalizzato.If you don't use IP SSL in your app, skip to Test HTTPS for your custom domain.

È potenzialmente necessario apportare due modifiche:There are two changes you need to make, potentially:

  • Per impostazione predefinita, l'app usa un indirizzo IP pubblico condiviso.By default, your app uses a shared public IP address. Quando si associa un certificato con il protocollo IP SSL, il servizio app crea un nuovo indirizzo IP dedicato per l'app.When you bind a certificate with IP SSL, App Service creates a new, dedicated IP address for your app. Se si è eseguito il mapping di un record A all'app, aggiornare il Registro di sistema del dominio con questo nuovo indirizzo IP dedicato.If you mapped an A record to your app, update your domain registry with this new, dedicated IP address.

    La pagina Dominio personalizzato dell'app viene aggiornata con il nuovo indirizzo IP dedicato.Your app's Custom domain page is updated with the new, dedicated IP address. Copiare questo indirizzo IP, quindi eseguire nuovamente il mapping del record A a questo indirizzo IP.Copy this IP address, then remap the A record to this new IP address.

  • Se è presente un binding SNI SSL a <app-name>.azurewebsites.net, modificare tutti i mapping CNAME in modo che puntino a sni.<app-name>.azurewebsites.net (aggiungere il prefisso 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).

Testare HTTPSTest HTTPS

In diversi browser passare a https://<your.custom.domain> per verificare che l'app sia gestita.In various browsers, browse to https://<your.custom.domain> to verify that it serves up your app.

Passaggio all'app di Azure nel portale

Il codice dell'applicazione può ispezionare il protocollo tramite l'intestazione "x-appservice-proto".Your application code can inspect the protocol via the "x-appservice-proto" header. L'intestazione avrà il valore http o https.The header will have a value of http or https.

Nota

Se l'app restituisce errori di convalida del certificato, è probabile che sia in uso un certificato autofirmato.If your app gives you certificate validation errors, you're probably using a self-signed certificate.

Se non è questo il motivo, è possibile che siano stati esclusi i certificati intermedi durante l'esportazione del certificato nel file PFX.If that's not the case, you may have left out intermediate certificates when you export your certificate to the PFX file.

Impedire modifiche IPPrevent IP changes

L'indirizzo IP in ingresso può essere modificato quando si elimina un'associazione, anche se tale associazione è IP SSL.Your inbound IP address can change when you delete a binding, even if that binding is IP SSL. Questo aspetto è particolarmente importante quando si rinnova un certificato che si trova già in un'associazione IP SSL.This is especially important when you renew a certificate that's already in an IP SSL binding. Per evitare una modifica dell'indirizzo IP dell'app, seguire questi passaggi nell'ordine indicato:To avoid a change in your app's IP address, follow these steps in order:

  1. Caricare il nuovo certificato.Upload the new certificate.
  2. Associare il nuovo certificato al dominio personalizzato desiderato senza eliminare quello precedente.Bind the new certificate to the custom domain you want without deleting the old one. Questa operazione sostituisce l'associazione anziché rimuovere quella precedente.This action replaces the binding instead of removing the old one.
  3. Eliminare il certificato precedente.Delete the old certificate.

Applicare HTTPSEnforce HTTPS

Per impostazione predefinita, gli utenti possono continuare ad accedere all'app usando il protocollo HTTP.By default, anyone can still access your app using HTTP. È possibile reindirizzare tutte le richieste HTTP alla porta HTTPS.You can redirect all HTTP requests to the HTTPS port.

Nel riquadro di spostamento a sinistra della pagina dell'app selezionare Impostazioni SSL.In your app page, in the left navigation, select SSL settings. Quindi in Solo HTTPS, selezionare Attiva.Then, in HTTPS Only, select On.

Applicare HTTPS

Al termine dell'operazione, scegliere uno degli URL HTTP che fanno riferimento all'applicazione.When the operation is complete, navigate to any of the HTTP URLs that point to your app. Ad esempio:For example:

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

Applicare versioni di TLSEnforce TLS versions

L'app consente TLS 1.2 per impostazione predefinita, che è il livello TLS consigliato dagli standard di settore, ad esempio PCI DSS.Your app allows TLS 1.2 by default, which is the recommended TLS level by industry standards, such as PCI DSS. Per applicare versioni di TLS diverse, seguire questa procedura:To enforce different TLS versions, follow these steps:

Nel riquadro di spostamento a sinistra della pagina dell'app selezionare Impostazioni SSL.In your app page, in the left navigation, select SSL settings. In TLS version (Versione TLS) selezionare la versione minima di TLS da usare.Then, in TLS version, select the minimum TLS version you want. Questa impostazione controlla solo le chiamate in ingresso.This setting controls the inbound calls only.

Applicare TLS 1.1 o 1.2

Al termine dell'operazione, l'app rifiuta tutte le connessioni con versioni di TLS meno recenti.When the operation is complete, your app rejects all connections with lower TLS versions.

Gestire la terminazione TLSHandle TLS termination

Nel servizio app la terminazione TLS si verifica nei servizi di bilanciamento del carico di rete, quindi tutte le richieste HTTPS raggiungono l'app come richieste HTTP non crittografate.In App Service, TLS termination happens at the network load balancers, so all HTTPS requests reach your app as unencrypted HTTP requests. Se la logica dell'app deve controllare se le richieste degli utenti sono crittografate o meno, esaminare l'intestazione X-Forwarded-Proto.If your app logic needs to check if the user requests are encrypted or not, inspect the X-Forwarded-Proto header.

Le guide di configurazione specifiche del linguaggio, ad esempio la guida alla configurazione di Node.js per Linux, illustrano come rilevare una sessione HTTPS nel codice dell'applicazione.Language specific configuration guides, such as the Linux Node.js configuration guide, shows you how to detect an HTTPS session in your application code.

Automatizzazione con gli scriptAutomate with scripts

Interfaccia della riga di comando di 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

Altre risorseMore resources