Configurare mTLS di backend

Questa pagina fornisce istruzioni per configurare mTLS di backend utilizzando certificati autogestiti per bilanciatori del carico delle applicazioni esterni globali.

I passaggi per configurare mTLS di backend sono simili a quelli per il TLS con autenticazione del backend, tranne per il fatto che devi anche creare un certificato per il bilanciatore del carico. Questo certificato, noto anche come certificato client, è associato alla risorsa Configurazione autenticazione backend. Il bilanciatore del carico utilizza questo certificato client per autenticarsi nei backend.

Per configurare mTLS di backend, devi:

  • Crea una risorsa di configurazione dell'attendibilità composta da certificati radice e intermedi.
  • Crea un certificato client e caricalo in Certificate Manager.
  • Crea una risorsa Configurazione di autenticazione del backend che faccia riferimento sia alla configurazione della attendibilità sia al certificato client.
  • Collega la risorsa Configurazione autenticazione backend al servizio di backend del bilanciatore del carico.

Prima di iniziare

Autorizzazioni

Questa sezione elenca le autorizzazioni necessarie per configurare mTLS di backend.
Operazione Autorizzazione
Crea una configurazione dell'attendibilità certificatemanager.trustconfigs.create nel progetto Google Cloud di destinazione
Crea un certificato client certificatemanager.certs.create nel progetto Google Cloud di destinazione
Crea una risorsa Configurazione di autenticazione del backend
  • certificatemanager.certs.use sul certificato target
  • certificatemanager.trustconfigs.use nella configurazione dell'attendibilità di destinazione
  • networksecurity.backendauthenticationconfigs.create nel progetto Google Cloud di destinazione
  • Collega la risorsa Configurazione di autenticazione del backend al servizio di backend del bilanciatore del carico
  • compute.backendservice.update sul servizio di backend di destinazione
  • networksecurity.backendauthenticationconfigs.use nella risorsa Configurazione di autenticazione del backend di destinazione
  • Panoramica della configurazione

    Le sezioni seguenti descrivono i passaggi per configurare mTLS di backend in base all'architettura mostrata nel seguente diagramma:

    Componenti di mTLS di backend.
    Componenti mTLS di backend (fai clic per ingrandire).

    Crea i certificati radice e intermedi

    Questa sezione utilizza la libreria OpenSSL per creare il certificato radice (ancora di salvezza) e il certificato intermedio.

    Un certificato radice si trova nella parte superiore della catena di certificati. Un certificato intermedio fa parte della catena di attendibilità che porta al certificato radice. Il certificato intermedio è firmato in modo crittografico dal certificato radice. Quando il bilanciatore del carico riceve un certificato del server, lo convalida stabilendo una catena di attendibilità dal certificato del server al trust anchor configurato.

    Utilizza i seguenti comandi per creare i certificati principali e intermedi.

    1. Crea un file di configurazione OpenSSL.

      Nell'esempio seguente, il file di configurazione (example.cnf) contiene la sezione [ca_exts], che specifica le estensioni X.509 che contrassegnano il certificato come adatto per una CA. Per scoprire di più sui requisiti per i certificati radice e intermedi, consulta la sezione Requisiti per i certificati.

      cat > example.cnf << EOF
      [req]
      distinguished_name = empty_distinguished_name
      
      [empty_distinguished_name]
      # Kept empty to allow setting via -subj command-line argument.
      
      [ca_exts]
      basicConstraints=critical,CA:TRUE
      keyUsage=keyCertSign
      extendedKeyUsage=serverAuth
      
      EOF
      
    2. Crea un certificato radice X.509 autofirmato (root.cert). Il certificato radice è autofirmato con la propria chiave privata (root.key).

      openssl req -x509 \
          -new -sha256 -newkey rsa:2048 -nodes \
          -days 3650 -subj '/CN=root' \
          -config example.cnf \
          -extensions ca_exts \
          -keyout root.key -out root.cert
      
    3. Crea la richiesta di firma del certificato (CSR) int.req per il certificato intermedio.

      openssl req -new \
          -sha256 -newkey rsa:2048 -nodes \
          -subj '/CN=int' \
          -config example.cnf \
          -extensions ca_exts \
          -keyout int.key -out int.req
      
    4. Firma la CSR per creare il certificato intermedio X.509 (int.cert). La CSR viene firmata utilizzando il certificato radice.

      openssl x509 -req \
          -CAkey root.key -CA root.cert \
          -set_serial 1 \
          -days 3650 \
          -extfile example.cnf \
          -extensions ca_exts \
          -in int.req -out int.cert
      

    Formatta i certificati

    Per includere certificati nuovi o esistenti in un archivio attendibilità, formattali in una singola riga e memorizzali in variabili di ambiente in modo che possano essere richiamati dal file YAML di configurazione attendibilità.

    export ROOT_CERT=$(cat root.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
    
    export INTERMEDIATE_CERT=$(cat int.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
    

    Crea una risorsa di configurazione dell'attendibilità

    Una configurazione di attendibilità è una risorsa che rappresenta la configurazione dell'infrastruttura a chiave pubblica (PKI) nel Gestore certificati.

    Per creare una risorsa di configurazione della attendibilità, completa i seguenti passaggi:

    Console

    1. Nella console Google Cloud, vai alla pagina Gestione certificati.

      Vai a Gestore certificati

    2. Nella scheda Trust Configs (Configurazioni attendibilità), fai clic su Add Trust Config (Aggiungi configurazione attendibilità).

    3. Inserisci un nome per la configurazione.

    4. Per Località, seleziona Globale. La posizione indica dove è archiviata la risorsa trust.config. Per i bilanciatori del carico delle applicazioni esterni globali, devi creare una risorsa di configurazione della attendibilità globale.

    5. Nella sezione Archivio attendibilità, fai clic su Aggiungi 'Autorità di certificazione attendibile' e carica il file del certificato con codifica PEM o copia i contenuti del certificato.

    6. Fai clic su Aggiungi.

    7. Nella sezione Magazzino attendibile, fai clic su Aggiungi CA intermedia e carica il file del certificato con codifica PEM o copia i contenuti del certificato. Questo passaggio ti consente di aggiungere un altro livello di attendibilità tra il certificato radice e il certificato del server.

    8. Fai clic su Aggiungi per aggiungere la CA intermedia.

    9. Per aggiungere il certificato che hai aggiunto alla lista consentita, fai clic su Aggiungi.

    10. Fai clic su Crea.

    Verifica che la nuova risorsa di configurazione della attendibilità sia presente nell'elenco delle configurazioni.

    gcloud

    1. Crea un file YAML di configurazione dell'attendibilità (trust_config.yaml) che specifichi i parametri della configurazione dell'attendibilità. Questa risorsa di configurazione della attendibilità di esempio contiene un archivio attendibilità con un trust anchor e un certificato intermedio. Questa risorsa di configurazione della attendibilità di esempio legge i contenuti del certificato dalle variabili di ambiente create nel passaggio precedente Formatta i certificati.

      cat << EOF > trust_config.yaml
      trustStores:
      - trustAnchors:
        - pemCertificate: "${ROOT_CERT}"
        intermediateCas:
        - pemCertificate: "${INTERMEDIATE_CERT}"
      EOF
      

      Per creare un trust store con trust anchor o certificati intermedi aggiuntivi, aggiungi pemCertificate righe nella sezione appropriata.

    2. Per importare il file YAML della configurazione della attendibilità, utilizza il comando gcloud certificate-manager trust-configs import:

      Per i bilanciatori del carico delle applicazioni esterni globali, specifica global come posizione in cui viene memorizzata la risorsa di configurazione della attendibilità.

      gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME  \
          --source=trust_config.yaml \
          --location=global
      

      Sostituisci quanto segue:

      • TRUST_CONFIG_NAME: il nome della risorsa di configurazione dell'attendibilità

    Crea un certificato client

    In mTLS di backend, il bilanciatore del carico agisce come client e il backend come server.

    Per attivare mTLS di backend, il bilanciatore del carico deve dimostrare la propria identità al backend. Questa autenticazione viene eseguita utilizzando un certificato client che il bilanciatore del carico presenta al backend. Il server di backend deve convalidare il certificato client utilizzando la propria catena di attendibilità.

    Quando si connette a un server di backend, il bilanciatore del carico imposta l'indicazione nome server (SNI) sul nome host specificato nella configurazione TLS. Il server di backend seleziona il certificato SSL/TLS appropriato in base a questo valore SNI. Il bilanciatore del carico si aspetta che il valore SNI corrisponda a un nome alternativo del soggetto (SAN) elencato nel certificato del server di backend.

    I certificati client possono essere certificati gestiti da un'autorità di certificazione privata tramite Certificate Authority Service o certificati PKI privati autogestiti. In questo esempio, il certificato client viene emesso utilizzando i certificati autogestiti. Questa sezione utilizza la libreria OpenSSL per creare il certificato CA radice e il certificato client.

    Per creare un certificato client:

    1. Crea un file di configurazione OpenSSL.

      Nell'esempio seguente, il file di configurazione (example.cnf) contiene la sezione [ca_exts], che specifica le estensioni X.509 che contrassegnano il certificato come adatto per un'autorità di certificazione (CA). L'attributo extendedKeyUsage è impostato su clientAuth. Per scoprire di più sui requisiti per i certificati principali e intermedi, consulta la sezione Requisiti dei certificati.

        cat > example.cnf << EOF
        [req]
        distinguished_name = empty_distinguished_name
      
        [empty_distinguished_name]
        # Kept empty to allow setting via -subj command-line argument.
      
        [ca_exts]
        basicConstraints=critical,CA:TRUE
        keyUsage=keyCertSign
        extendedKeyUsage=clientAuth
      
        EOF
      
    2. Crea un certificato CA radice X.509 autofirmato (root.cert). Il certificato radice è autofirmato con la propria chiave privata (root.key).

        openssl req -x509 \
            -new -sha256 -newkey rsa:2048 -nodes \
            -days 3650 -subj '/CN=root' \
            -config example.cnf \
            -extensions ca_exts \
            -keyout root.key -out root.cert
      
    3. Crea un file di configurazione per generare la CSR per il certificato client.

      Il seguente file di configurazione (client.config) contiene la sezione [extension_requirements], che specifica le estensioni X.509 da includere nel CSR. Per scoprire di più sui requisiti per i certificati client, consulta Requisiti dei certificati.

        cat > client.config << EOF
        [req]
        default_bits              = 2048
        req_extensions            = extension_requirements
        distinguished_name        = dn_requirements
        prompt                    = no
      
        [extension_requirements]
        basicConstraints          = critical, CA:FALSE
        keyUsage                  = critical, nonRepudiation, digitalSignature, keyEncipherment
        extendedKeyUsage          = clientAuth
      
        [dn_requirements]
        countryName               = US
        stateOrProvinceName       = California
        localityName              = San Francisco
        0.organizationName        = example
        organizationalUnitName    = test
        commonName                = test.example.com
        emailAddress              = test@example.com
      
        EOF
      
    4. Crea il file CSR (client.csr) per il certificato client.

        openssl req -new \
            -config client.config \
            -keyout client.key -out client.csr
      
    5. Crea il certificato client (client.cert) dalla CSR. La CSR è firmata dal certificato CA radice per emettere il certificato client X.509.

        openssl x509 -req \
            -CAkey root.key -CA root.cert \
            -days 365 \
            -extfile client.config \
            -extensions extension_requirements \
            -in client.csr -out client.cert
      

    Carica il certificato client in Gestore certificati

    Per caricare il certificato client in Gestore certificati:

    Console

    1. Nella console Google Cloud, vai alla pagina Gestione certificati.

      Vai a Gestore certificati

    2. Nella scheda Certificati, fai clic su Aggiungi certificato.

    3. Inserisci un nome per il certificato.

      Questo nome deve essere univoco per il progetto.

    4. (Facoltativo) Inserisci una descrizione per il certificato. La descrizione ti aiuta a identificare un certificato specifico in un secondo momento.

    5. Per Località, seleziona Globale.

    6. In Ambito, seleziona Autenticazione client.

    7. In Tipo di certificato, scegli Crea certificato autogestito.

    8. Per il campo Certificate (Certificato), carica un file del certificato con codifica PEM o copia e incolla i contenuti di un certificato con codifica PEM.

    9. Per il campo Certificato della chiave privata, carica una chiave privata con codifica PEM non protetta da una passphrase oppure copia e incolla i contenuti della chiave privata con codifica PEM.

    10. Specifica un'etichetta da associare al certificato. Se necessario, puoi aggiungere più di un'etichetta. Per aggiungere un'etichetta, fai clic sul pulsante Aggiungi etichetta e specifica un key e un value per l'etichetta.

    11. Fai clic su Crea. Verifica che il nuovo certificato sia visualizzato nell'elenco dei certificati.

    gcloud

    1. Per caricare il certificato client in Certificate Manager, utilizza il comando gcloud certificate-manager certificates create. L'ambito di questo certificato è client-auth, il che indica che viene utilizzato come certificato client nel backend mTLS.

      gcloud certificate-manager certificates create CLIENT_ CERTIFICATE_NAME \
          --certificate-file=client.cert \
          --private-key-file=client.key \
          --scope=client-auth \
          --global
      

      Sostituisci quanto segue:

      • CLIENT_CERTIFICATE_NAME: il nome della risorsa del certificato client. Questo certificato client con l'ambitoclient-auth viene utilizzato dalla risorsa Configurazione autenticazione backend.

    Crea una risorsa Configurazione di autenticazione del backend

    Per creare una risorsa Configurazione di autenticazione del backend (BackendAuthenticationConfig), completa i seguenti passaggi.

    Console

    1. Nella console Google Cloud, vai alla pagina Configurazione autenticazione.

      Vai a Configurazione autenticazione

    2. Nella scheda Autenticazione backend, fai clic su Crea.
    3. Inserisci un nome per la risorsa Configurazione di autenticazione del backend.
    4. Seleziona la risorsa del certificato client che hai creato in precedenza.
    5. (Facoltativo) Seleziona le radici di attendibilità pubbliche.
    6. Seleziona la risorsa di configurazione di attendibilità creata in precedenza.
    7. Fai clic su Crea.

    Verifica che venga visualizzata la risorsa Configurazione di autenticazione del backend.

    gcloud

    1. Crea un file YAML che specifichi in modo dichiarativo i diversi attributi della risorsa Configurazione di autenticazione del backend.

      Collega il certificato client alla risorsa Configurazione autenticazione backend per attivare mTLS nel backend.

      cat << EOF > BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml
      name: projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME
      trustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME
      clientCertificate: projects/PROJECT_ID/locations/global/certificates/CLIENT_ CERTIFICATE_NAME
      wellKnownRoots: PUBLIC_ROOTS
      EOF
      

      Sostituisci quanto segue:

      • BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME : il nome del file YAML in cui è definita la risorsa Configurazione di autenticazione del backend.
      • PROJECT_ID: l'ID del tuo progetto Google Cloud
      • BACKEND_AUTH_CONFIG_NAME: il nome della risorsa Configurazione di autenticazione del backend
      • TRUST_CONFIG_NAME: il nome della risorsa di configurazione dell'attendibilità creata in precedenza.
      • CLIENT_CERTIFICATE_NAME: il nome della risorsa del certificato client creata in precedenza.
    2. Per importare la risorsa di configurazione dell'autenticazione del backend, utilizza il gcloud beta network-security backend-authentication-configs import comando:

      gcloud beta network-security backend-authentication-configs import BACKEND_AUTH_CONFIG_NAME \
         --source=BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml \
         --location=global
      

      Sostituisci quanto segue:

      • BACKEND_AUTH_CONFIG_NAME: il nome della risorsa Configurazione di autenticazione del backend

      • BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME: il nome del file YAML in cui è definita la risorsa Configurazione di autenticazione del backend.

    Collega la risorsa Configurazione di autenticazione del backend al servizio di backend del bilanciatore del carico

    Per collegare la risorsa Configurazione autenticazione backend (BackendAuthenticationConfig) al servizio di backend del bilanciatore del carico, completa i seguenti passaggi.

    Console

    1. Nella console Google Cloud, vai alla pagina Bilanciamento del carico.

      Vai a Bilanciamento del carico

    2. Nella scheda Backend, seleziona il servizio di backend per cui devi attivare TLS autenticato e mTLS di backend.

    3. Fai clic su Modifica.

    4. Espandi la sezione Configurazioni avanzate.

    5. Nella sezione Autenticazione di backend, seleziona la casella di controllo Attiva.

    6. (Facoltativo) Specifica il nome host SNI e i SAN accettati per convalidare il certificato di backend.

    7. Per collegare la risorsa Configurazione di autenticazione del backend al servizio di backend, seleziona la risorsa Configurazione di autenticazione del backend nell'elenco Configurazione di autenticazione del backend.

    8. Fai clic su Continua.

    9. Per aggiornare le impostazioni del servizio di backend, fai clic su Aggiorna.

    gcloud

    1. Per elencare tutte le risorse di servizio di backend nel tuo progetto, utilizza il comando gcloud compute backend-services list.

      gcloud compute backend-services list
      

      Prendi nota del nome del servizio di backend a cui collegare la risorsa BackendAuthenticationConfig. Questo nome viene chiamato BACKEND_SERVICE_NAME nei passaggi successivi.

    2. Per esportare la configurazione del servizio di backend in un file, utilizza il comando gcloud beta compute backend-services export.

      gcloud beta compute backend-services export BACKEND_SERVICE_NAME \
          --destination=BACKEND_SERVICE_FILENAME.yaml \
          --global
      

      Sostituisci quanto segue:

      • BACKEND_SERVICE_NAME: il nome del servizio di backend
      • BACKEND_SERVICE_FILENAME: il nome e il percorso di un file YAML in cui viene esportata la configurazione del servizio di backend
    3. Aggiorna l'attributo tlsSettings del servizio di backend, impostandolo sulla risorsa Configurazione autenticazione backend. Inoltre, puoi configurare il nome host SNI e i SAN accettati nel servizio di backend per convalidare il certificato di backend.

        cat << EOF >> BACKEND_SERVICE_FILENAME.yaml
        tlsSettings:
          authenticationConfig: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME
          sni: examplepetstore.com
          subjectAltNames:
          - dnsName: examplepetstore.com
          - dnsName: api.examplepetstore.com
        EOF
        

      I valori SNI e SAN nella dichiarazione YAML precedente sono solo come esempi. Puoi sostituirli con valori reali pertinenti alla tua configurazione.

      Sostituisci quanto segue:

      • BACKEND_SERVICE_FILENAME: il nome del file YAML in cui viene esportata la configurazione del servizio di backend

      • PROJECT_ID: l'ID del tuo progetto Google Cloud

      • BACKEND_AUTH_CONFIG_NAME: il nome della risorsa Configurazione di autenticazione del backend

    4. Per importare la configurazione del servizio di backend aggiornata da un file, utilizza il comando gcloud beta compute backend-services import.

      gcloud beta compute backend-services import BACKEND_SERVICE_NAME \
          --source=BACKEND_SERVICE_FILENAME.yaml \
          --global
      

      Sostituisci quanto segue:

      • BACKEND_SERVICE_NAME: il nome del servizio di backend
      • BACKEND_SERVICE_FILENAME: il nome del file YAML di configurazione del servizio di backend

    Crea un certificato server di backend

    Questa sezione fornisce un'opzione di configurazione aggiuntiva per creare un certificato del server (a livello inferiore) firmato dal certificato intermedio, che fa parte della configurazione attendibilità. In questo modo è possibile stabilire una catena di attendibilità dal certificato del server al trust anchor.

    Se hai già creato una risorsa di configurazione della attendibilità che contiene un certificato intermedio, svolgi i seguenti passaggi:

    1. Crea un file di configurazione per generare la richiesta di firma del certificato (CSR) per il certificato del server.

      Il seguente file di configurazione (server.config) contiene la sezione [extension_requirements], che specifica le estensioni X.509 da includere nel CSR. Per scoprire di più sui requisiti per i certificati server, consulta Requisiti dei certificati.

      cat > server.config << EOF
      [req]
      default_bits              = 2048
      req_extensions            = extension_requirements
      distinguished_name        = dn_requirements
      prompt                    = no
      
      [extension_requirements]
      basicConstraints          = critical, CA:FALSE
      keyUsage                  = critical, nonRepudiation, digitalSignature, keyEncipherment
      extendedKeyUsage          = serverAuth
      subjectAltName            = @alt_names
      
      [alt_names]
      DNS.1 = examplepetstore.com
      DNS.2 = api.examplepetstore.com
      
      [dn_requirements]
      countryName               = US
      stateOrProvinceName       = California
      localityName              = San Francisco
      0.organizationName        = example
      organizationalUnitName    = test
      commonName                = examplepetstore.com
      emailAddress              = test@examplepetstore.com
      
      EOF
      
    2. Crea il file CSR (server.csr) per il certificato del server.

      openssl req -new \
          -sha256 -newkey rsa:2048 -nodes \
          -config server.config \
          -keyout server.key -out server.csr
      
    3. Firma la CSR per emettere il certificato server X.509 (server.cert). La CSR è firmata dal certificato intermedio.

      openssl x509 -req \
          -CAkey int.key -CA int.cert \
          -days 365 \
          -extfile server.config \
          -extensions extension_requirements \
          -in server.csr -out server.cert
      

      Quando il bilanciatore del carico si connette al server di backend, quest'ultimo presenta il proprio certificato (server.cert) per autenticarsi al bilanciatore del carico, completando la procedura di autenticazione del backend.

    Opzioni di configurazione SSL aggiuntive su un server web Apache

    Questa sezione facoltativa illustra la procedura per aggiornare le opzioni di configurazione SSL su un server Apache in base ai certificati client e server che hai creato in precedenza.

    1. Copia la chiave privata del server (server.key) e il certificato del server (server.cert) sul server web Apache.

          cat > server.key << EOF
          -----BEGIN PRIVATE KEY-----
          [...]
          -----END PRIVATE KEY-----
          EOF
      
          sudo cp ./server.key /etc/ssl/private/server.key
          

      Sostituisci [...] con la chiave privata del server con codifica PEM che hai creato in precedenza.

          cat > server.cert << EOF
          -----BEGIN CERTIFICATE-----
          [...]
          -----END CERTIFICATE-----
          EOF
      
          sudo cp ./server.cert /etc/ssl/certs/server.cert
          

      Sostituisci [...] con il certificato del server con codifica PEM che hai creato in precedenza.

    2. Carica il certificato client nella configurazione di attendibilità del server per convalidarlo.

            cat > client.cert << EOF
            -----BEGIN CERTIFICATE-----
            [...]
            -----END CERTIFICATE-----
            EOF
      
            sudo cp ./client.cert /etc/ssl/certs/client.cert
            

      Sostituisci [...] con il certificato client codificato in PEM che hai creato in precedenza.

    3. Aggiorna la configurazione SSL del server web Apache.

      Aggiorna la configurazione SSL di Apache per abilitare il traffico HTTPS utilizzando il certificato SSL e la chiave privata specificati.

          sudo vi /etc/apache2/sites-available/default-ssl.conf
      
          ----
          SSLCertificateFile      /etc/ssl/certs/server.cert
          SSLCertificateKeyFile /etc/ssl/private/server.key
          ----
          

      Aggiorna la configurazione SSL di Apache in modo da richiedere l'autenticazione del certificato client e specifica il certificato CA per la convalida.

          sudo vi /etc/apache2/sites-available/default-ssl.conf
      
          ----
          SSLVerifyClient require
          SSLVerifyDepth 5
          SSLCACertificateFile /etc/ssl/certs/client.cert
          ----
          
    4. Esegui nuovamente l'hash dei certificati CA.

          sudo c_rehash /etc/ssl/certs/
          
    5. Riavvia il server web Apache per applicare le modifiche.

          sudo systemctl restart apache2.service
          

    Passaggi successivi