Autenticazione TLS reciproca

In genere, con la comunicazione HTTPS, l'autenticazione funziona solo in un'unica direzione: il client verifica l'identità del server.

Per le applicazioni che richiedono il bilanciatore del carico per autenticare l'identità dei client che vi si connettono utilizza TLS reciproco (mTLS).

Con mTLS, il bilanciatore del carico richiede al client di inviare un certificato autenticarsi durante l'handshake TLS con il bilanciatore del carico. Puoi configurare un archivio attendibilità utilizzato dal bilanciatore del carico per convalidare la catena di attendibilità del certificato client.

I seguenti bilanciatori del carico delle applicazioni supportano mTLS:

  • Bilanciatore del carico delle applicazioni esterno globale
  • Bilanciatore del carico delle applicazioni classico
  • Bilanciatore del carico delle applicazioni esterno regionale
  • Bilanciatore del carico delle applicazioni interno regionale
  • Bilanciatore del carico delle applicazioni interno tra regioni

Architettura

Affinché i bilanciatori del carico possano supportare un protocollo mTLS, sono necessarie le seguenti risorse deployment dell'autenticazione:

  • Una risorsa di autenticazione client (nota anche come ServerTLSPolicy). Consente di specificare la modalità TLS lato server e TrustConfig risorsa da utilizzare durante la convalida dei certificati client. Puoi specificare tutti i parametri relativi all'autenticazione mTLS nei criteri TLS del server. I criteri TLS del server possono essere collegati alla risorsa proxy HTTPS di destinazione.

  • Una risorsa TrustConfig. R Gestore certificati risorsa. TrustConfig contiene un singolo archivio di attendibilità utilizzata per convalidare i certificati client. Per ulteriori informazioni, vedi Gestire le configurazioni di attendibilità.

    Puoi caricare i certificati aggiunti a una lista consentita in TrustConfig. Un certificato aggiunto a una lista consentita viene sempre inserito considerato valido finché il certificato è analizzabile, prova di privato viene stabilito un possesso chiave e i vincoli al campo SAN siano soddisfatti. I certificati scaduti sono considerati validi anche se sono inclusi in una lista consentita.

  • Un archivio attendibile. Contiene l'ancora di attendibilità e i certificati delle autorità di certificazione (CA) intermedie utilizzati per convalidare la catena di certificati del client. Una CA viene utilizzata per emettere certificati attendibili il cliente. La CA è identificata dalla radice trust anchor del bilanciatore del carico o i certificati della CA intermedia.

    Puoi caricare i seguenti tipi di certificati client nell'archivio di attendibilità:

Nell'immagine seguente vengono mostrati i componenti mTLS:

globale

Il seguente diagramma mostra i componenti di un deployment di bilanciatore del carico delle applicazioni esterno. Questa architettura si applica anche al bilanciatore del carico delle applicazioni interno tra regioni, che è un bilanciatore del carico delle applicazioni interno che usa componenti globali.

TLS reciproco con componenti del bilanciatore del carico delle applicazioni esterno globale.
Figura 1. TLS reciproco con componenti del bilanciatore del carico delle applicazioni esterno globale (fai clic per ingrandire).

regionale

Il seguente diagramma mostra i componenti di un deployment di un bilanciatore del carico delle applicazioni interno regionale. Questa architettura si applica anche al bilanciatore del carico delle applicazioni esterno regionale, un bilanciatore del carico delle applicazioni esterno che utilizza componenti regionali.

TLS reciproco con componenti del bilanciatore del carico delle applicazioni interno regionale.
Figura 1. TLS reciproco con componenti del bilanciatore del carico delle applicazioni interno regionale (fai clic per ingrandire).

Per ulteriori informazioni sui componenti di un bilanciatore del carico delle applicazioni implementato, consulta le seguenti sezioni:

Funzionalità

