Autenticazione TLS reciproca

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

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

Con mTLS, il bilanciatore del carico richiede che il client invii un certificato per autenticare se stesso durante l'handshake TLS con il bilanciatore del carico. Puoi configurare un archivio di 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 (anteprima)
  • Bilanciatore del carico delle applicazioni interno regionale (anteprima)
  • Bilanciatore del carico delle applicazioni interno tra regioni (anteprima)

Architettura

Le seguenti risorse sono necessarie affinché i bilanciatori del carico possano supportare un deployment dell'autenticazione mTLS:

  • Una risorsa del criterio TLS del server (ServerTLSPolicy). Consente di specificare la modalità TLS lato server e la risorsa TrustConfig da utilizzare durante la convalida dei certificati client. I criteri TLS del server supportano l'autenticazione mTLS. I criteri TLS del server possono essere collegati alla risorsa proxy HTTPS di destinazione.

  • Una risorsa TrustConfig. Una risorsa Gestore certificati. TrustConfig contiene una singola risorsa dell'archivio di attendibilità utilizzata per convalidare i certificati client. Per maggiori informazioni, consulta Gestire le configurazioni di attendibilità.

    Puoi caricare i certificati inclusi nella lista consentita in TrustConfig. Un certificato incluso nella lista consentita è sempre considerato valido, purché sia analizzabile, venga stabilita una prova del possesso di una chiave privata e vengano soddisfatti i vincoli per il campo SAN del certificato. Anche i certificati scaduti sono considerati validi quando sono inseriti nella lista consentita.

  • Un archivio di attendibilità. Contiene i certificati di trust anchor e dell'autorità di certificazione intermedia (CA) utilizzati per convalidare la catena di certificati client. Una CA viene utilizzata per emettere certificati attendibili per il client. La CA è identificata dal certificato radice trust anchor del bilanciatore del carico o dai certificati CA intermedi.

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

La seguente immagine mostra i componenti mTLS:

globale

Il seguente diagramma mostra i componenti di un deployment di un bilanciatore del carico delle applicazioni esterno. Questa architettura si applica anche all'Application Load Balancer interno tra regioni, che è un bilanciatore del carico delle applicazioni interno che utilizza 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 del deployment di un bilanciatore del carico delle applicazioni interno regionale. Questa architettura si applica anche all'Application Load Balancer esterno regionale, ovvero 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 i componenti del bilanciatore del carico delle applicazioni interno regionale (fai clic per ingrandire).

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

Funzionalità

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

  • Verifica la prova di possesso della chiave privata del certificato presentato dal client.

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

    • Rifiutare le richieste se non è possibile convalidare la catena di certificati client in un archivio di attendibilità.
    • Passa tutte le richieste al backend anche se non forniscono un certificato client.
  • Eseguire la convalida del certificato client in base a un anchor PKI caricato. Supporta l'aggiunta di più anchor PKI separatamente per facilitare la migrazione senza tempi di inattività da una precedente PKI a una nuova.

  • Fornisci certificati intermedi aggiuntivi da utilizzare per la creazione di percorsi di convalida rispetto ad ancoraggi PKI specificati. I certificati intermedi consentono di utilizzare mTLS con client che non passano l'intera catena di certificati.

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

  • Trasmetti al backend i campi selezionati estratti dal certificato utilizzando intestazioni di richiesta personalizzate.

  • Passa il risultato della convalida e gli eventuali errori di convalida al backend usando intestazioni di richiesta personalizzate.

Per una descrizione più dettagliata del processo di convalida, consulta la sezione Passaggi di convalida dei certificati client più avanti in questa pagina.

Modalità di convalida client MTLS

Quando il client presenta un certificato non valido o nessun certificato al bilanciatore del carico, clientValidationMode specifica come viene gestita la connessione 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 di possesso della chiave privata viene sempre verificata al momento della presentazione del certificato client.

    Puoi utilizzare variabili di intestazione personalizzate con questa modalità per indicare al backend se il client ha fornito un certificato, se la convalida del certificato è riuscita e altre informazioni 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 dei certificati client mTLS quando il logging è abilitato sul servizio di backend.

Valori di intestazione personalizzati passati al backend

La seguente tabella mostra tutti i valori della variabile dell'intestazione personalizzata TLS reciproca che vengono sempre passati al backend (tipo di richiesta "Pass richiesta al 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>

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

Nessuna convalida eseguita.

Le chiavi RSA possono avere 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 una curva ellittica non supportata.

Nessuna convalida eseguita.

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 algoritmo non RSA e non EDSA.

Nessuna convalida eseguita.

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 utilizzare per la convalida ha più di dieci certificati intermedi che condividono le stesse informazioni sulla chiave pubblica del soggetto e del soggetto.

