Associare un certificato SSL personalizzato esistente ad app Web di Azure

Le app Web di Azure offrono un servizio di hosting Web ad alta scalabilità e con funzioni di auto-correzione. Questa esercitazione illustra come associare alle app Web di Azure un certificato SSL personalizzato acquistato presso un'autorità di certificazione attendibile. Al termine, si sarà in grado di accedere all'app Web dall'endpoint HTTPS del dominio DNS personalizzato.

App Web con certificato SSL personalizzato

In questa esercitazione si apprenderà come:

  • Aggiornare il piano tariffario dell'app
  • Associare il certificato SSL personalizzato al servizio app
  • Imporre HTTPS per l'app
  • Automatizzare l'associazione dei certificati SSL con gli script
Nota

Se è necessario usare un certificato SSL personalizzato, è possibile ottenerlo direttamente nel portale di Azure e associarlo all'app Web. Seguire l'esercitazione sui certificati del Servizio app.

Prerequisiti

Per completare questa esercitazione:

Requisiti per il certificato SSL

Per poter essere usato nel servizio app, il certificato deve soddisfare tutti i requisiti seguenti:

  • Deve essere firmato da un'autorità di certificazione attendibile
  • Deve essere esportato come file PFX protetto da password
  • Deve contenere una chiave privata costituita da almeno 2048 bit
  • Deve contenere tutti i certificati intermedi nella catena di certificati.
Nota

Sebbene non siano descritti in questo articolo, i certificati di crittografia a curva ellittica (ECC) possono essere usati con il servizio app. Per informazioni sulla procedura per creare i certificati ECC, rivolgersi all'autorità di certificazione.

Preparare l'app Web

Per associare un certificato SSL personalizzato all'app Web, il piano di servizio app in uso deve essere di livello Basic, Standard o Premium. In questo passaggio si verifica che l'app Web sia supportata dal piano tariffario adeguato.

Accedere ad Azure

Aprire il portale di Azure.

Nel menu a sinistra fare clic su Servizi app e quindi sul nome dell'app Web.

Selezionare l'app Web

Viene visualizzata la pagina di gestione dell'app Web.

Scegliere il piano tariffario

Nel riquadro di spostamento a sinistra della pagina dell'app Web scorrere fino alla sezione Impostazioni e selezionare Scala verticalmente (piano di servizio app).

Menu di scalabilità verticale

Verificare che l'app Web non sia inclusa nel livello Gratuito o Condiviso. Il livello corrente dell'app Web è evidenziato da una casella blu scuro.

Controllare il piano tariffario

Il certificato SSL personalizzato non è supportato nel livello Gratuito o Condiviso. Se è necessario passare a un livello superiore, seguire la procedura della sezione successiva. In caso contrario, chiudere la pagina Scegliere il livello di prezzo e passare a Caricare il certificato SSL e Associare il certificato SSL.

Passare a un piano di servizio app superiore

Selezionare uno tra i livelli Basic, Standard o Premium.

Fare clic su Seleziona.

Scegliere un piano tariffario

La visualizzazione della notifica seguente indica che l'operazione di passaggio al livello superiore è stata completata.

Notifica di passaggio al livello superiore

Associare il certificato SSL

Si è ora pronti a caricare il certificato SSL nell'app Web.

Unire i certificati intermedi

Se l'autorità di certificazione offre più certificati nella catena di certificati, è necessario unire i certificati nell'ordine.

A tale scopo, aprire ogni certificato ricevuto in un editor di testo.

Creare un file per il certificato unito denominato mergedcertificate.crt. In un editor di testo copiare il contenuto di ogni certificato nel file. L'ordine dei certificati dovrebbe essere simile al modello seguente:

-----BEGIN CERTIFICATE-----
<your Base64 encoded SSL certificate>
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
<Base64 encoded intermediate certificate 1>
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
<Base64 encoded intermediate certificate 2>
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
<Base64 encoded root certificate>
-----END CERTIFICATE-----

Esportare il certificato in un file PFX

