In genere, con la comunicazione HTTPS, l'autenticazione funziona solo in un modo: il client verifica l'identità del server.
Per le applicazioni che richiedono al bilanciatore del carico di autenticare l'identità dei client che si connettono allo stesso, utilizza TLS reciproco (mTLS).
Con mTLS, il bilanciatore del carico richiede al client di inviare un certificato per l'autenticazione 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à dei certificati 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
Affinché i bilanciatori del carico possano supportare un deployment dell'autenticazione mTLS, sono necessarie le seguenti risorse:
Una risorsa del criterio TLS del server (ServerTLSPolicy). Consente di specificare la modalità TLS lato server e la risorsa
TrustConfig
da utilizzare per 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 di Gestore dei certificati.TrustConfig
contiene una singola risorsa di archivio attendibilità utilizzata per convalidare i certificati client. Per maggiori 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 considerato valido, purché sia analizzabile, sia stata stabilita la prova di possesso della chiave privata e vengano soddisfatti i vincoli sul campo SAN del certificato. I certificati scaduti sono considerati validi anche quando sono inseriti in una lista consentita.Un archivio di fiducia. Contiene i certificati per trust anchor e intermedi dell'autorità di certificazione (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à:
- Certificati emessi da CA di terze parti di tua scelta.
- Certificati emessi da CA private nel tuo controllo, come descritto in Configurare TLS reciprocamente con una CA privata.
- Certificati firmati, come descritto in Configurare TLS reciproco con certificati forniti dall'utente.
Nell'immagine seguente vengono mostrati i componenti mTLS:
globale
Il seguente diagramma mostra i componenti del deployment di un 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 utilizza componenti globali.
regionale
Il seguente diagramma mostra i componenti del deployment di un bilanciatore del carico delle applicazioni interno regionale. Questa architettura si applica anche al bilanciatore del carico delle applicazioni esterno regionale, ovvero un bilanciatore del carico delle applicazioni esterno che utilizza componenti regionali.
Per saperne di più sui componenti di un deployment del bilanciatore del carico delle applicazioni, consulta le sezioni seguenti:
- Architettura (bilanciatori del carico delle applicazioni esterni)
- Architettura e risorse (Application Load Balancer interni)
Funzionalità
Le funzionalità supportate da mTLS per i bilanciatori del carico 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.
Esegui 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 vecchia infrastruttura a chiave pubblica a una nuova.
Fornisci certificati intermedi aggiuntivi da utilizzare per la creazione di percorsi di convalida rispetto agli ancoraggi PKI specificati. I certificati intermedi consentono di utilizzare mTLS con i client che non superano la catena di certificati completa.
Genera e passa un'impronta del certificato al backend come intestazione della richiesta personalizzata.
Trasferisci 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 utilizzando intestazioni delle richieste 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 del client MTLS
Quando il client presenta un certificato non valido o nessun certificato al bilanciatore del carico, clientValidationMode
specifica il modo in cui viene gestita la connessione client.
I valori di 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 è andata a buon fine o non è stato presentato alcun certificato client. La prova di possesso della chiave privata viene sempre verificata 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 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 nel servizio di backend.
Valori di intestazione personalizzati passati al backend
La seguente tabella mostra tutti i valori delle variabili dell'intestazione personalizzata TLS reciproca che vengono sempre passati al backend (tipo di richiesta "Pass request to backend"). Le intestazioni personalizzate vengono passate al backend quando il valore 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 con il certificato client). |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
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 contenere da 2048 a 4096 bit. |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Un client o un certificato intermedio utilizza una curva ellittica non supportata. Non viene eseguita alcuna convalida. Le curve ellittiche valide sono P-256 e P-384. |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Un client o un certificato intermedio utilizza un algoritmo non RSA e non ECDSA. Non viene eseguita alcuna convalida. |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
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. Non viene eseguita alcuna convalida. |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Un certificato intermedio fornito per la convalida aveva più di 10 vincoli di nomi. |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Il certificato client non contiene
|
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Il limite di tempo viene superato durante il tentativo di convalidare la catena di certificati. | ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
client_cert_sha256_fingerprint: <cert hash>
|
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). |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Hai configurato mTLS senza configurare una
risorsa Impossibile eseguire la convalida, ma l'hash del certificato viene inoltrato al backend. |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Nessun certificato client. | ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Il certificato client non supera la convalida per la risorsa TrustConfig .
|
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Il certificato client supera la convalida dello strumento di verifica dei certificati. | Non applicabile |
client_cert_error: <empty>
|
Errori registrati per le connessioni chiuse
I seguenti errori generano una connessione client chiusa quando clientValidationMode
è impostato su ALLOW_INVALID_OR_MISSING_CLIENT_CERT
o REJECT_INVALID
.
Per ulteriori informazioni, consulta i 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 riesce a trovare la corrispondenza della firma durante l'handshake. | Termina handshake SSL | Nessuna |
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 trovata.
|
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 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, consulta
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 con il certificato client). |
client_cert_chain_exceeded_limit
|
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 contenere 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 algoritmo non RSA o non ECDSA. Non viene eseguita alcuna convalida. |
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. Non viene eseguita alcuna convalida. |
client_cert_pki_too_large
|
Un certificato intermedio fornito per la convalida aveva più di 10 vincoli di nomi. |
|
Il certificato client non ha un'estensione |
|
Il limite di tempo viene superato durante il tentativo di convalidare la 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 dei certificati client
Durante la convalida di un certificato client, il bilanciatore del carico esegue questi passaggi:
- 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 vengono registrate informazioni.
- Se la configurazione include un
TrustAnchor
, il bilanciatore del carico verifica una catena di attendibilità tra il certificato client e l'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 del soggetto nei certificati principali corrisponde al campo del problema nei certificati secondari.
- L'identificatore della chiave del soggetto (SKID) del certificato padre corrisponde all'identificatore della chiave di autorizzazione (AKID) nel certificato figlio.
- La SAN di un certificato figlio non viola il campo
NameConstraints
nel certificato padre.
- 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.
- Se la verifica della catena di attendibilità non va a buon fine:
- Se
ClientValidationMode
è impostato suREJECT_INVALID
, il bilanciatore del carico termina la connessione e registra il motivo in Cloud Logging. - Se
ClientValidationMode
è impostato suALLOW_INVALID_OR_MISSING_CLIENT_CERTIFICATE
, il bilanciatore del carico inoltra comunque la richiesta al backend. Puoi utilizzare le intestazioni delle richieste personalizzate per indicare al backend che la convalida non è riuscita, nonché 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 alle intestazioni delle richieste personalizzate, puoi configurare campi facoltativi mTLS per verificare il motivo dell'errore.
- Se
Requisiti dei certificati
- I certificati devono utilizzare crittografie RSA o ECDSA.
- Per i certificati client (leaf):
- L'estensione Vincoli di base non deve contenere
CA=true
. - L'estensione Extended Key Usage deve contenere
clientAuth
. - L'estensione Utilizzo esteso della chiave non deve contenere i campi
codeSigning
,timeStamping
oOCSPSigning
. - Il certificato non deve essere scaduto.
- Il certificato client non può essere un certificato autofirmato.
- L'estensione Vincoli di base non deve contenere
- Per i certificati radice e intermedi:
- L'estensione Vincoli di base
deve contenere
CA=true
. - L'estensione Utilizzo della chiave deve essere impostata su
keyCertSign
. - L'estensione Utilizzo esteso della chiave
deve contenere il campo
clientAuth
. - Il certificato non deve essere scaduto.
- L'estensione Vincoli di base
deve contenere
Limitazioni
Il bilanciatore del carico non esegue i controlli delle revoche 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 aggiunti a una lista consentita. Tutti i certificati intermedi non devono avere più di tre certificati che condividono le stesse informazioni di chiave pubblica del soggetto e 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 i certificati intermedi possono essere valutati quando si tenta 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 contenere da 2048 a 4096 bit. Per maggiori 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 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 di nome. Per saperne di più, consulta Quote e limiti.
I certificati client autofirmati sono sempre considerati non validi dal bilanciatore del carico.
Passaggi successivi
Variabili che possono essere visualizzate nel valore dell'intestazione
Configura TLS reciproco per un bilanciatore del carico delle applicazioni esterno globale
Configura TLS reciproco per un bilanciatore del carico delle applicazioni classico
Configura TLS reciproco per un bilanciatore del carico delle applicazioni interno
Configura TLS reciproco per un bilanciatore del carico delle applicazioni esterno regionale