Nessuna convalida eseguita.

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 ha 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 viene superato durante il tentativo di convalida della 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>

Il limite di profondità o iterazione viene raggiunto durante il tentativo di convalida della catena di certificati.

La profondità massima per una catena di certificati è dieci, inclusi i certificati radice e client. Il numero massimo di iterazioni è 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 una risorsa TrustConfig.

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 alla risorsa TrustConfig. 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 la chiusura della connessione client quando clientValidationMode è impostato su ALLOW_INVALID_OR_MISSING_CLIENT_CERT o REJECT_INVALID. Per saperne di più, consulta la sezione Messaggi di errore HTTP statusDetails. Questi errori vengono registrati in Cloud Logging e descritti nella tabella seguente.

Stato del certificato client Richiesta Errore registrato
Il certificato client non supera la corrispondenza della firma durante l'handshake. Termina l'handshake SSL Nessun valore
Il servizio non è in grado di eseguire la convalida della catena di certificati. Termina connessione client_cert_validation_unavailable
Errore interno di convalida della catena di certificati. Termina connessione client_cert_validation_internal_error
Corrispondenza TrustConfig non trovata. Termina connessione client_cert_trust_config_not_found
Il payload del certificato client (compresi eventuali certificati intermedi) è troppo grande (più di 16 kB). Termina connessione client_cert_exceeded_size_limit

Errori registrati con convalida di REJECT_INVALID

I seguenti errori comportano la chiusura della connessione (tipo di richiesta "Termina connessione") quando clientValidationMode è impostato su REJECT_INVALID. Per maggiori informazioni, consulta i messaggi di errore HTTP statusDetails. 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 dimensione della chiave RSA non valida.

Nessuna convalida eseguita.

Le chiavi RSA possono avere da 2048 a 4096 bit.

client_cert_invalid_rsa_key_size

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

Nessuna convalida eseguita.

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

client_cert_unsupported_elliptic_curve_key

Un client o un certificato intermedio utilizza un algoritmo non RSA o non EDSA.

Nessuna convalida eseguita.

client_cert_unsupported_key_algorithm

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

Nessuna convalida eseguita.

client_cert_pki_too_large

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

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 della catena di certificati. client_cert_validation_timed_out

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

La profondità massima per una catena di certificati è dieci, inclusi 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
Il certificato client non supera la convalida con la risorsa TrustConfig. client_cert_validation_failed

Passaggi di convalida del certificato client

Durante la convalida di un certificato client, il bilanciatore del carico esegue i 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 va a buon fine, il bilanciatore del carico non supera sempre l'handshake TLS, anche se la configurazione consente certificati client non validi o mancanti e non viene registrata alcuna informazione.
  2. Se la configurazione include un valore TrustAnchor, il bilanciatore del carico verifica una catena di attendibilità tra il certificato client e l'elemento TrustAnchor configurato. In particolare, il bilanciatore del carico verifica quanto segue:
    • I certificati client, intermedi e radice sono conformi ai requisiti per i certificati.
    • Il campo dell'oggetto nei certificati padre corrisponde al campo del problema nei certificati figlio.
    • L'identificatore chiave del soggetto (SKID) del certificato padre corrisponde all'identificatore della chiave di autorizzazione (AKID) nel certificato secondario.
    • La SAN di un certificato figlio non viola il campo NameConstraints nel certificato padre.
  3. Se la verifica della catena di attendibilità ha esito positivo, la richiesta viene inoltrata al backend con qualsiasi intestazione personalizzata mTLS configurata 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 ClientValidationMode è 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 gli Application Load Balancer interni tra regioni, gli Application Load Balancer esterni regionali o gli Application Load Balancer interni regionali, oltre alle intestazioni delle richieste personalizzate, puoi configurare campi facoltativi mTLS per verificare il motivo dell'errore.

Requisiti per i certificati

Limitazioni

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

  • I bilanciatori del carico delle applicazioni consentono di caricare una configurazione di attendibilità con un singolo archivio di attendibilità che contiene al massimo 100 trust anchor e 100 certificati intermedi e 500 certificati inclusi nella lista consentita. Tutti i certificati intermedi non devono avere più di tre certificati che condividono le stesse informazioni relative al soggetto e alla chiave pubblica del soggetto. 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 è possibile valutare i certificati intermedi quando si cerca di creare la catena di attendibilità è 100. Per ulteriori informazioni, consulta Quote e limiti.

  • Le chiavi dei certificati caricati e trasmessi dal client sono limitate a quanto segue:

    • Le chiavi RSA possono avere da 2048 a 4096 bit. Per saperne di più, 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 un massimo di 16 kB e 10 certificati. Per saperne di più, 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 bilanciatore del carico.

Passaggi successivi