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

Questo articolo illustra come proteggere il dominio personalizzato nel 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

1. Aggiungere l'associazione

Nel portale di Azure:

  1. Dal menu a sinistra selezionare App Services><app-name>.

  2. Nella navigazione a sinistra 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 servizio app certificato gestito: consentire servizio app creare un certificato gestito per il dominio selezionato. Questa opzione è la più semplice. Per altre informazioni, vedere Creare un certificato gestito gratuito.
    • Importa servizio app certificato: in servizio app certificato scegliere un certificato servizio app acquistato per il dominio selezionato.
    • Caricare il certificato (pfx): seguire il flusso di lavoro in Caricare un certificato privato per caricare un certificato PFX dal computer locale e specificare la password del certificato.
    • Importa da Key Vault: selezionare Selezionare il certificato dell'insieme di credenziali delle chiavi e selezionare il certificato nella finestra di dialogo.
  5. Nel tipo TLS/SSL scegliere tra SSL SNI e SSL basato su IP.

    • SNI SSL: è possibile aggiungere più associazioni SSL SNI. 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 Internet Explorer, Chrome, Firefox e Opera) supporta SNI (per altre informazioni vedere Indicazione nome server).
      • SSL basato su IP: è possibile aggiungere un'unica associazione SSL IP. Questa opzione consente di usare solo un certificato TLS/SSL per proteggere un indirizzo IP pubblico dedicato. Dopo aver configurato l'associazione, seguire la procedura descritta in 2. Eseguire il mapping dei record per SSL basato su IP.
        IP SSL è supportato solo nel livello Basic 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

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.

2. Rimap 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 per il dominio personalizzato.

È 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 il mapping del record A a questo nuovo indirizzo IP.

  • 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).

3. Testare HTTPS

In diversi browser passare a https://<your.custom.domain> per verificare che l'app sia gestita.

Screenshot che illustra un esempio di esplorazione del dominio personalizzato con l'URL contoso.com evidenziato.

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

Nota

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

Se non è questo il motivo, è possibile che siano stati esclusi i certificati intermedi durante l'esportazione del certificato nel file PFX.

Domande frequenti

Ricerca per categorie 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, servizio app forza un reindirizzamento dalle richieste HTTP a HTTPS. Per disabilitare questo comportamento, vedere Configurare le impostazioni generali.

Come è possibile modificare le versioni tls minime 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.

Ricerca per categorie gestire la terminazione TLS in 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 o meno, 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 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

Altre risorse