Configurare TLS reciproca con certificati forniti dall'utente

In questa pagina vengono fornite istruzioni per la creazione di un certificato radice e un certificato intermedio firmato, per poi caricarli. a una risorsa TrustConfig del gestore certificati. Se hai già dei certificati da caricare, salta i passaggi per la creazione di nuovi certificati.

Inoltre, crei le risorse di sicurezza di rete necessarie per configurare TLS mutuale (mTLS) per gli Application Load Balancer. Le istruzioni utilizzano OpenSSL a per creare il certificato radice e intermedio.

Prima di iniziare

  • Consulta la panoramica di Mutual TLS.
  • Esamina la sezione 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 visualizzare relativi al bilanciamento del carico Riferimento per gcloud CLI e API.

    Se non hai già eseguito gcloud CLI in precedenza, esegui prima il comando Comando gcloud init per l'autenticazione.

  • Abilita le API: API Compute Engine, API Certificate Manager, Network Security e l'API Network Services.

  • Se utilizzi il bilanciatore del carico delle applicazioni esterno globale o il bilanciatore del carico delle applicazioni classico, assicurati che devi configurare 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 dei seguenti backend supportati:

    • Backend di gruppi di istanze VM
    • Cloud Run
    • Connettività ibrida
  • Imposta 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 del Gestore certificati: Proprietario del Gestore certificati (roles/certificatemanager.owner)
  • Per creare i componenti di sicurezza e networking: Amministratore rete Compute (roles/compute.networkAdmin) e Amministratore sicurezza Compute (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 la ruoli o altri ruoli predefiniti ruoli.

Genera una chiave e certificati firmati

Questa sezione utilizza i comandi openssl per creare certificati radice e intermediari.

Utilizza i comandi riportati di seguito per generare un certificato radice e un certificato intermedio firmato con campi keyUsage e extendedKeyUsage validi.

  1. Crea un file example.cnf di esempio con la configurazione minima richiesta per creare certificati di firma validi. Puoi modificare se vuoi impostare campi aggiuntivi su questi 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 il certificato radice.

    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 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. Crea il certificato intermedio.

    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
    

Genera un certificato e aggiungilo a una lista consentita

Questa sezione utilizza i comandi openssl per creare un certificato di esempio e aggiungerlo a una lista consentita.

Utilizza i comandi seguenti per generare un certificato e aggiungerlo a una lista consentita.

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

Formattare i certificati

Per includere certificati nuovi o esistenti in un TrustStore, formatta il certificati in un'unica riga e li archiviamo in variabili di ambiente, in modo che possano essere letti . Usa i comandi seguenti per formattare i certificati e archiviarli in variabili di ambiente:

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 che si trovano in una lista consentita, utilizza il seguente comando per formattare i certificati in un'unica riga e archiviarli nel ALLOWLISTED_CERT variabile di ambiente.

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

Crea una risorsa TrustConfig

Crea una risorsa TrustConfig Gestore certificati che rappresenti la tua PKI. Questa risorsa TrustConfig di esempio contiene un archivio attendibilità con due ancore di attendibilità e due certificati CA intermedi. Legge i contenuti del certificato dalle variabili di ambiente create nel precedente passaggio Formatta i certificati.

Per creare un archivio di attendibilità con trust anchor aggiuntivi o CA intermedia certificati, aggiungi pemCertificate righe nella sezione appropriata. Se hai meno trust anchor o certificati CA intermedi, rimuovi le righe non necessarie.

Questa risorsa TrustConfig di esempio contiene un certificato che viene aggiunto a una lista consentita. Puoi specificare più certificati in una lista consentita utilizzando più istanze del campo pemCertificate.

Nei seguenti passaggi, sostituisci TRUST_CONFIG_NAME con il nome della risorsa TrustConfig:

  1. Per creare il file trust_config.yaml con un elenco attendibile, utilizza il seguente comando:

    cat << EOF > trust_config.yaml
    trustStores:
    - trustAnchors:
      - pemCertificate: "${ROOT_CERT?}"
      - pemCertificate: "${ROOT_CERT_2?}"
      intermediateCas:
      - pemCertificate: "${INTERMEDIATE_CERT?}"
      - pemCertificate: "${INTERMEDIATE_CERT_2?}"
    EOF
    
  2. (Facoltativo) Per creare il file trust_config.yaml con un certificato aggiunto a una lista consentita, utilizza il seguente comando:

    cat << EOF >> trust_config.yaml
    allowlistedCertificates:
    - pemCertificate: "${ALLOWLISTED_CERT?}"
    EOF
    
  3. Per creare le risorse TrustConfig del gestore certificati, utilizza la Comando gcloud certificate-manager trust-configs import:

    globale

    Per i bilanciatori del carico delle applicazioni esterni e i bilanciatori del carico delle applicazioni interni tra regioni, utilizza questo comando:

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

    regionale

    Per i bilanciatori del carico delle applicazioni esterni regionali e i bilanciatori del carico delle applicazioni interni regionali, utilizza questo comando:

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

Creare le risorse di autenticazione client

Una risorsa di autenticazione client (chiamata anche ServerTLSPolicy) consente specifichi la modalità TLS lato server e la risorsa TrustConfig da utilizzare durante la convalida dei 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 la risorsa ServerTLSPolicy, completa i seguenti passaggi:

  1. In base a come vuoi gestire la connessione, seleziona una delle seguenti opzioni le opzioni di CPU e memoria disponibili.

    Nei passaggi successivi, sostituisci SERVER_TLS_POLICY_NAME con il nome del server il criterio TLS e sostituisci PROJECT_ID con l'ID di del tuo progetto Google Cloud.

    • Opzione 1: clientValidationMode è impostato su ALLOW_INVALID_OR_MISSING_CLIENT_CERT.

      Per creare il file server_tls_policy.yaml, utilizza il seguente comando:

      globale

      Per i bilanciatori del carico delle applicazioni esterni e i bilanciatori del carico delle applicazioni interni tra regioni, utilizza il comando:

      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, utilizza il comando:

      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 è impostata su REJECT_INVALID.

      Per creare il file server_tls_policy.yaml, utilizza il seguente comando:

      globale

      Per i bilanciatori del carico delle applicazioni esterni e i bilanciatori del carico delle applicazioni interni tra regioni, utilizza il comando:

      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 regionali e i bilanciatori del carico delle applicazioni interni regionali, utilizza il comando:

      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
      
  2. Per creare la risorsa ServerTlsPolicy, utilizza il comando gcloud network-security server-tls-policies import:

    globale

    Per i bilanciatori del carico delle applicazioni esterni e i bilanciatori del carico delle applicazioni interni tra regioni, utilizza il comando:

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

    regionale

    Per i bilanciatori del carico delle applicazioni esterni regionali e i bilanciatori del carico delle applicazioni interni regionali, utilizza il comando:

    gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \
      --source=server_tls_policy.yaml \
      --location=REGION
    
  3. (Facoltativo) Elenca tutte le funzionalità di autenticazione client (ServerTlsPolicies) risorse in la località specificata del progetto corrente.

    Console

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

      Vai ad Autenticazione client

    2. Vengono visualizzate tutte le risorse ServerTlsPolicies.

    gcloud

    Per visualizzare un elenco di tutte le (ServerTlsPolicies), utilizza Comando gcloud network-security server-tls-policies list:

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

    Sostituisci quanto segue:

    REGION: usa global per il bilanciatore del carico delle applicazioni interno tra regioni, il bilanciatore del carico delle applicazioni esterno globale o il bilanciatore del carico delle applicazioni classico. 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.

Configura mTLS per il bilanciatore del carico

Affinché autenticazione TLS reciproca (mTLS) funzioni, dopo aver configurato un bilanciatore del carico, devi aggiornare il proxy HTTPS di destinazione utilizzando ServerTLSPolicy risorsa.

  1. Assicurati di aver già creato l'autenticazione client (ServerTLSPolicy) risorsa. Per istruzioni, vedi Crea le risorse di autenticazione client.

  2. Per elencare tutti i 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 il ServerTLSPolicy risorsa. Questo nome viene chiamato TARGET_HTTPS_PROXY_NAME nei passaggi successivi.

  3. Per esportare la configurazione di un proxy HTTPS di destinazione in un file, utilizza 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 target proxy.
    • TARGET_PROXY_FILENAME: il nome di un file 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 target proxy.
    • TARGET_PROXY_FILENAME: il nome di un file YAML. Ad esempio, mtls_target_proxy.yaml
    • REGION: la regione in cui hai configurato con il bilanciatore del carico di rete passthrough esterno regionale.
  4. Elenca tutte le ServerTlsPolicies risorse in la località specificata del progetto corrente.

    Console

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

      Vai ad Autenticazione client

    2. Vengono visualizzate tutte le risorse ServerTlsPolicies.

    gcloud

    Per visualizzare un elenco di tutte le autenticazioni client (ServerTlsPolicies), utilizza Comando gcloud network-security server-tls-policies list:

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

    Sostituisci quanto segue:

    REGION: usa global per il bilanciatore del carico delle applicazioni interno tra regioni, il bilanciatore del carico delle applicazioni esterno globale o il bilanciatore del carico delle applicazioni classico. 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 ServerTlsPolicies per configurare mTLS. Questo nome è denominato SERVER_TLS_POLICY_NAME nel passaggio successivo.

  5. Per aggiungere il file di risorse ServerTlsPolicy TARGET_PROXY_FILENAME, usa questo comando. Sostituisci PROJECT_ID con l'ID del tuo progetto Google Cloud.

    echo "serverTlsPolicy: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/REGION/serverTlsPolicies/SERVER_TLS_POLICY_NAME" >> TARGET_PROXY_FILENAME
  6. Per importare la configurazione di un proxy HTTPS di destinazione da un file, utilizza la classe 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 target proxy.
    • TARGET_PROXY_FILENAME: il nome di un file 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 target proxy.
    • TARGET_PROXY_FILENAME: il nome di un file YAML. Ad esempio, mtls_target_proxy.yaml
    • REGION: la regione in cui hai configurato il bilanciatore del carico.

Aggiungi intestazioni personalizzate mTLS

Quando attivi mTLS, puoi passare informazioni sulla connessione mTLS utilizzando intestazioni personalizzate. Puoi anche abilitare il logging in modo che Errori di connessione mTLS vengono acquisite 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 Comando gcloud compute backend-services list:

    gcloud compute backend-services list
    

    Prendi nota del nome del servizio di backend per abilitare intestazioni e logging personalizzati. Questo nome è indicato come BACKEND_SERVICE in al 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 nelle intestazioni delle richieste personalizzate (requestHeadersToAdd). Puoi utilizzare lo 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 URL per un bilanciatore del carico delle applicazioni esterno regionale o il bilanciatore del carico delle applicazioni interno regionale, utilizza 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 requestHeadersToAddintestazioni 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 una chiave client con il certificato intermedio

Questa sezione fornisce un'opzione di configurazione aggiuntiva per generare un certificato finale. Se hai già creato una risorsa TrustConfig utilizzando certificati intermedi (int.cert e int.key), usa quanto segue istruzioni:

  1. Crea un file di configurazione della chiave client.

    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 collegare un'identità SPIFFE:

    • Aggiungi subjectAltName a la sezione [extension_requirements] come segue:

      subjectAltName            = @sans_list
      
    • Aggiungi una nuova sezione nella parte inferiore del file client.config con quanto segue:

      [sans_list]
      URI.1                     = spiffe://example.com/test-identity
      
  2. Firma la chiave.

    openssl req -new -keyout client.key -out client.csr -config client.config
    
    openssl x509 -req -in client.csr -out client.cert -extfile client.config -extensions extension_requirements -days 365 -CA int.cert -CAkey int.key
    
  3. Per il test, invia una richiesta curl all'indirizzo IP del bilanciatore del carico.

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

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

Passaggi successivi