Salta al contenuto

Come posso identificare e risolvere i problemi di connessione del client quando utilizzo mTLS con un Application Load Balancer?

9 minuti di lettura
0

Desidero risolvere i problemi di connessione del client che si verificano quando utilizzo il protocollo Transport Layer Security (mTLS) reciproco con un Application Load Balancer.

Breve descrizione

Per esaminare i problemi di connessione del client, devi attivare i log delle connessioni dell'Application Load Balancer. Utilizza i log delle connessioni per analizzare i modelli di richiesta e risolvere i problemi.

Per ulteriori dettagli sulle informazioni fornite dai log delle connessioni, consulta Monitoraggio degli Application Load Balancer.

Risoluzione

I log delle connessioni di un Application Load Balancer identificano gli errori che si sono verificati quando il client ha tentato di connettersi all'Application Load Balancer.
Nota: per informazioni sulle modalità di elaborazione degli errori, consulta Elaborazione dei file di log delle connessioni.

Filtra i log delle connessioni per visualizzare errori specifici

Filtra i log delle connessioni in base all'indirizzo IP del client per individuare eventuali errori.

  1. Esegui questo comando per cercare le richieste non riuscite:

    zcat *.log.gz | awk '($2 == "a.a.a.a" && $11 ~ "Failed")' | awk '{print $1, $5, $6, $8, $9, $10, $11, $12}'

    Nota: sostituisci a.a.a.a con l'indirizzo IP del client che stai esaminando per verificare la presenza di errori.

    Esempio di output:

    2024-04-05T18:31:29.268987Z TLSv1.3 ECDHE-RSA-AES256-SHA "CN=client-expired.alb-mtls-example.com,OU=IT,O=Company LLC,L=City,ST=State,C=US" NotBefore=2024-01-02T19:17:20Z;NotAfter=2024-04-02T19:17:20Z 02 "Failed:ClientCertExpired"
    2024-04-05T19:29:35.128387Z TLSv1.3 ECDHE-RSA-AES256-SHA "CN=client-expired.alb-mtls-example.com,OU=IT,O=Company LLC,L=City,ST=State,C=US" NotBefore=2024-01-02T19:17:20Z;NotAfter=2024-04-02T19:17:20Z 02 "Failed:ClientCertExpired"
    2024-04-05T20:16:44.387952Z TLSv1.3 ECDHE-RSA-AES256-SHA "CN=client-expired.alb-mtls-example.com,OU=IT,O=Company LLC,L=City,ST=State,C=US" NotBefore=2024-01-02T19:17:20Z;NotAfter=2024-04-02T19:17:20Z 02 "Failed:ClientCertExpired"
  2. Ottieni il codice di errore dal campo tls_verify_status.

  3. Fai riferimento ai codici dei motivi di errore per identificare l'errore.

  4. Utilizza le sezioni seguenti per risolvere l'errore specifico.

Errore: "ClientCertCrlHit"

Questo errore si verifica quando il certificato client è presente nell'elenco di revoca dei certificati (CRL) utilizzato dal listener mTLS.

  1. Analizza la voce del log delle connessioni che mostra il campo leaf_client_cert_subject.
  2. Scarica il file CRL dal bucket Amazon Simple Storage Service (Amazon S3). Il file CRL è utilizzato dal trust store di Amazon Elastic Compute Cloud (Amazon EC2).
  3. Cerca nel file CRL il certificato client identificato nella voce del log.
  4. Rinnova il certificato client rispetto al pacchetto CA utilizzato dal trust store di EC2. Ritenta la connessione utilizzando il nuovo certificato non revocato.

Errore: "ClientCertCrlProcessingError"

Questo errore si verifica quando l'elenco di revoca dei certificati (CRL) presenta un errore di elaborazione.

Per risolverlo, procedi come segue:

  1. Documenta il timestamp associato all'errore nei log delle connessioni.
  2. Verificare che il certificato client soddisfi i requisiti definiti.
  3. Assicurati che il CRL configurato non superi le quote definite.

