Configura TLS autenticato dal backend

Questa pagina fornisce istruzioni per configurare TLS autenticato dal backend, noto anche come autenticazione del backend, utilizzando certificati autogestiti.

Per configurare TLS autenticato dal backend, devi procedere nel seguente modo. Questi passaggi sono descritti nelle sezioni seguenti di questo documento.

  • Crea una risorsa di configurazione dell'attendibilità costituita da certificati radice e intermedi.
  • Crea una risorsa di configurazione dell'autenticazione del backend che fa riferimento alla configurazione dell'attendibilità.
  • Collega la risorsa di configurazione dell'autenticazione del backend al servizio di backend del bilanciatore del carico.

Prima di iniziare

Autorizzazioni

Questa sezione elenca le autorizzazioni necessarie per configurare TLS autenticato dal backend.
Operazione Autorizzazione
Crea una configurazione dell'attendibilità certificatemanager.trustconfigs.create sulla destinazione Google Cloud progetto
Crea una risorsa di configurazione dell'autenticazione del backend
  • certificatemanager.certs.use sul certificato di destinazione
  • certificatemanager.trustconfigs.use nella configurazione dell'attendibilità della destinazione
  • networksecurity.backendauthenticationconfigs.create sul progetto Google Cloud di destinazione
  • Collega la risorsa di configurazione dell'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 di configurazione dell'autenticazione del backend di destinazione
  • Panoramica della configurazione

    Le sezioni seguenti descrivono i passaggi per configurare TLS autenticato basato sull'architettura mostrata nel seguente diagramma.

    Componenti di TLS autenticato dal backend.
    Componenti TLS autenticati dal backend (fai clic per ingrandire).

    Crea i certificati radice e intermedi

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

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

    Utilizza i seguenti comandi per creare i certificati radice 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 a una CA. Per scoprire di più sui requisiti per i certificati root e intermedi, consulta 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=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
      

    Formattare i certificati

    Per includere certificati nuovi o esistenti in un archivio di attendibilità, formatta i certificati in una singola riga e archiviali nelle variabili di ambiente in modo che possano essere referenziati dal file YAML di configurazione dell'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 configurazione dell'attendibilità

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

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

    Console

    1. Nella console Google Cloud , vai alla pagina Certificate Manager.

      Vai a Certificate Manager

    2. Nella scheda Configurazioni di attendibilità, fai clic su Aggiungi configurazione di attendibilità.

    3. Inserisci un nome per la configurazione.

    4. Per Località, seleziona Globale o A livello di regione.

      La località indica dove è archiviata la risorsa di configurazione dell'attendibilità. Per i bilanciatori del carico delle applicazioni esterni globali, crea una risorsa di configurazione dell'attendibilità globale. Per i bilanciatori del carico delle applicazioni esterni regionali e i bilanciatori del carico delle applicazioni interni regionali, crea una risorsa di configurazione dell'attendibilità regionale.

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

    6. Fai clic su Aggiungi.

    7. Nella sezione Trust store, 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 dell'attendibilità venga visualizzata nell'elenco delle configurazioni.

    gcloud

    1. Crea un file YAML di configurazione dell'attendibilità (trust_config.yaml) che specifica i parametri di configurazione dell'attendibilità. Questa risorsa di configurazione dell'attendibilità di esempio contiene un archivio di attendibilità con un trust anchor e un certificato intermedio. Questa risorsa di configurazione dell'attendibilità legge il contenuto 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 righe pemCertificate nella sezione appropriata.

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

      globale

      Per i bilanciatori del carico delle applicazioni esterni globali, specifica global come posizione in cui è archiviata la risorsa di configurazione dell'attendibilità.

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

      Sostituisci TRUST_CONFIG_NAME con il nome della configurazione di trust.

      regionale

      Per i bilanciatori del carico delle applicazioni esterni regionali e i bilanciatori del carico delle applicazioni interni regionali, specifica la regione in cui è archiviata la risorsa di configurazione dell'attendibilità.

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

      Sostituisci quanto segue:

      • TRUST_CONFIG_NAME: il nome della risorsa di configurazione della relazione di trust
      • REGION: la regione in cui è archiviata la risorsa di configurazione dell'attendibilità

    Crea una risorsa di configurazione dell'autenticazione del backend

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

    Console

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

      Vai a Configurazione autenticazione

    2. Nella scheda Autenticazione backend, fai clic su Crea.
    3. Inserisci un nome per la risorsa di configurazione dell'autenticazione del backend.
    4. Per Località, seleziona Globale o A livello di regione.
    5. (Facoltativo) Seleziona le radici di attendibilità pubbliche.
    6. Seleziona la risorsa di configurazione di attendibilità che hai creato in precedenza.
    7. Fai clic su Crea.

    Verifica che venga visualizzata la risorsa di configurazione dell'autenticazione del backend.

    gcloud

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

      globale

      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
      wellKnownRoots: PUBLIC_ROOTS
      EOF
      

      Sostituisci quanto segue:

      • BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME : il nome del file YAML in cui è definita la risorsa di configurazione dell'autenticazione del backend
      • PROJECT_ID: l'ID del tuo Google Cloud progetto
      • BACKEND_AUTH_CONFIG_NAME: il nome della risorsa di configurazione dell'autenticazione del backend
      • TRUST_CONFIG_NAME: il nome della risorsa di configurazione dell'attendibilità che hai creato in precedenza

      regionale

      cat << EOF > BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml
      name: projects/PROJECT_ID/locations/REGION/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME
      trustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME
      wellKnownRoots: PUBLIC_ROOTS
      EOF
      

      Sostituisci quanto segue:

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

      globale

      gcloud 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 di configurazione dell'autenticazione del backend

      • BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME: il nome del file YAML in cui è definita la risorsa di configurazione dell'autenticazione del backend

      regionale

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

      Sostituisci quanto segue:

      • BACKEND_AUTH_CONFIG_NAME: il nome della risorsa di configurazione dell'autenticazione del backend

      • BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME: il nome del file YAML in cui è definita la risorsa di configurazione dell'autenticazione del backend

      • REGION: il nome della regione

    Collega la risorsa di configurazione dell'autenticazione del backend al servizio di backend del bilanciatore del carico

    Per collegare la configurazione dell'autenticazione del backend (risorsa 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 abilitare TLS autenticato dal backend e mTLS del backend.

    3. Fai clic su Modifica.

    4. Espandi la sezione Configurazioni avanzate.

    5. Nella sezione Autenticazione 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 di configurazione dell'autenticazione del backend al servizio di backend, seleziona la risorsa di configurazione dell'autenticazione del backend nell'elenco Configurazione dell'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 del 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 indicato come BACKEND_SERVICE_NAME nei passaggi seguenti.

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

      globale

      gcloud 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

      regionale

      gcloud compute backend-services export BACKEND_SERVICE_NAME \
          --destination=BACKEND_SERVICE_FILENAME.yaml \
          --region=REGION
      

      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
      • REGION: il nome della regioneGoogle Cloud in cui si trova il servizio di backend
    3. Aggiorna l'attributo tlsSettings del servizio di backend, indirizzandolo alla risorsa di configurazione dell'autenticazione del backend. Inoltre, puoi configurare il nome host SNI e i SAN accettati nel servizio di backend per convalidare il certificato di backend.

      globale

      Collega la risorsa di configurazione dell'autenticazione del backend globale al servizio di backend.

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

        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
        

      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 di configurazione dell'autenticazione del backend

      regionale

      Collega la risorsa di configurazione dell'autenticazione del backend regionale al servizio di backend.

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

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

      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

      • REGION: il nome della regioneGoogle Cloud in cui viene creata la configurazione di autenticazione del backend

      • BACKEND_AUTH_CONFIG_NAME: il nome della risorsa di configurazione dell'autenticazione del backend

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

      globale

        gcloud 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

      regionale

        gcloud compute backend-services import BACKEND_SERVICE_NAME \
            --source=BACKEND_SERVICE_FILENAME.yaml \
            --region=REGION
      

      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
      • REGION: il nome della regioneGoogle Cloud in cui si trova il servizio di backend

    Crea un certificato server di backend

    Questa sezione fornisce un'opzione di configurazione aggiuntiva per creare un certificato server (foglia) firmato dal certificato intermedio, che fa parte della configurazione di 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 dell'attendibilità che contiene un certificato intermedio, procedi nel seguente modo:

    1. Crea un file di configurazione per generare la CSR per il certificato server.

      Il seguente file di configurazione (server.config) contiene la sezione [extension_requirements], che specifica le estensioni X.509 da includere nella 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 la CSR (server.csr) per il certificato 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 descrive la procedura per aggiornare le opzioni di configurazione SSL su un server Apache in base ai certificati del server creati in precedenza.

    1. Copia la chiave privata del server (server.key) e il certificato del server (server.cert) nel 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 server con codifica PEM che hai creato in precedenza.

    2. 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
          ----
          
    3. Ricalcola l'hash dei certificati CA.

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

          sudo systemctl restart apache2.service
          

    Passaggi successivi