Configurare TLS reciproca con certificati forniti dall'utente

Un certificato client valido deve mostrare una catena di attendibilità che rimandi all'ancora di attendibilità (certificato radice) nell'archivio attendibile. Questa pagina fornisce istruzioni per creare la tua catena di attendibilità configurando i tuoi certificati radice e intermedi utilizzando la libreria OpenSSL.

Dopo aver creato le radici di attendibilità, questo documento illustra la procedura per caricarle nell'archivio attendibilità della risorsa Gestore dei certificatiTrustConfig. A questo segue il collegamento della configurazione attendibile alla risorsa Client Authentication (ServerTLSPolicy) e il collegamento della risorsa Client Authentication alla risorsa proxy HTTPS di destinazione del bilanciatore del carico.

Prima di iniziare

  • Consulta la panoramica di Mutual TLS.
  • Consulta la guida per gestire le configurazioni di attendibilità.
  • Installa Google Cloud CLI. Per una panoramica completa dello strumento, consulta la panoramica dell'interfaccia a riga di comando gcloud. Puoi trovare i comandi relativi al bilanciamento del carico nel riferimento all'API e a gcloud CLI.

    Se non hai mai eseguito l'interfaccia alla gcloud CLI, esegui prima il comando gcloud init per autenticarti.

  • Abilita le seguenti API: API Compute Engine, API Certificate Manager, Security di rete e API Network Services. Per scoprire di più, consulta Abilitazione delle API.

  • Se utilizzi un bilanciatore del carico delle applicazioni esterno globale o un bilanciatore del carico delle applicazioni classico, assicurati di aver configurato un bilanciatore del carico con uno dei seguenti backend supportati:

    • Backend di gruppi di istanze VM
    • Bucket Cloud Storage (supportato solo se al bilanciatore del carico è collegato anche almeno un servizio di backend, oltre al bucket di backend)
    • Funzioni Cloud Run, App Engine o Cloud Functions
    • Connettività ibrida
  • Se utilizzi un bilanciatore del carico delle applicazioni esterno regionale, un bilanciatore del carico delle applicazioni interno tra regioni o un bilanciatore del carico delle applicazioni interno regionale, assicurati di aver configurato un bilanciatore del carico con uno dei seguenti backend supportati:

    • Backend di gruppi di istanze VM
    • Cloud Run
    • Connettività ibrida
  • Configura il progetto.

    gcloud

    gcloud config set project PROJECT_ID
    

Autorizzazioni

Per ottenere le autorizzazioni necessarie per completare questa guida, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:

  • Per creare risorse di bilanciatori del carico come TargetHTTPSProxy: Amministratore bilanciatore del carico Compute (roles/compute.loadBalancerAdmin)
  • Per utilizzare le risorse di Gestore certificati: Proprietario Gestore certificati (roles/certificatemanager.owner)
  • Per creare componenti di sicurezza e di rete: Compute Network Admin (roles/compute.networkAdmin) e Compute Security Admin (roles/compute.securityAdmin)
  • Per creare un progetto (facoltativo): Project Creator (roles/resourcemanager.projectCreator)

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

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 rimanda al certificato radice. Il certificato intermedio è firmato in modo crittografico dal certificato radice. Quando il bilanciatore del carico riceve un certificato client, lo convalida stabilendo una catena di attendibilità dal certificato client al trust anchor configurato.

Utilizza i seguenti comandi per creare i certificati principali e intermedi. La creazione del certificato intermedio è facoltativa. Tuttavia, in questa configurazione utilizziamo il certificato intermedio per firmare il 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 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 arg.
    
    [ca_exts]
    basicConstraints=critical,CA:TRUE
    keyUsage=keyCertSign
    extendedKeyUsage=clientAuth
    
    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 (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
    

Crea un certificato autofirmato che può essere aggiunto a una lista consentita

Puoi creare un certificato autofirmato e aggiungerlo a una lista consentita nella configurazione attendibilità.

Utilizza il seguente comando OpenSSL per creare un certificato X.509 autofirmato.

   openssl req -x509 \
       -new -sha256 -newkey rsa:2048 -nodes \
       -days 3650 -subj '/CN=localhost' \
       -keyout allowlisted.key -out allowlisted.cert

Questo certificato viene poi aggiunto a un campo allowlistedCertificates nella configurazione della attendibilità.

Formatta i certificati

Per includere certificati nuovi o esistenti in un TrustStore, formattali in un'unica riga e memorizzali nelle 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')