Le funzionalità supportate da mTLS per i bilanciatori del carico consentono di:

  • Verifica la prova della disponibilità della chiave privata del certificato presentato dal cliente.

  • Convalida i certificati client in una delle due modalità:

    • Rifiutare le richieste se non possiamo convalidare la catena di certificati client in base a un elenco attendibile.
    • Passa tutte le richieste al backend anche se non forniscono un client certificato.
  • Esegui la convalida del certificato client in base a un anchor PKI caricato. Supporta l'aggiunta di più ancoraggi PKI separatamente per facilitare migrazione senza tempi di inattività da una vecchia infrastruttura a chiave pubblica a una nuova.

  • Fornisci certificati intermedi aggiuntivi da utilizzare per il percorso di convalida utilizzando gli ancoraggi PKI specificati. I certificati intermedi ti consentono di utilizzare mTLS con i client che non trasmettono la catena di certificati completa.

  • Genera e passa un'impronta del certificato al backend come intestazione personalizzata della richiesta.

  • Passa i campi selezionati estratti dal certificato al backend utilizzando intestazioni delle richieste personalizzate.

  • Passa il risultato della convalida ed eventuali errori di convalida al backend mediante intestazioni delle richieste personalizzate.

Per una descrizione più dettagliata della procedura di convalida, consulta la sezione Passaggi per la convalida del certificato client di seguito in questa pagina.

Modalità di convalida client mTLS

Quando il client presenta un certificato non valido o nessun certificato a il bilanciatore del carico, clientValidationMode specifica come viene gestita la connessione del client.

I valori clientValidationMode sono i seguenti:

  • ALLOW_INVALID_OR_MISSING_CLIENT_CERT consente la connessione dal client anche se la convalida della catena di certificati del certificato client non è riuscita o se non è stato presentato alcun certificato client. La prova della proprietà della chiave privata viene sempre controllata quando viene presentato il certificato client.

    Puoi utilizzare le variabili di intestazione personalizzate con questa modalità per indicare al backend se il client ha fornito un certificato, se la convalida riuscito e altre informazioni sono state estratte dal certificato.

  • REJECT_INVALID rifiuta la connessione se un client non fornisce un certificato o se la convalida del certificato non è riuscita.

Puoi visualizzare i log per la convalida del certificato client mTLS quando il logging è abilitato nel servizio di backend.

Valori delle intestazioni personalizzate trasmessi al backend

La tabella seguente mostra tutte le intestazione personalizzata TLS reciproca Valori delle variabili che vengono sempre passati al backend (tipo di richiesta "Pass request to backend"). Le intestazioni personalizzate vengono passate al backend quando clientValidationMode è impostato su ALLOW_INVALID_OR_MISSING_CLIENT_CERT o il certificato client supera la convalida del certificato.

Stato del certificato client clientValidationMode Intestazioni personalizzate

La catena di certificati client è troppo lunga (più di 10 certificati intermedi inclusi nel certificato client).

ALLOW_INVALID_OR_MISSING_CLIENT_CERT

client_cert_present: true

client_cert_chain_verified: false

client_cert_error: client_cert_chain_exceeded_limit

client_cert_sha256_fingerprint: <cert hash>

Le dimensioni della chiave RSA di un client o di un certificato intermedio non sono valide.

Non viene eseguita alcuna convalida.

Le chiavi RSA possono variare da 2048 a 4096 bit.

ALLOW_INVALID_OR_MISSING_CLIENT_CERT

client_cert_present: true

client_cert_chain_verified: false

client_cert_error: client_cert_invalid_rsa_key_size

client_cert_sha256_fingerprint: <cert hash>

Un client o un certificato intermedio utilizza un client non supportato ellittica.

Non viene eseguita alcuna convalida.

Le curve ellittiche valide sono P-256 e P-384.

ALLOW_INVALID_OR_MISSING_CLIENT_CERT

client_cert_present: true

client_cert_chain_verified: false

client_cert_error: client_cert_unsupported_elliptic_curve_key

client_cert_sha256_fingerprint: <cert hash>

Un client o un certificato intermedio utilizza un certificato non RSA o non ECDSA dell'algoritmo.

Non viene eseguita alcuna convalida.