Se continui a ricevere l'errore, contatta il Supporto AWS per ulteriori verifiche. Fornisci al tecnico del Supporto AWS le seguenti informazioni:

  • Output del seguente comando curl:

     curl -vvv -X HTTP_action --cert client-cert.crt --key client_key.pem https://alb.fqdn.com -A credstest

    Nota: sostituisci HTTP_action con la tua azione HTTP, client-cert.crt con il nome del file del tuo certificato e client_key.pem con il nome del file della tua chiave.

  • Certificato client (non fornire il file della chiave)

  • Log delle connessioni per il periodo di tempo in cui si è verificato il problema

Errore: "ClientCertExpired"

Questo errore si verifica quando il certificato client è scaduto.

Per risolverlo, procedi come segue:

  1. Controlla il periodo di validità del certificato. Puoi trovare questa informazione nel campo leaf_client_cert_validity del log delle connessioni.

  2. Esegui questo comando sul file del certificato:

    openssl x509 -in $i --text | grep -A 2 "Validity"
  3. Verifica la data Not After (Non successiva) fornita nel passaggio 2 rispetto al campo timestamp del log delle connessioni.
    Nota: assicurati che il certificato client venga utilizzato solo prima della data indicata in Not After.

  4. Per risolvere l'errore, utilizza il pacchetto di certificati CA a cui fa riferimento il trust store di EC2 per riemettere il certificato client.

Errore: "ClientCertInvalid"

Questo errore si verifica perché il certificato client non è valido.

Per risolverlo, procedi come segue:

  1. Verifica che il certificato client soddisfi i requisiti in modo che possa essere utilizzato con mTLS e con l'Application Load Balancer.
  2. Riemetti il certificato.

Errore: "ClientCertMaxChainDepthExceeded"

Questo errore si verifica perché il numero di certificati client ha superato la profondità massima della catena.

Per risolverlo, procedi come segue:

  1. Verifica il numero di certificati nel certificato client presentato all'Application Load Balancer.

  2. Per esaminare la profondità della catena di certificati, utilizza una delle seguenti opzioni:

    Windows: scegli il certificato e seleziona Percorso certificato. Quindi conta i certificati.
    -oppure-
    Esegui questo comando in Microsoft PowerShell e conta i certificati:

    certutil -dump client-cert.crt

    Nota: sostituisci client-cert.crt con il nome del file del tuo certificato.

    Linux o Unix: per contare i certificati, esegui questo comando:

    openssl crl2pkcs7 -nocrl -certfile client-cert.crt | openssl pkcs7 -print_certs -noout | grep "subject" | wc -l

    Nota: sostituisci client-cert.crt con il nome del file del tuo certificato.

  3. Riduci il numero di certificati presenti nella catena di certificati client. Per ulteriori informazioni sulla profondità massima della catena di certificati supportata, consulta Quote per gli Application Load Balancer.

Errore: "ClientCertMaxSizeExceeded"

Questo errore si verifica perché viene superata la dimensione massima del certificato client.

Per risolverlo, procedi come segue:

  1. Verifica la dimensione del certificato client:
    **Windows ** Scegli il file. Quindi seleziona le proprietà e visualizza la dimensione del file.
    Linux Esegui du -h file.
    Nota: sostituisci file con il nome del tuo file.
    Macintosh Seleziona l'elemento nel Finder, quindi premi Command-I.
  2. Riduci la dimensione del file del certificato client presentato all'Application Load Balancer. Per ulteriori informazioni sulla dimensione massima del certificato supportata, consulta Quote per gli Application Load Balancer.

Errore: "ClientCertNotYetValid"

Questo errore si verifica perché il certificato client non è ancora valido.

Per risolverlo, procedi come segue:

  1. Controlla il periodo di validità del certificato. Puoi trovare questa informazione nel campo leaf_client_cert_validity del log delle connessioni.

  2. Esegui questo comando sul file del certificato:

    openssl x509 -in $i --text | grep -A 2 "Validity"
  3. Verifica la data Not Before (Non antecedente) fornita nel passaggio 2 rispetto al campo timestamp del log delle connessioni.
    Nota: assicurati che il certificato client venga utilizzato solo dopo la data Not Before.

  4. Per risolvere l'errore, utilizza il pacchetto di certificati CA a cui fa riferimento il trust store di EC2 per riemettere il certificato client.

Errore: "ClientCertPurposeInvalid"

Questo errore si verifica perché nel certificato client manca l'Extended Key Usage (EKU) "TLS Web Client Authentication".