Esportare il certificato SSL unito con la chiave privata con cui è stata generata la richiesta del certificato.

Se è stato usato OpenSSL per generare la richiesta del certificato, è stato creato un file di chiave privata. Per esportare il certificato in un file PFX, eseguire il comando seguente. Sostituire i segnaposto <private-key-file> e <merged-certificate-file>.

openssl pkcs12 -export -out myserver.pfx -inkey <private-key-file> -in <merged-certificate-file>  

Quando richiesto, definire una password di esportazione. La password verrà usata in seguito durante il caricamento del certificato SSL nel servizio app.

se è stato usato IIS o Certreq.exe per generare la richiesta di certificato, installare il certificato nel computer locale e quindi esportarlo in un file PFX.

Caricare il certificato SSL

Per caricare il certificato SSL, fare clic su Certificati SSL nel riquadro di spostamento sinistro dell'app Web.

Fare clic su Carica certificato.

In File del certificato PFX selezionare il file PFX. In Password certificato digitare la password creata durante l'esportazione del file PFX.

Fare clic su Carica.

Caricamento del certificato

Dopo che il Servizio app ha terminato il caricamento del certificato, viene visualizzata la pagina Certificati SSL.

Certificato caricato

Associare il certificato SSL

Nella sezione Associazioni SSL fare clic su Aggiungi l'associazione.

Nel pannello Aggiungi associazione SSL usare gli elenchi a discesa per selezionare il nome di dominio da proteggere e il certificato da usare.

Nota

Se il certificato è stato caricato ma i nomi di dominio non appaiono nell'elenco a discesa Nome host, provare ad aggiornare la pagina del browser.

In Tipo SSL selezionare se usare l'SSL basato su indicazione nome server (SNI) o basato su IP.

  • SSL basato su SNI: è possibile aggiungere più associazioni SSL basate su SNI. Questa opzione consente di usare più certificati 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 sul supporto dei browser, vedere Indicazione nome server.
  • SSL basato su IP: è possibile aggiungere una sola associazione SSL basata su IP. Questa opzione consente di usare solo un certificato SSL per proteggere un indirizzo IP pubblico dedicato. Per proteggere più domini, è necessario proteggerli tutti usando lo stesso certificato SSL. Questa è l'opzione tradizionale per l'associazione SSL.

Fare clic su Aggiungi l'associazione.

Associare un certificato SSL

Al termine del caricamento da parte del Servizio app, il certificato viene visualizzato nella sezione Certificati SSL.

Certificato associato all'app Web

Eseguire nuovamente il mapping di un record A per IP SSL

Se non si usa l'SSL basato su IP nell'app Web, passare direttamente alla sezione Testare HTTPS per il dominio personalizzato.

Per impostazione predefinita, l'app Web usa un indirizzo IP pubblico condiviso. Quando si associa un certificato con SSL basato su IP, il servizio app crea un nuovo indirizzo IP dedicato per l'app Web.

Se è stato eseguito il mapping di un record A all'app Web, aggiornare il Registro di sistema del dominio con questo nuovo indirizzo IP dedicato.

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

Testare HTTPS

A questo punto, non resta che assicurarsi che HTTPS funzioni correttamente per il dominio personalizzato. In diversi browser passare a https://<your.custom.domain> per verificare che l'app Web sia gestita.

Passaggio all'app di Azure nel portale

Nota

Se l'app Web visualizza errori di convalida del certificato, è probabile che si stia usando un certificato autofirmato.

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

Applicare HTTPS

Il Servizio app non impone l'uso del protocollo HTTPS, pertanto gli utenti possono continuare ad accedere all'app Web usando il protocollo HTTP. Per imporre l'uso di HTTPS per l'app Web, definire una regola di riscrittura nel file web.config dell'app Web. Il Servizio app usa questo file indipendentemente dal framework del linguaggio dell'app Web.

Nota

Il reindirizzamento delle richieste è specifico per ogni linguaggio. ASP.NET MVC può usare il filtro RequireHttps anziché la regola di riscrittura in web.config.

