Proteggere un nome DNS personalizzato con un'associazione TLS/SSL nel Servizio app di Azure

Questo articolo illustra come proteggere il dominio personalizzato nell’app del Servizio app di Azure o app per le funzioni creando un'associazione di certificati. Al termine, sarà possibile accedere Servizio app di Azure all'endpoint https:// per nome DNS personalizzato (ad esempio https://www.contoso.com).

App Web con certificato TLS/SSL personalizzato.

Prerequisiti

Aggiungere l'associazione

Nel portale di Azure:

  1. Nel menu a sinistra, selezionare Servizi app><Nome app>.

  2. Nel riquadro di spostamento sinistro dell'app, selezionare Domini personalizzati.

  3. Accanto al dominio personalizzato selezionare Aggiungi associazione.

    Screenshot che mostra come avviare la finestra di dialogo Aggiungi associazione TLS/SSL.

  4. Se l'app ha già un certificato per il dominio personalizzato selezionato, è possibile selezionarlo in Certificato. In caso contrario, è necessario aggiungere un certificato usando una delle selezioni in Origine.

    • Creare un certificato gestito del servizio app: consentire al servizio app di creare un certificato gestito per il dominio selezionato. Questa opzione è la più semplice. Per altre informazioni, vedere Creare un certificato gestito gratuito.
    • Importa certificato del servizio app: nel certificato del servizio app, selezionare un certificato del servizio app acquistato per il dominio selezionato.
    • Caricare il certificato (pfx): seguire il flusso di lavoro in Carica un certificato privato per caricare un certificato PFX dal computer locale e specificare la password del certificato.
    • Importa da Key Vault: selezionare Seleziona certificato dell'insieme di credenziali delle chiavi e selezionare il certificato nella finestra di dialogo.
  5. In tipo TLS/SSLselezionare SNI SSL o SSL basato su IP.

    • SNI SSL: è possibile aggiungere più associazioni SNI SSL. Questa opzione consente di usare più certificati TLS/SSL per proteggere più domini nello stesso indirizzo IP. La maggior parte dei browser moderni (tra cui Microsoft Edge, Chrome, Firefox e Opera) supporta SNI. (Per altre informazioni, vedere Indicazione nome server.)
    • SSL basato su IP: è possibile aggiungere una sola associazione IP SSL. Questa opzione consente di usare solo un certificato TLS/SSL per proteggere un indirizzo IP pubblico dedicato. Dopo aver configurato l’associazione, seguire i passaggi descritti in Modificare il mapping dei record per SSL basato su IP.
      SSL basato su IP è supportato solo nel livello Standard o superiore.
  6. Quando si aggiunge un nuovo certificato, convalidare il nuovo certificato selezionando Convalida.

  7. Selezionare Aggiungi.

    Al termine dell'operazione, lo stato TLS/SSL del dominio personalizzato passa a Protetto.

    Screenshot che mostra il dominio personalizzato protetto da un'associazione di certificati.

Nota

Uno stato protetto in domini personalizzati indica che un certificato fornisce protezione, ma il servizio app non verifica se il certificato è autofirmato o scaduto, ad esempio, il che può anche causare la visualizzazione di un errore o un avviso da parte dei browser.

Modificare il mapping dei record per SSL basato su IP

Questo passaggio è necessario solo per SSL basato su IP. Per un'associazione SSL SNI, passare a Test HTTPS.

È potenzialmente necessario apportare due modifiche:

  • Per impostazione predefinita, l'app usa un indirizzo IP pubblico condiviso. Quando si associa un certificato con il protocollo IP SSL, il servizio app crea un nuovo indirizzo IP dedicato per l'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.

    La pagina Dominio personalizzato dell'app viene aggiornata con il nuovo indirizzo IP dedicato. Copiare questo indirizzo IP, quindi eseguire nuovamente il mapping del record A a questo indirizzo IP.

  • Se si dispone di un'associazione SNI SSL per <app-name>.azurewebsites.net, eseguire nuovamente tutti i mapping di CNAME in modo che puntino a sni.<app-name>.azurewebsites.net. (Aggiungere il prefisso sni.)

Testare HTTPS

Passare a https://<your.custom.domain> in vari browser per verificare che venga visualizzata l'app.

Screenshot che mostra un esempio di esplorazione del dominio personalizzato. L'URL contoso.com è evidenziato.

Il codice dell'applicazione può esaminare il protocollo tramite l'intestazione x-appservice-proto. L'intestazione ha un valore pari a http o https.

Nota

Se l'app restituisce errori di convalida del certificato, è probabile che sia in uso un certificato autofirmato.

In caso contrario, è possibile che siano stati esclusi i certificati intermedi durante l'esportazione del certificato in formato PFX.

Domande frequenti

Come assicurarsi che l'indirizzo IP dell'app non venga modificato quando si apportano modifiche all'associazione di certificati?

L'indirizzo IP in ingresso può essere modificato quando si elimina un'associazione, anche se tale associazione è IP SSL. Questo aspetto è particolarmente importante quando si rinnova un certificato che si trova già in un'associazione IP SSL. Per evitare una modifica dell'indirizzo IP dell'app, seguire questi passaggi nell'ordine indicato:

  1. Caricare il nuovo certificato.
  2. Associare il nuovo certificato al dominio personalizzato desiderato senza eliminare quello precedente. Questa operazione sostituisce l'associazione anziché rimuovere quella precedente.
  3. Eliminare il certificato precedente.

È possibile disabilitare il reindirizzamento forzato da HTTP a HTTPS?

Per impostazione predefinita, il servizio app forza un reindirizzamento dalle richieste HTTP a HTTPS. Per disabilitare questo comportamento, vedere Configurare le impostazioni generali.

Come modificare le versioni minime di TLS per l'app?

L'app consente TLS 1.2 per impostazione predefinita, che è il livello TLS consigliato dagli standard di settore, ad esempio PCI DSS. Per applicare versioni TLS diverse, vedere Configurare le impostazioni generali.

Come si gestisce la terminazione TLS nel servizio app?

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. Se la logica dell'app deve controllare se le richieste degli utenti sono crittografate, esaminare l'intestazione X-Forwarded-Proto.

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.

Automatizzazione con gli script

Interfaccia della riga di comando di Azure

Associare un certificato TLS/SSL personalizzato a un'app

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