ALLOW_INVALID_OR_MISSING_CLIENT_CERT

client_cert_present: true

client_cert_chain_verified: false

client_cert_error: client_cert_unsupported_key_algorithm

client_cert_sha256_fingerprint: <cert hash>

L'infrastruttura a chiave pubblica da usare per la convalida ha più di dieci certificati che condividono le stesse informazioni sulla chiave pubblica del soggetto e del soggetto.

Non viene eseguita alcuna convalida.

ALLOW_INVALID_OR_MISSING_CLIENT_CERT

client_cert_present: true

client_cert_chain_verified: false

client_cert_error: client_cert_pki_too_large

client_cert_sha256_fingerprint: <cert hash>

Un certificato intermedio fornito per la convalida aveva più di 10 vincoli relativi ai nomi.

ALLOW_INVALID_OR_MISSING_CLIENT_CERT

client_cert_present: true

client_cert_chain_verified: false

client_cert_error: client_cert_chain_max_name_constraints_exceeded

client_cert_sha256_fingerprint: <cert hash>

Il certificato client non contiene Extended Key Usage (EKU) che include clientAuth

ALLOW_INVALID_OR_MISSING_CLIENT_CERT

client_cert_present: true

client_cert_chain_verified: false

client_cert_error: client_cert_chain_invalid_eku

client_cert_sha256_fingerprint: <cert hash>

Il limite di tempo è stato superato durante il tentativo di convalidare la catena di certificati. ALLOW_INVALID_OR_MISSING_CLIENT_CERT

client_cert_present: true

client_cert_chain_verified: false

client_cert_error: client_cert_validation_timed_out

client_cert_sha256_fingerprint: <cert hash>

È stato raggiunto il limite di profondità o iterazione durante il tentativo di convalida della catena di certificati.

La profondità massima per una catena di certificati è dieci, inclusi i certificati radice e client. Le iterazioni massime sono 100 (certificati esaminati per convalidare la catena di certificati client).

ALLOW_INVALID_OR_MISSING_CLIENT_CERT

client_cert_present: true

client_cert_chain_verified: false

client_cert_error: client_cert_validation_search_limit_exceeded

client_cert_sha256_fingerprint: <cert hash>

Hai configurato mTLS senza configurare un TrustConfig risorsa.

Non è possibile eseguire la convalida, ma l'hash del certificato viene inoltrato al backend.

ALLOW_INVALID_OR_MISSING_CLIENT_CERT

client_cert_present: true

client_cert_chain_verified: false

client_cert_error: client_cert_validation_not_performed

client_cert_sha256_fingerprint: <cert hash>

Nessun certificato client. ALLOW_INVALID_OR_MISSING_CLIENT_CERT

client_cert_present: false

client_cert_chain_verified: false

client_cert_error: client_cert_not_provided

client_cert_sha256_fingerprint: <empty>

Il certificato client non supera la convalida rispetto TrustConfig risorsa. ALLOW_INVALID_OR_MISSING_CLIENT_CERT

client_cert_present: true

client_cert_chain_verified: false

client_cert_error: client_cert_validation_failed

client_cert_sha256_fingerprint: <cert hash>

Il certificato client supera la convalida dello strumento di verifica dei certificati. Non applicabile

client_cert_present: true

client_cert_chain_verified: true

client_cert_error: <empty>

client_cert_sha256_fingerprint: <cert hash>

client_cert_serial_number: <serial_number>

client_cert_valid_not_before: <date>

client_cert_valid_not_after: <date>

client_cert_uri_sans: <list>

client_cert_dnsname_sans: <list>

client_cert_issuer_dn: <issuer>

client_cert_subject_dn: <subject>

client_cert_leaf: <certificate>

client_cert_chain: <list>

Errori registrati per le connessioni chiuse