Per risolverlo, procedi come segue:

  1. Emetti un nuovo certificato client con l'EKU ClientAuth e ritenta.

  2. Per convalidare, esegui questo comando:

    openssl x509 -in client-cert.crt --text | grep -A 1 "X509v3 Extended Key Usage:"

    Nota: sostituisci client-cert.crt con il nome del file del tuo certificato.

  3. Cerca "TLS Web Client Authentication" nell'elenco.

Errore: "ClientCertRejected"

Questo errore si verifica perché il certificato client viene rifiutato dalla convalida personalizzata del server.

Per risolverlo, procedi come segue:

  1. Verifica se il listener dell'Application Load Balancer utilizza mTLS in modalità Passthrough o Verify.
    In modalità Passthrough, il bilanciatore del carico utilizza le intestazioni HTTP per inviare il certificato client e la catena alla destinazione per la verifica. L'errore si verifica quando la destinazione rifiuta il certificato client.
  2. Esamina i log dell'applicazione sulla destinazione per determinare la causa dell'errore.
  3. Come procedura consigliata, utilizza la modalità Verify anziché la modalità Passthrough sul listener mTLS.

Errore: "ClientCertTypeUnsupported"

Questo errore si verifica perché l'Application Load Balancer non supporta almeno uno dei certificati della catena forniti dal client. Il certificato utilizza una versione del certificato X509, una dimensione della chiave, un algoritmo di chiave o un algoritmo di firma non supportato.

Per risolvere il problema, procedi come segue:

  1. Esegui questo comando sulla catena di certificati client:

    openssl x509 -in client-cert.crt —text

    Nota: sostituisci client-cert.crt con il nome del file del tuo certificato.

  2. Verifica che tutti i certificati della catena siano conformi ai requisiti per i certificati.

Errore: "ClientCertUntrusted"

Questo errore si verifica perché il certificato client non è attendibile.

Per risolvere il problema, procedi come segue:

  1. Verifica che il nome del certificato nel campo leaf_client_cert_subject sia stato emesso dall'autorità di certificazione (CA) presente nel trust store di EC2 configurato.
    Nota: se l'emittente del certificato client non è presente nel pacchetto di certificati CA utilizzato dal trust store di EC2, mTLS non funziona.

  2. Esegui questo comando sul certificato client:

    openssl crl2pkcs7 -nocrl -certfile client-cert.crt | openssl pkcs7 -print_certs -noout | grep -e 'issuer' -e 'subject' | sed -e 's/subject._CN = /Subject: /; s/issuer._CN = /Issuer: /'"

    Nota: sostituisci client-cert.crt con il nome del file del tuo certificato.

  3. Per recuperare i soggetti presenti all'interno del pacchetto, esegui questo comando sul pacchetto di certificati CA utilizzato dal trust store di EC2:

    openssl crl2pkcs7 -nocrl -certfile client-cert.crt | openssl pkcs7 -print_certs -noout | grep -e 'subject' | sed -e 's/subject.*CN = /Subject: /'

    Nota: sostituisci client-cert.crt con il nome del file del tuo pacchetto di certificati.

Errore: "UnmappedConnectionError"

Questo errore si verifica quando la connessione di runtime non viene mappata.

Contatta il Supporto AWS per ulteriori approfondimenti. Fornisci al tecnico del Supporto AWS le seguenti informazioni:

  • Output del seguente comando curl:

     curl -vvv -X HTTP_action --cert client-cert.crt --key client_key.pem https://alb.fqdn.com -A credstest

    Nota: sostituisci HTTP_action con il nome della tua azione HTTP, client-cert.crt con il nome del file del tuo certificato e client_key.pem con il nome del file della tua chiave.

  • Certificato client (non fornire il file della chiave)

  • Log delle connessioni per il periodo di tempo in cui si è verificato il problema

Informazioni correlate

Come posso utilizzare Athena per eseguire query sui log delle connessioni del mio Application Load Balancer?

Introducing mTLS for Application Load Balancer (mTLS per l'Application Load Balancer)

How do I investigate issues related to the CA bundle for mTLS listeners on the Application Load Balancer? (Come posso analizzare i problemi relativi al pacchetto CA per i listener mTLS dell'Application Load Balancer?)