Per includere certificati nuovi o esistenti aggiunti a una lista consentita in una configurazione di attendibilità, formattali in una singola riga e memorizzali in variabili di ambiente, in modo che possano essere letti nel file YAML. Per i certificati inclusi in una lista consentita, utilizza il seguente comando per formattarli in una singola riga e archiviarli nella variabile di ambiente ALLOWLISTED_CERT.

export ALLOWLISTED_CERT=$(cat allowlisted.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')

Crea una risorsa di configurazione della 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 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 o Regionale.

    La posizione indica dove è archiviata la risorsa di configurazione della attendibilità. Per i bilanciatori del carico delle applicazioni esterni globali, i bilanciatori del carico delle applicazioni classici e i bilanciatori del carico delle applicazioni interni tra regioni, crea una risorsa di configurazione della attendibilità globale. Per i bilanciatori del carico delle applicazioni esterni regionali e per i bilanciatori del carico delle applicazioni interni regionali, crea una risorsa di configurazione della attendibilità regionale.

    Se hai selezionato Regionale, seleziona la regione.

  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 tuo certificato del server.

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

  9. (Facoltativo) Nella sezione Certificati nella lista consentita, fai clic su Aggiungi certificato e carica il file del certificato con codifica PEM o copia i contenuti del certificato.

  10. Fai clic su Aggiungi per aggiungere il certificato consentito.

  11. 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 della attendibilità (trust_config.yaml) che specifichi i parametri di configurazione della attendibilità. Questa risorsa di configurazione della attendibilità di esempio contiene un archivio attendibilità con un trust anchor e un certificato intermedio. 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. (Facoltativo) Specifica il certificato che viene aggiunto al file YAML di configurazione della attendibilità nel campo allowlistedCertificates. Non è necessario un elenco attendibile per aggiungere un certificato a una lista consentita.

    cat << EOF >> trust_config.yaml
    allowlistedCertificates:
    - pemCertificate: "${ALLOWLISTED_CERT?}"
    EOF
    

    Un certificato aggiunto a una lista consentita rappresenta qualsiasi certificato che può essere incapsulato nella configurazione della attendibilità in modo che sia sempre considerato valido. Puoi specificare più certificati in una lista consentita utilizzando più istanze del campo pemCertificate.

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

    globale

    Per i bilanciatori del carico delle applicazioni esterni globali, i bilanciatori del carico delle applicazioni classici e i bilanciatori del carico delle applicazioni interni tra regioni, specifica global come posizione in cui è archiviata 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à.

    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 della attendibilità.

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

    Sostituisci quanto segue:

    • TRUST_CONFIG_NAME: il nome della risorsa di configurazione dell'attendibilità.
    • LOCATION: la regione in cui è archiviata la risorsa di configurazione dell'attendibilità. La posizione predefinita è global.

Crea una risorsa di autenticazione client

Una risorsa di autenticazione client (chiamata anche ServerTLSPolicy) consente di specificare la modalità TLS lato server e la risorsa di configurazione di attendibilità da utilizzare per convalidare i certificati client. Se il client presenta un certificato non valido o non ha nessun certificato per il bilanciatore del carico, il clientValidationMode specifica come viene gestita la connessione del client. Per ulteriori informazioni, consulta Modalità di convalida del client mTLS.

  • Quando clientValidationMode è impostato su ALLOW_INVALID_OR_MISSING_CLIENT_CERT, tutte le richieste vengono passate al backend anche se la convalida non va a buon fine o se manca il certificato client.
  • Quando clientValidationMode è impostato su REJECT_INVALID, al backend vengono trasmesse solo le richieste che forniscono un certificato client che può essere convalidato in base a una risorsa TrustConfig.

Per creare una risorsa di autenticazione client (ServerTlsPolicy), compila i seguenti passaggi:

Console

  1. Nella console Google Cloud, vai alla pagina Autenticazione client.

    Vai ad Autenticazione client

  2. Fai clic su Crea autenticazione client.

  3. Inserisci un nome per la risorsa di autenticazione client.

  4. Per Località, seleziona Globale o Regionale.

    Per i bilanciatori del carico delle applicazioni esterni globali, i bilanciatori del carico delle applicazioni classici e i bilanciatori del carico delle applicazioni interni tra regioni, imposta la località su globale. Per i bilanciatori del carico delle applicazioni esterni regionali e i bilanciatori del carico delle applicazioni interni regionali, imposta la località sulla regione in cui è configurato il bilanciatore del carico.

  5. Per Modalità di autenticazione client, seleziona Bilanciamento del carico.

  6. Seleziona una modalità di convalida client.

  7. Seleziona la risorsa di configurazione di attendibilità creata in precedenza.

  8. Fai clic su Crea.

Verifica che sia visualizzata l'autenticazione client (ServerTlsPolicy).

gcloud

  1. In base a come vuoi gestire la connessione, seleziona una delle seguenti opzioni per definire la risorsa AuthenticationClient (ServerTlsPolicy) in formato YAML.

    • Opzione 1: clientValidationMode è impostato su ALLOW_INVALID_OR_MISSING_CLIENT_CERT.

      globale

      Per i bilanciatori del carico delle applicazioni esterni globali, i bilanciatori del carico delle applicazioni classici e i bilanciatori del carico delle applicazioni interni tra regioni, crea un file YAML che specifichi in modo dichiarativo la modalità di convalida del client e una risorsa di configurazione della attendibilità globale:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
          clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT
          clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME
      EOF
      

      regionale

      Per i bilanciatori del carico delle applicazioni esterni e interni regionali, crea un file YAML che specifichi in modo dichiarativo la modalità di convalida del client e una risorsa di configurazione della attendibilità regionale:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
          clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT
          clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME
      EOF
      
    • Opzione 2: clientValidationMode è impostato su REJECT_INVALID.

      globale

      Per i bilanciatori del carico delle applicazioni esterni globali, i bilanciatori del carico delle applicazioni classici e i bilanciatori del carico delle applicazioni interni tra regioni, crea un file YAML che specifichi in modo dichiarativo la modalità di convalida del client e una risorsa di configurazione della attendibilità globale:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
          clientValidationMode: REJECT_INVALID
          clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME
      EOF
      

      regionale

      Per i bilanciatori del carico delle applicazioni esterni e interni regionali, crea un file YAML che specifichi in modo dichiarativo la modalità di convalida del client e una risorsa di configurazione della attendibilità regionale:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
            clientValidationMode: REJECT_INVALID
            clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME
      EOF
      

      Sostituisci quanto segue:

      SERVER_TLS_POLICY_NAME: il nome della risorsa Client Authentication (ServerTlsPolicy).

      PROJECT_ID: l'ID del tuo progetto Google Cloud.

      LOCATION: per i bilanciatori del carico delle applicazioni esterni globali, i bilanciatori del carico delle applicazioni classici e i bilanciatori del carico delle applicazioni interni tra regioni, utilizza global. Per il bilanciatore del carico delle applicazioni esterno regionale o il bilanciatore del carico delle applicazioni interno regionale, utilizza la regione in cui hai configurato il bilanciatore del carico.

      TRUST_CONFIG_NAME: il nome della risorsa di configurazione dell'attendibilità che hai creato in precedenza.

  2. Per importare la risorsa ServerTlsPolicy di autenticazione client, utilizza il comando gcloud network-security server-tls-policies import:

    globale

    Per i bilanciatori del carico delle applicazioni esterni globali, i bilanciatori del carico delle applicazioni classici e i bilanciatori del carico delle applicazioni interni tra regioni, imposta il flag --location su global.

    gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \
      --source=server_tls_policy.yaml \
      --location=global
    

    Sostituisci quanto segue:

    SERVER_TLS_POLICY_NAME: il nome della risorsa Client Authentication (ServerTlsPolicy).

    regionale

    Per i bilanciatori del carico delle applicazioni esterni regionali e i bilanciatori del carico delle applicazioni interni regionali, imposta il flag --location sulla regione in cui è configurato il bilanciatore del carico.

    gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \
      --source=server_tls_policy.yaml \
      --location=LOCATION
    

    Sostituisci quanto segue:

    SERVER_TLS_POLICY_NAME: il nome della risorsa Client Authentication (ServerTlsPolicy).

  3. (Facoltativo) Per elencare tutte le risorse di autenticazione client (ServerTlsPolicies), utilizza il gcloud network-security server-tls-policies list comando:

    gcloud network-security server-tls-policies list \
      --location=LOCATION
    

    Sostituisci quanto segue:

    LOCATION: per i bilanciatori del carico delle applicazioni esterni globali, per i bilanciatori del carico delle applicazioni classici e per i bilanciatori del carico delle applicazioni interni tra regioni, utilizza global. Per il bilanciatore del carico delle applicazioni esterno regionale o il bilanciatore del carico delle applicazioni interno regionale, utilizza la regione in cui hai configurato il bilanciatore del carico.

Collega la risorsa Autenticazione client al bilanciatore del carico

Affinché l'autenticazione TLS reciproca (mTLS) funzioni, dopo aver configurato il bilanciatore del carico, devi collegare la risorsa di autenticazione client (ServerTLSPolicy) alla risorsa proxy HTTPS di destinazione del bilanciatore del carico.

Console

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

    Vai a Bilanciamento del carico

  2. Dall'elenco dei bilanciatori del carico, seleziona quello a cui devi collegare la risorsa Autenticazione client (ServerTLSPolicy).

  3. Fai clic su Modifica.

  4. Nella sezione Configurazione frontend per un frontend HTTPS, espandi la sezione Mostra funzionalità avanzate.

  5. Nell'elenco Client Authentication (Autenticazione client), seleziona la risorsa Client Authentication.

  6. Fai clic su Fine.

  7. Fai clic su Aggiorna.

gcloud

  1. Per elencare tutte le risorse proxy HTTPS di destinazione nel tuo progetto, utilizza il comando gcloud compute target-https-proxies list:

    gcloud compute target-https-proxies list
    

    Prendi nota del nome del proxy HTTPS di destinazione a cui collegare la risorsa ServerTLSPolicy. Questo nome viene chiamato TARGET_HTTPS_PROXY_NAME nei passaggi successivi.

  2. Per esportare la configurazione di un proxy HTTPS di destinazione in un file, utilizza il comando gcloud compute target-https-proxies export.

    globale

      gcloud compute target-https-proxies export TARGET_HTTPS_PROXY_NAME \
          --destination=TARGET_PROXY_FILENAME \
          --global
      

    Sostituisci quanto segue:

    • TARGET_HTTPS_PROXY_NAME: il nome del proxy di destinazione.
    • TARGET_PROXY_FILENAME: il nome del file di configurazione del proxy di destinazione in formato YAML. Ad esempio, mtls_target_proxy.yaml.

    regionale

    gcloud compute target-https-proxies export TARGET_HTTPS_PROXY_NAME \
        --destination=TARGET_PROXY_FILENAME \
        --region=REGION
    

    Sostituisci quanto segue:

    • TARGET_HTTPS_PROXY_NAME: il nome del proxy di destinazione.
    • TARGET_PROXY_FILENAME: il nome del file di configurazione del proxy di destinazione in formato YAML. Ad esempio, mtls_target_proxy.yaml
    • REGION: la regione in cui hai configurato il bilanciatore del carico.
  3. Per elencare tutte le risorse di autenticazione client (ServerTlsPolicy), utilizza il gcloud network-security server-tls-policies list comando:

    gcloud network-security server-tls-policies list \
        --location=LOCATION
    

    Sostituisci quanto segue:

    LOCATION: per bilanciatore del carico delle applicazioni interno tra regioni, bilanciatore del carico delle applicazioni esterno globale o bilanciatore del carico delle applicazioni classico, utilizza global. Per il bilanciatore del carico delle applicazioni esterno regionale o il bilanciatore del carico delle applicazioni interno regionale, utilizza la regione in cui hai configurato il bilanciatore del carico.

    Prendi nota del nome della risorsa Authentication (ServerTLSPolicy) (Autenticazione) per configurare mTLS. Questo nome viene chiamato SERVER_TLS_POLICY_NAME nel passaggio successivo.

  4. Aggiungi l'autenticazione client (ServerTlsPolicy) al proxy HTTPS di destinazione.

    echo "serverTlsPolicy: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/LOCATION/serverTlsPolicies/SERVER_TLS_POLICY_NAME" >> TARGET_PROXY_FILENAME

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud.
    • LOCATION: per bilanciatori del carico delle applicazioni esterni globali o bilanciatori del carico delle applicazioni classici e bilanciatori del carico delle applicazioni interni tra regioni, utilizza global. Per il bilanciatore del carico delle applicazioni esterno regionale o il bilanciatore del carico delle applicazioni interno regionale, utilizza la regione in cui hai configurato il bilanciatore del carico.
    • SERVER_TLS_POLICY_NAME: il nome della risorsa Client Authentication (ServerTLSPolicy).
    • TARGET_PROXY_FILENAME: il nome del file di configurazione del proxy di destinazione in formato YAML.
  5. Per importare la configurazione di un proxy HTTPS di destinazione da un file, utilizza il comando gcloud compute target-https-proxies import.

    globale

      gcloud compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \
          --source=TARGET_PROXY_FILENAME \
          --global
      

    Sostituisci quanto segue:

    • TARGET_HTTPS_PROXY_NAME: il nome del proxy di destinazione.
    • TARGET_PROXY_FILENAME: il nome del file di configurazione del proxy di destinazione in formato YAML. Ad esempio, mtls_target_proxy.yaml.

    regionale

      gcloud compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \
          --source=TARGET_PROXY_FILENAME \
          --region=REGION
      

    Sostituisci quanto segue:

    • TARGET_HTTPS_PROXY_NAME: il nome del proxy di destinazione.
    • TARGET_PROXY_FILENAME: il nome del file di configurazione del proxy di destinazione in formato YAML. Ad esempio, mtls_target_proxy.yaml
    • REGION: la regione in cui hai configurato il bilanciatore del carico.

Aggiungere intestazioni personalizzate mTLS

Quando attivi mTLS, puoi passare informazioni sulla connessione mTLS utilizzando intestazioni personalizzate. Puoi anche attivare la registrazione in modo che i errori di connessione mTLS vengano acquisiti nei log.

Aggiungi intestazioni personalizzate mTLS ai servizi di backend

Per i bilanciatori del carico delle applicazioni esterni globali o i bilanciatori del carico delle applicazioni classici, puoi utilizzare le intestazioni personalizzate per trasmettere informazioni sulla connessione mTLS ai servizi di backend.

  1. Per elencare tutti i servizi di backend nel progetto, utilizza il comando gcloud compute backend-services list:

    gcloud compute backend-services list
    

    Prendi nota del nome del servizio di backend per abilitare le intestazioni e il logging personalizzati. Questo nome viene chiamato BACKEND_SERVICE nel passaggio successivo.

  2. Per aggiornare il servizio di backend, utilizza il comando gcloud compute backend-services update:

    gcloud compute backend-services update BACKEND_SERVICE \
      --global \
      --enable-logging \
      --logging-sample-rate=1 \
      --custom-request-header='X-Client-Cert-Present:{client_cert_present}' \
      --custom-request-header='X-Client-Cert-Chain-Verified:{client_cert_chain_verified}' \
      --custom-request-header='X-Client-Cert-Error:{client_cert_error}' \
      --custom-request-header='X-Client-Cert-Hash:{client_cert_sha256_fingerprint}' \
      --custom-request-header='X-Client-Cert-Serial-Number:{client_cert_serial_number}' \
      --custom-request-header='X-Client-Cert-SPIFFE:{client_cert_spiffe_id}' \
      --custom-request-header='X-Client-Cert-URI-SANs:{client_cert_uri_sans}' \
      --custom-request-header='X-Client-Cert-DNSName-SANs:{client_cert_dnsname_sans}' \
      --custom-request-header='X-Client-Cert-Valid-Not-Before:{client_cert_valid_not_before}' \
      --custom-request-header='X-Client-Cert-Valid-Not-After:{client_cert_valid_not_after}'
    

Aggiungere intestazioni personalizzate mTLS alla mappa degli URL

Per il bilanciatore del carico delle applicazioni interno tra regioni, il bilanciatore del carico delle applicazioni esterno regionale o il bilanciatore del carico delle applicazioni interno regionale, puoi utilizzare le intestazioni personalizzate per trasmettere informazioni sulla connessione mTLS alla mappa URL.

Per elencare tutte le mappe URL del progetto, utilizza il comando gcloud compute url-maps list:

   gcloud compute url-maps list
   

Prendi nota del nome della mappa URL per attivare le intestazioni e il logging personalizzati. Questo nome viene chiamato URL_MAP_NAME nel passaggio successivo.

globale

Per modificare la mappa URL di un bilanciatore del carico delle applicazioni interno tra regioni, utilizza il comando gcloud compute url-maps edit:

   gcloud compute url-maps edit URL_MAP_NAME --global
   

Di seguito è riportato un file YAML di esempio che mostra come utilizzare le variabili negli intestazioni delle richieste personalizzate (requestHeadersToAdd). Puoi utilizzare le stesse variabili per inviare intestazioni di risposta personalizzate (responseHeadersToAdd).

   headerAction:
      requestHeadersToAdd:
      - headerName: "X-Client-Cert-Present"
        headerValue: "{client_cert_present}"
      - headerName: "X-Client-Cert-Chain-Verified"
        headerValue: "{client_cert_chain_verified}"
      - headerName: "X-Client-Cert-Error"
        headerValue: "{client_cert_error}"
      - headerName: "X-Client-Cert-Hash"
        headerValue: "{client_cert_sha256_fingerprint}"
      - headerName: "X-Client-Cert-Serial-Number"
        headerValue: "{client_cert_serial_number}"
      - headerName: "X-Client-Cert-SPIFFE"
        headerValue: "{client_cert_spiffe_id}"
      - headerName: "X-Client-Cert-URI-SANs"
        headerValue: "{client_cert_uri_sans}"
      - headerName: "X-Client-Cert-DNSName-SANs"
        headerValue: "{client_cert_dnsname_sans}"
      - headerName: "X-Client-Cert-Valid-Not-Before"
        headerValue: "{client_cert_valid_not_before}"
      - headerName: "X-Client-Cert-Valid-Not-After"
        headerValue: "{client_cert_valid_not_after}"
      - headerName: "X-Client-Cert-Issuer-Dn"
        headerValue: "{client_cert_issuer_dn}"
      - headerName: "X-Client-Cert-Subject-Dn"
        headerValue: "{client_cert_subject_dn}"
      - headerName: "X-Client-Cert-Leaf"
        headerValue: "{client_cert_leaf}"
      - headerName: "X-Client-Cert-Chain"
        headerValue: "{client_cert_chain}"
   

regionale

Per modificare la mappa degli URL per un bilanciatore del carico delle applicazioni esterno regionale o un bilanciatore del carico delle applicazioni interno regionale, utilizza il comando gcloud compute url-maps edit:

   gcloud compute url-maps edit URL_MAP_NAME --region=REGION
   

Di seguito è riportato un file YAML di esempio che mostra come utilizzare le variabili negli intestazioni delle richieste personalizzate (requestHeadersToAdd). Puoi utilizzare le stesse variabili per inviare intestazioni di risposta personalizzate (responseHeadersToAdd).

   defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
      name: regional-lb-map
      region: region/REGION
   headerAction:
      requestHeadersToAdd:
      - headerName: "X-Client-Cert-Present"
        headerValue: "{client_cert_present}"
      - headerName: "X-Client-Cert-Chain-Verified"
        headerValue: "{client_cert_chain_verified}"
      - headerName: "X-Client-Cert-Error"
        headerValue: "{client_cert_error}"
      - headerName: "X-Client-Cert-Hash"
        headerValue: "{client_cert_sha256_fingerprint}"
      - headerName: "X-Client-Cert-Serial-Number"
        headerValue: "{client_cert_serial_number}"
      - headerName: "X-Client-Cert-SPIFFE"
        headerValue: "{client_cert_spiffe_id}"
      - headerName: "X-Client-Cert-URI-SANs"
        headerValue: "{client_cert_uri_sans}"
      - headerName: "X-Client-Cert-DNSName-SANs"
        headerValue: "{client_cert_dnsname_sans}"
      - headerName: "X-Client-Cert-Valid-Not-Before"
        headerValue: "{client_cert_valid_not_before}"
      - headerName: "X-Client-Cert-Valid-Not-After"
        headerValue: "{client_cert_valid_not_after}"
      - headerName: "X-Client-Cert-Issuer-Dn"
        headerValue: "{client_cert_issuer_dn}"
      - headerName: "X-Client-Cert-Subject-Dn"
        headerValue: "{client_cert_subject_dn}"
      - headerName: "X-Client-Cert-Leaf"
        headerValue: "{client_cert_leaf}"
      - headerName: "X-Client-Cert-Chain"
        headerValue: "{client_cert_chain}"
   

Firma il certificato client con il certificato intermedio

Questa sezione fornisce un'opzione di configurazione aggiuntiva per generare un certificato client (a livello inferiore). Se hai già creato una risorsa TrustConfig contenente un certificato intermedio, segui questi passaggi:

  1. 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 dei 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
    

    Se vuoi allegare un'identità SPIFFE al file di configurazione:

    • Aggiungi un campo subjectAltName alla sezione [extension_requirements] come segue:

      subjectAltName            = @sans_list
      
    • Aggiungi una nuova sezione ([sans_list]) alla fine del file client.config come segue:

      [sans_list]
      URI.1                     = spiffe://example.com/test-identity
      
  2. Crea la CSR (client.csr) per il certificato client.

    openssl req -new \
        -config client.config \
        -keyout client.key -out client.csr
    
  3. Firma la CSR per emettere il certificato client X.509 (client.cert). La CSR è firmata dal certificato intermedio.

    openssl x509 -req \
        -CAkey int.key -CA int.cert \
        -days 365 \
        -extfile client.config \
        -extensions extension_requirements \
        -in client.csr -out client.cert
    
  4. Invia una richiesta HTTPS sicura all'indirizzo IP del bilanciatore del carico utilizzando il certificato SSL lato client. Il client presenta il proprio certificato (client.cert) per autenticarsi al bilanciatore del carico.

    curl -v --key client.key --cert client.cert https://IP_ADDRESS
    

    Sostituisci IP_ADDRESS con l'indirizzo IP del bilanciatore del carico.

Passaggi successivi