Gli sviluppatori .NET dovrebbero avere familiarità con questo file. Il file è disponibile nella radice della soluzione.

Se invece si sviluppa con PHP, Node.js, Python o Java, è possibile che questo file sia già stato generato da Microsoft nel Servizio app.

Connettersi all'endpoint FTP dell'app Web seguendo le istruzioni fornite in Distribuire l'app nel Servizio app di Azure usando FTP/S.

Questo file sarà disponibile in /home/site/wwwroot. Se non è disponibile, creare un file web.config in questa cartella usando il codice XML seguente:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <!-- BEGIN rule ELEMENT FOR HTTPS REDIRECT -->
        <rule name="Force HTTPS" enabled="true">
          <match url="(.*)" ignoreCase="false" />
          <conditions>
            <add input="{HTTPS}" pattern="off" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
        </rule>
        <!-- END rule ELEMENT FOR HTTPS REDIRECT -->
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

Per un file web.config esistente, copiare l'intero elemento <rule> nell'elemento configuration/system.webServer/rewrite/rules del file web.config. Se sono presenti altri elementi <rule> nel file web.config, inserire l'elemento <rule> copiato prima degli altri elementi <rule>.

Questa regola restituisce un errore HTTP 301 (reindirizzamento permanente) al protocollo HTTPS ogni volta che l'utente effettua una richiesta HTTP all'app Web. Reindirizza ad esempio da http://contoso.com a https://contoso.com.

Per altre informazioni sul modulo IIS Riscrittura URL, vedere la documentazione Riscrittura URL .

Imporre l'uso di HTTPS per le app Web in Linux

Poiché il servizio app in Linux non impone l'uso di HTTPS, gli utenti possono continuare ad accedere all'app Web usando HTTP. Per imporre l'uso di HTTPS per l'app Web, definire una regola di riscrittura nel file .htaccess dell'app Web.

Connettersi all'endpoint FTP dell'app Web seguendo le istruzioni fornite in Distribuire l'app nel Servizio app di Azure usando FTP/S.

In /home/site/wwwroot creare un file .htaccess con il codice seguente:

RewriteEngine On
RewriteCond %{HTTP:X-ARR-SSL} ^$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Questa regola restituisce un errore HTTP 301 (reindirizzamento permanente) al protocollo HTTPS ogni volta che l'utente effettua una richiesta HTTP all'app Web. Reindirizza ad esempio da http://contoso.com a https://contoso.com.

Automatizzare con gli script

È possibile automatizzare le associazioni SSL per l'app Web con gli script usando l'interfaccia della riga di comando di Azure o Azure PowerShell.

Interfaccia della riga di comando di Azure

Il comando seguente carica un file PFX esportato e ottiene l'identificazione personale.

thumbprint=$(az appservice web config ssl upload \
    --name <app_name> \
    --resource-group <resource_group_name> \
    --certificate-file <path_to_PFX_file> \
    --certificate-password <PFX_password> \
    --query thumbprint \
    --output tsv)

Il comando seguente aggiunge un'associazione SSL basata su SNI, usando l'identificazione personale ottenuta con il comando precedente.

az appservice web config ssl bind \
    --name <app_name> \
    --resource-group <resource_group_name>
    --certificate-thumbprint $thumbprint \
    --ssl-type SNI \

Azure PowerShell

Il comando seguente carica un file PFX esportato e aggiunge un'associazione SSL basata su SNI.

New-AzureRmWebAppSSLBinding `
    -WebAppName <app_name> `
    -ResourceGroupName <resource_group_name> `
    -Name <dns_name> `
    -CertificateFilePath <path_to_PFX_file> `
    -CertificatePassword <PFX_password> `
    -SslState SniEnabled

Passaggi successivi

In questa esercitazione si è appreso come:

  • Aggiornare il piano tariffario dell'app
  • Associare il certificato SSL personalizzato al servizio app
  • Imporre HTTPS per l'app
  • Automatizzare l'associazione dei certificati SSL con gli script

Passare all'esercitazione successiva per imparare a usare la rete di distribuzione dei contenuti di Azure.