Generare un certificato autofirmato di gateway applicazione Azure con una CA radice personalizzata

Lo SKU v2 del gateway applicazione introduce l'uso di certificato radice trusted per consentire le connessioni TLS con i server back-end. Questo provisioning rimuove l'uso dei certificati di autenticazione (singoli certificati foglia) necessari nello SKU v1. Il certificato radice è un certificato radice con codifica base 64 X.509(.CER) del server di certificati back-end. Identifica l'autorità di certificazione radice (CA) che ha emesso il certificato del server che viene usato per la comunicazione TLS/SSL.

Il gateway applicazione considera attendibile il certificato del sito Web per impostazione predefinita se è firmato da un'autorità di certificazione nota (ad esempio GoDaddy o DigiCert). In tal caso, non è necessario caricare in modo esplicito il certificato radice. Per altre informazioni, vedere Panoramica della terminazione TLS e di TLS end-to-end con il gateway applicazione. Tuttavia, se si dispone di un ambiente di sviluppo/test e non si vuole acquistare un certificato firmato dalla CA verificata, è possibile creare una CA radice personalizzata e un certificato foglia firmato da quella CA radice.

Nota

I certificati autogenerati non sono attendibili per impostazione predefinita e possono essere difficili da gestire. Possono anche usare pacchetti hash e di crittografia obsoleti che potrebbero non essere sicuri. Per una maggiore sicurezza, acquistare un certificato firmato da un'autorità di certificazione nota.

È possibile usare le opzioni seguenti per generare il certificato privato per le connessioni TLS back-end.

  1. Usare lo strumento generatore di certificati privato con un clic. Usando il nome di dominio (nome comune) specificato, questo strumento esegue gli stessi passaggi descritti in questo articolo per generare certificati radice e di server. Con i file di certificato generati, è possibile caricare immediatamente il certificato radice (. File CER) nell'impostazione back-end del gateway e nella catena di certificati corrispondente (. PFX) nel server back-end. La password per il file PFX viene fornita anche nel file ZIP scaricato.

  2. Usare i comandi OpenSSL per personalizzare e generare certificati in base alle esigenze. Continuare a seguire le istruzioni in questo articolo se si vuole eseguire questa operazione totalmente in maniera autonoma.

In questo articolo verrà spiegato come:

  • Creare un'autorità di certificazione personalizzata
  • Creare un certificato autofirmato con firma della CA personalizzata
  • Caricare un certificato radice autofirmato in un gateway applicazione per autenticare il server back-end

Prerequisiti

  • OpenSSL in un computer che esegue Windows o Linux

    Sebbene siano disponibili altri strumenti per la gestione dei certificati, in questa esercitazione viene usato OpenSSL. È possibile trovare OpenSSL in aggregazione con molte distribuzioni di Linux, ad esempio Ubuntu.

  • Un server Web

    Esempio: Apache, IIS o NGINX per testare i certificati.

  • SKU v2 del gateway applicazione

    Se non si ha un gateway applicazione esistente, vedere Avvio rapido: Indirizzare il traffico Web con il gateway applicazione di Azure - Portale di Azure.

Creare un certificato CA radice

Creare il certificato CA radice usando OpenSSL.

Creare la chiave radice

  1. Accedere al computer in cui è installato OpenSSL ed eseguire questo comando. Verrà creata una chiave crittografata.

    openssl ecparam -out contoso.key -name prime256v1 -genkey
    