I seguenti errori comportano una connessione del client chiusa quando clientValidationMode è impostato su ALLOW_INVALID_OR_MISSING_CLIENT_CERT o REJECT_INVALID. Per ulteriori informazioni, vedi Logging e monitoraggio del bilanciatore del carico delle applicazioni esterno regionale e Logging e monitoraggio del bilanciatore del carico delle applicazioni interno. Questi errori vengono registrati in Cloud Logging e descritti nella tabella seguente.

Stato del certificato client Richiesta Errore registrato
Il certificato client non riesce a trovare la corrispondenza della firma durante l'handshake. Termina handshake SSL Nessuno
Il servizio non è in grado di eseguire la convalida della catena di certificati. Termina connessione client_cert_validation_unavailable
Errore interno durante la convalida della catena di certificati. Termina connessione client_cert_validation_internal_error
TrustConfig corrispondente non trovato. Termina connessione client_cert_trust_config_not_found
Il payload del certificato client (inclusi eventuali certificati intermedi) è troppo grande (più di 16 kB). Termina connessione client_cert_exceeded_size_limit

Errori registrati con la convalida di REJECT_INVALID

I seguenti errori generano una connessione chiusa (tipo di richiesta) "Termina connessione") quando clientValidationMode è impostato su REJECT_INVALID. Per ulteriori informazioni, vedi Per ulteriori informazioni, vedi Logging e monitoraggio del bilanciatore del carico delle applicazioni esterno regionale e Logging e monitoraggio del bilanciatore del carico delle applicazioni interno. Questi errori vengono registrati in Cloud Logging e descritti nella tabella seguente.

Stato del certificato client Errore registrato
La catena di certificati client è troppo lunga (più di 10 certificati intermedi inclusi nel certificato client). client_cert_chain_exceeded_limit

Un client o un certificato intermedio ha una chiave RSA non valida dimensioni.

Non viene eseguita alcuna convalida.

Le chiavi RSA possono variare da 2048 a 4096 bit.

client_cert_invalid_rsa_key_size

Un client o un certificato intermedio utilizza una curva ellittica non supportata.

Non viene eseguita alcuna convalida.

Le curve valide sono P-256 e P-384.

client_cert_unsupported_elliptic_curve_key

Un client o un certificato intermedio utilizza un certificato non RSA o non ECDSA dell'algoritmo.

Non viene eseguita alcuna convalida.

client_cert_unsupported_key_algorithm

L'infrastruttura a chiave pubblica da usare per la convalida ha più di dieci certificati che condividono le stesse informazioni sulla chiave pubblica del soggetto e del soggetto.

Non viene eseguita alcuna convalida.

client_cert_pki_too_large

Un certificato intermedio fornito per la convalida ha registrato più di 10 vincoli di nome.

client_cert_chain_max_name_constraints_exceeded

Il certificato client non ha un'estensione Extended Key Usage (EKU) che includa clientAuth

client_cert_chain_invalid_eku

Il limite di tempo viene superato durante il tentativo di convalida del della catena di certificati. client_cert_validation_timed_out

Viene raggiunto il limite di profondità o iterazione durante il tentativo di convalidare la catena di certificati.

La profondità massima di una catena di certificati è dieci, tra cui i certificati radice e client. Il numero massimo di iterazioni è 100 (certificati esaminati per convalidare la catena di certificati client).

client_cert_validation_search_limit_exceeded
Hai configurato mTLS senza configurare una risorsa TrustConfig. client_cert_validation_not_performed
Il client non ha fornito il certificato richiesto durante l'handshake. client_cert_not_provided
La convalida del certificato client non riesce con la risorsa TrustConfig. client_cert_validation_failed

Passaggi per la convalida del certificato client