Creare un certificato radice e firmarlo in modo autonomo

  1. Usare il comando seguente per generare la richiesta di firma del certificato (CSR).

    openssl req -new -sha256 -key contoso.key -out contoso.csr
    
  2. Quando richiesto, digitare la password per la chiave radice e le informazioni sull'organizzazione per l'autorità di certificazione personalizzata, ad esempio paese/area geografica, stato, organizzazione, unità organizzativa e nome di dominio completo (dominio dell'emittente).

    create root certificate

  3. Usare il comando seguente per generare il certificato radice.

    openssl x509 -req -sha256 -days 365 -in contoso.csr -signkey contoso.key -out contoso.crt
    

    I comandi precedenti consentono di creare il certificato radice che verrà usato per firmare il certificato del server.

Creare un certificato del server

Successivamente, viene creato un certificato del server tramite OpenSSL.

Creare la chiave del certificato

Usare il comando seguente per generare la chiave per il certificato del server.

openssl ecparam -out fabrikam.key -name prime256v1 -genkey

Creare il file con estensione csr (richiesta di firma del certificato)

Tale file è una chiave pubblica assegnata a una CA quando viene richiesto un certificato. La CA emette il certificato per questa richiesta specifica.

Nota

Il nome comune per il certificato del server deve essere diverso dal dominio dell'emittente. In questo caso, ad esempio, il nome comune per l'emittente è www.contoso.com, mentre quello del certificato del server è www.fabrikam.com.

  1. Usare il comando seguente per generare il file con estensione csr:

    openssl req -new -sha256 -key fabrikam.key -out fabrikam.csr
    
  2. Quando richiesto, digitare la password per la chiave radice e le informazioni dell'organizzazione per la CA personalizzata: Paese/area geografica, stato, organizzazione, unità organizzativa e nome di dominio completo. Quest'ultimo è il dominio del sito Web e deve essere diverso dall'emittente.

    Server certificate

Generare il certificato con file csr e la chiave e firmarlo con la chiave radice della CA

  1. Eseguire questo comando per creare il certificato:

    openssl x509 -req -in fabrikam.csr -CA  contoso.crt -CAkey contoso.key -CAcreateserial -out fabrikam.crt -days 365 -sha256
    

Verificare il certificato creato:

  1. Usare il comando seguente per stampare l'output del file con estensione crt e verificarne il contenuto:

    openssl x509 -in fabrikam.crt -text -noout
    

    Certificate verification

  2. Verificare i file nella directory e assicurarsi che siano presenti i file seguenti:

    • contoso.crt
    • contoso.key
    • fabrikam.crt
    • fabrikam.key

Configurare il certificato nelle impostazioni TLS del server Web

Nel server Web configurare TLS usando i file fabrikam.crt e fabrikam.key. Se il server Web non può accettare due file, è possibile combinarli in un singolo file con estensione pem o pfx usando i comandi OpenSSL.

IIS

Per istruzioni su come importare il certificato e caricarli come certificato server in IIS, vedere PROCEDURA: Installare certificati importati in un server Web in Windows Server 2003.

Per istruzioni sull'associazione TLS, vedere Come configurare SSL in IIS 7.

Apache

La configurazione seguente è un esempio di host virtuale configurato per SSL in Apache:

<VirtualHost www.fabrikam:443>
      DocumentRoot /var/www/fabrikam
      ServerName www.fabrikam.com
      SSLEngine on
      SSLCertificateFile /home/user/fabrikam.crt
      SSLCertificateKeyFile /home/user/fabrikam.key
</VirtualHost>

NGINX

La configurazione seguente è un esempio di blocco del server NGINX con la configurazione TLS:

NGINX with TLS

Accedere al server per verificare la configurazione

  1. Aggiungere il certificato radice all'archivio radice attendibile del computer. Quando si accede al sito Web, verificare che l'intera catena di certificati venga visualizzata nel browser.

    Trusted root certificates

    Nota

    Si presuppone che il DNS sia stato configurato per indicare il nome del server Web (in questo esempio, www.fabrikam.com) all'indirizzo IP del server Web. In caso contrario, è possibile modificare il file hosts per risolvere il nome.

  2. Passare al sito Web e fare clic sull'icona a forma di lucchetto nella casella dell'indirizzo del browser per verificare il sito e le informazioni sul certificato.

Verificare la configurazione con OpenSSL

In alternativa, è possibile usare OpenSSL per verificare il certificato.

openssl s_client -connect localhost:443 -servername www.fabrikam.com -showcerts

OpenSSL certificate verification

Caricare il certificato radice nelle impostazioni HTTP del gateway applicazione

Per caricare il certificato nel gateway applicazione, è necessario esportare il certificato con estensione crt in un formato con estensione cer con codifica base 64. Poiché il file con estensione crt contiene già la chiave pubblica nel formato con codifica base 64, è sufficiente rinominare l'estensione del file da crt a cer.

Azure portal

Per caricare il certificato radice attendibile dal portale, selezionare impostazioni back-end e selezionare HTTPS nel protocollo back-end.

Screenshot of adding a certificate using the portal.

Azure PowerShell

In alternativa, è possibile usare l'interfaccia della riga di comando di Azure o Azure PowerShell per caricare il certificato radice. Il codice seguente è un esempio di Azure PowerShell.

Nota

Nell'esempio seguente viene aggiunto un certificato radice trusted al gateway applicazione, viene creata una nuova impostazione HTTP e viene aggiunta una nuova regola, supponendo che il pool back-end e il listener esistano già.

## Add the trusted root certificate to the Application Gateway

$gw=Get-AzApplicationGateway -Name appgwv2 -ResourceGroupName rgOne

Add-AzApplicationGatewayTrustedRootCertificate `
   -ApplicationGateway $gw `
   -Name CustomCARoot `
   -CertificateFile "C:\Users\surmb\Downloads\contoso.cer"

$trustedroot = Get-AzApplicationGatewayTrustedRootCertificate `
   -Name CustomCARoot `
   -ApplicationGateway $gw

## Get the listener, backend pool and probe

$listener = Get-AzApplicationGatewayHttpListener `
   -Name basichttps `
   -ApplicationGateway $gw

$bepool = Get-AzApplicationGatewayBackendAddressPool `
  -Name testbackendpool `
  -ApplicationGateway $gw

Add-AzApplicationGatewayProbeConfig `
  -ApplicationGateway $gw `
  -Name testprobe `
  -Protocol Https `
  -HostName "www.fabrikam.com" `
  -Path "/" `
  -Interval 15 `
  -Timeout 20 `
  -UnhealthyThreshold 3

$probe = Get-AzApplicationGatewayProbeConfig `
  -Name testprobe `
  -ApplicationGateway $gw

## Add the configuration to the HTTP Setting and don't forget to set the "hostname" field
## to the domain name of the server certificate as this will be set as the SNI header and
## will be used to verify the backend server's certificate. Note that TLS handshake will
## fail otherwise and might lead to backend servers being deemed as Unhealthy by the probes

Add-AzApplicationGatewayBackendHttpSettings `
  -ApplicationGateway $gw `
  -Name testbackend `
  -Port 443 `
  -Protocol Https `
  -Probe $probe `
  -TrustedRootCertificate $trustedroot `
  -CookieBasedAffinity Disabled `
  -RequestTimeout 20 `
  -HostName www.fabrikam.com

## Get the configuration and update the Application Gateway

$backendhttp = Get-AzApplicationGatewayBackendHttpSettings `
  -Name testbackend `
  -ApplicationGateway $gw

Add-AzApplicationGatewayRequestRoutingRule `
  -ApplicationGateway $gw `
  -Name testrule `
  -RuleType Basic `
  -BackendHttpSettings $backendhttp `
  -HttpListener $listener `
  -BackendAddressPool $bepool

Set-AzApplicationGateway -ApplicationGateway $gw

Verificare l'integrità back-end del gateway applicazione

  1. Fare clic sulla vista Integrità back-end dell'applicazione gateway per verificare se il probe è integro.
  2. Per il probe HTTPS lo stato è Integro.

HTTPS probe

Passaggi successivi

Per altre informazioni su SSL\TLS nel gateway applicazione, vedere Panoramica della terminazione TLS e di TLS end-to-end con il gateway applicazione.