Durante la convalida di un certificato client, il bilanciatore del carico prende seguenti passaggi:

  1. Il bilanciatore del carico verifica la firma del client per dimostrare che il client possiede la chiave privata del certificato client. Se questo passaggio non funziona, il bilanciatore del carico non supera sempre l'handshake TLS, anche se la configurazione consente certificati client non validi o mancanti e non vengono registrate informazioni per i bilanciatori del carico delle applicazioni esterni globali, ma viene visualizzato un errore TLS ha eseguito l'accesso nel campo proxyStatus per i bilanciatori del carico delle applicazioni esterni regionali dei bilanciatori del carico delle applicazioni interni.
  2. Se la configurazione include un TrustAnchor, il bilanciatore del carico verifica una catena di attendibilità tra il certificato client e il TrustAnchor configurato. In particolare, il bilanciatore del carico verifica quanto segue:
    • I certificati client, intermedi e radice sono conformi ai requisiti dei certificati.
    • Il campo dell'oggetto nei certificati principali corrisponde al campo di emissione nei certificati secondari.
    • L'identificatore della chiave del soggetto (SKID) del certificato padre corrisponde all'identificatore della chiave di autorizzazione (AKID) nel certificato figlio.
    • Il SAN di un certificato secondario non viola il campo NameConstraints nel certificato principale.
  3. Se la verifica della catena di attendibilità ha esito positivo, la richiesta viene inoltrata al backend con qualsiasi Intestazioni mTLS personalizzate configurato per l'endpoint.
  4. Se la verifica della catena di attendibilità non va a buon fine:
    • Se ClientValidationMode è impostato su REJECT_INVALID, il bilanciatore del carico termina la connessione e registra il motivo in Cloud Logging.
    • Se il criterio ClientValidationMode viene impostato su ALLOW_INVALID_OR_MISSING_CLIENT_CERTIFICATE, il bilanciatore del carico inoltra comunque la richiesta al backend. Puoi utilizzare intestazioni delle richieste personalizzate per indicare al backend che la convalida non è riuscita e il motivo dell'errore. Per i bilanciatori del carico delle applicazioni interni tra regioni, i bilanciatori del carico delle applicazioni esterni regionali o i bilanciatori del carico delle applicazioni interni regionali, oltre agli intestazioni di richiesta personalizzate, puoi configurare i campi facoltativi mTLS per controllare il motivo dell'errore.

Requisiti del certificato

  • Gli strumenti di crittografia moderna costituiscono la base dell'autenticazione mTLS. I certificati devono utilizzare algoritmi RSA o ECDSA per lo scambio di chiavi. Gli algoritmi di hashing devono utilizzare SHA-256 o una funzione di hashing crittografica più sicura. Gli algoritmi di hashing come MD4, MD5 e SHA-1 non sono supportati.
  • Per i certificati client (a livello di foglia):
  • Per i certificati radice e intermedi:

Limitazioni

  • Il bilanciatore del carico non esegue controlli di revoca sui certificati client.

  • I bilanciatori del carico delle applicazioni ti consentono di caricare una configurazione attendibilità con un singolo archivio di attendibilità contenente al massimo 100 trust anchor e 100 certificati intermedi e 500 certificati aggiunti a una lista consentita. Tutti i certificati intermedi non devono avere più di tre certificati che condividono le stesse informazioni relative a Subject e Subject Public Key. Per ulteriori informazioni, consulta Quote e limiti.

  • La profondità massima per una catena di certificati è dieci, inclusi i certificati radice e client. Il numero massimo di volte in cui i certificati intermedi possono valutato quando si tenta di creare una catena di attendibilità è pari a 100. Per maggiori informazioni per ulteriori informazioni, consulta Quote e limiti.

  • Le chiavi dei certificati caricati e trasmessi dal client sono limitate a le seguenti:

    • Le chiavi RSA possono variare da 2048 a 4096 bit. Per ulteriori informazioni, consulta Quote e limiti.
    • Le chiavi ECDSA possono utilizzare le curve P-256 o P-384.
  • La catena di certificati accettata ricevuta dal client è limitata a fino a 16 kB e 10 certificati. Per ulteriori informazioni, consulta Quote e limiti.

  • I certificati radice utilizzati per la convalida non possono contenere più di 10 vincoli relativi ai nomi. Per saperne di più, consulta Quote e limiti.

  • I certificati client autofirmati sono sempre considerati non validi dal con il bilanciatore del carico di rete passthrough esterno regionale.

Passaggi successivi