Direkt zum Inhalt

Wie identifiziere und behebe ich Probleme mit der Client-Verbindung, wenn ich mTLS mit einem Application Load Balancer verwende?

Lesedauer: 8 Minute
0

Ich möchte Probleme mit der Client-Verbindung beheben, die auftreten, wenn ich Mutual Transport Layer Security (mTLS) mit einem Application Load Balancer verwende.

Kurzbeschreibung

Um Probleme mit der Client-Verbindung zu untersuchen, musst du die Verbindungsprotokolle für den Application Load Balancer aktivieren. Verwende die Verbindungsprotokolle, um Anforderungsmuster zu analysieren und Probleme zu beheben.

Weitere Informationen zu den Informationen, die die Verbindungsprotokolle enthalten, findest du unter Überwachen des Application Load Balancers.

Lösung

Die Verbindungsprotokolle des Application Load Balancers identifizieren die Fehler, die beim Versuch des Clients, eine Verbindung zum Application Load Balancer herzustellen, aufgetreten sind.
Hinweis: Informationen zur Verarbeitung der Fehler findest du unter Verarbeiten von Verbindungsprotokolldateien.

Verbindungsprotokolle filtern, um bestimmte Fehler anzuzeigen

Filtere Verbindungsprotokolle nach der IP-Adresse des Clients, um nach Fehlern zu suchen.

  1. Führe den folgenden Befehl aus, um nach fehlgeschlagenen Anforderungen zu suchen:

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

    Hinweis: Ersetze a.a.a.a durch die Client-IP-Adresse, die du auf Fehler untersuchst.

    Beispielausgabe:

    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. Rufe den Fehlercode aus dem Feld tls_verify_status ab.

  3. Berufe dich auf die Fehlerursachencodes, um den Fehler zu identifizieren.

  4. Verwende die folgenden Abschnitte, um den spezifischen Fehler zu beheben.

Fehler: „ClientCertCrlHit“

Dieser Fehler tritt auf, wenn das Client-Zertifikat in der Zertifikatsperrliste (CRL) enthalten ist, die vom mTLS-Listener verwendet wird.

  1. Überprüfe den Verbindungsprotokolleintrag, der das Feld leaf_client_cert_subject anzeigt.
  2. Lade die CRL-Datei aus dem Amazon Simple Storage Service (Amazon S3)-Bucket herunter. Auf die CRL-Datei wird vom Amazon Elastic Compute Cloud (Amazon EC2)-Vertrauensspeicher verwiesen.
  3. Überprüfe die CRL für das Client-Zertifikat, das im Protokolleintrag identifiziert wurde.
  4. Erneuere das Client-Zertifikat für das CA-Paket, das vom EC2-Vertrauensspeicher verwendet wird. Versuche erneut, die Verbindung mit dem neuen, nicht gesperrten Zertifikat herzustellen.

Fehler: „ClientCertCrlProcessingError“

Dieser Fehler tritt auf, wenn in der Zertifikatsperrliste (CRL) ein Verarbeitungsfehler auftritt.

Gehe wie folgt vor, um diesen Fehler zu beheben:

  1. Dokumentiere den Zeitstempel, der dem Fehler zugeordnet ist, in den Verbindungsprotokollen.
  2. Vergewissere dich, dass das Client-Zertifikat die definierten Anforderungen erfüllt.
  3. Stelle sicher, dass die konfigurierte CRL die definierten Kontingente nicht überschreitet.

Wenn der Fehler weiterhin auftritt, wende dich zur weiteren Überprüfung an den AWS Support. Stelle dem AWS-Supporttechniker die folgenden Informationen zur Verfügung:

  • Ausgabe des folgenden curl-Befehls:

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

    Hinweis: Ersetze HTTP_action durch deine HTTP-Aktion, client-cert.crt durch den Namen deiner Zertifikatsdatei und client_key.pem durch den Namen deiner Schlüsseldatei.

  • Client-Zertifikat (die Schlüsseldatei nicht angeben)

  • Verbindungsprotokolle für den Zeitraum, in dem das Problem aufgetreten ist

Fehler: „ClientCertExpired“

Dieser Fehler tritt auf, wenn das Client-Zertifikat abgelaufen ist.

Gehe wie folgt vor, um diesen Fehler zu beheben:

  1. Überprüfe die Gültigkeitsdauer des Zertifikats. Du findest diesen Wert im Feld leaf_client_cert_validity des Verbindungsprotokolls.

  2. Führe den folgenden Befehl für die Zertifikatsdatei aus:

    openssl x509 -in $i --text | grep -A 2 "Validity"
  3. Vergleiche das in Schritt 2 angegebene Datum „Nicht nach“ mit dem Feld timestamp (Zeitstempel) des Verbindungsprotokolls.
    Hinweis: Stelle sicher, dass das Client-Zertifikat nur vor dem Datum „Nicht nach“ verwendet wird.

  4. Um diesen Fehler zu beheben, verwende das CA-Zertifikatpaket, auf das der EC2-Vertrauensspeicher verweist, um das Client-Zertifikat erneut auszustellen.

Fehler: „ClientCertInvalid“

Dieser Fehler tritt auf, weil das Client-Zertifikat nicht gültig ist.

Gehe wie folgt vor, um diesen Fehler zu beheben:

  1. Stelle sicher, dass das Client-Zertifikat die Anforderungen erfüllt, sodass es mit mTLS und dem Application Load Balancer verwendet werden kann.
  2. Stelle das Zertifikat erneut aus.

Fehler: „ClientCertMaxChainDepthExceeded“

Dieser Fehler tritt auf, weil die Anzahl der Client-Zertifikate die maximale Verkettungstiefe überschritten hat.

Gehe wie folgt vor, um diesen Fehler zu beheben:

  1. Bestätige die Anzahl der Zertifikate im Client-Zertifikat, das dem Application Load Balancer präsentiert wird.

  2. Verwende eine der folgenden Optionen, um die Verkettungstiefe des Zertifikats zu überprüfen:

    Windows: Wähle das Zertifikat und dann Zertifizierungspfad aus. Zähle dann die Zertifikate.
    -oder-
    Führe den folgenden Befehl in Microsoft PowerShell aus und zähle die Zertifikate:

    certutil -dump client-cert.crt

    Hinweis: Ersetze client-cert.crt durch den Namen deiner Zertifikatsdatei. 

    Linux oder Unix: Führe den folgenden Befehl aus, um die Zertifikate zu zählen:

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

    Hinweis: Ersetze client-cert.crt durch den Namen deiner Zertifikatsdatei. 

  3. Reduziere die Anzahl der Zertifikate, die in der Kette des Client-Zertifikats vorhanden sind. Weitere Informationen zur maximal unterstützten Verkettungstiefe des Zertifikats findest du unter Kontingente für deinen Application Load Balancer.

Fehler: „ClientCertMaxSizeExceeded“

Dieser Fehler tritt auf, weil die maximale Größe des Client-Zertifikats überschritten wird.

Gehe wie folgt vor, um diesen Fehler zu beheben:

  1. Überprüfe die Größe des Client-Zertifikats:
    Windows Wähle die Datei aus. Wähle dann „Eigenschaften“ aus und zeige die Dateigröße an.
    Linux Führe du -h file aus.
    Hinweis: Ersetze file durch den Namen deiner Datei.
    Macintosh Wähle das Objekt im Finder aus, und drücke dann Command-I.
  2. Reduziere die Größe der Client-Zertifikatsdatei, die dem Application Load Balancer präsentiert wird. Weitere Informationen zur maximal unterstützten Größe des Zertifikats findest du unter Kontingente für deinen Application Load Balancer.

Fehler: „ClientCertNotYetValid“

Dieser Fehler tritt auf, weil das Client-Zertifikat noch nicht gültig ist.

Gehe wie folgt vor, um diesen Fehler zu beheben:

  1. Überprüfe die Gültigkeitsdauer des Zertifikats. Du findest diesen Wert im Feld leaf_client_cert_validity des Verbindungsprotokolls.

  2. Führe den folgenden Befehl für die Zertifikatsdatei aus:

    openssl x509 -in $i --text | grep -A 2 "Validity"
  3. Vergleiche das in Schritt 2 angegebene Datum „Nicht vor“ mit dem Feld „timestamp“ (Zeitstempel) des Verbindungsprotokolls.
    Hinweis: Stelle sicher, dass das Client-Zertifikat erst nach dem Datum „Nicht vor“ verwendet wird.

  4. Um diesen Fehler zu beheben, verwende das CA-Zertifikatpaket, auf das der EC2-Vertrauensspeicher verweist, um das Client-Zertifikat erneut auszustellen.

Fehler: „ClientCertPurposeInvalid“

Dieser Fehler tritt auf, weil im Client-Zertifikat die erweiterte Schlüsselverwendung (EKU) für die „TLS Web Client Authentication“ fehlt. 

Gehe wie folgt vor, um diesen Fehler zu beheben:

  1. Stelle ein neues Client-Zertifikat mit der clientAuth-EKU aus und versuche es erneut.

  2. Führe zur Überprüfung den folgenden Befehl aus:

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

    Hinweis: Ersetze client-cert.crt durch den Namen deiner Zertifikatsdatei.

  3. Suche in der Liste nach „TLS Web Client Authentication“.

Fehler: „ClientCertRejected“

Dieser Fehler tritt auf, weil das Client-Zertifikat bei der benutzerdefinierten Serverüberprüfung abgelehnt wird.

Gehe wie folgt vor, um diesen Fehler zu beheben:

  1. Überprüfe, ob der Listener des Application Load Balancers mTLS im Passthrough- oder Verify (Überprüfungs)-Modus verwendet.
    Im Passthrough-Modus verwendet der Load Balancer HTTP-Header, um das Client-Zertifikat und die Kette zur Überprüfung an das Ziel zu senden. Du erhältst diesen Fehler, wenn das Ziel das Client-Zertifikat ablehnt.
  2. Überprüfe die Anwendungsprotokolle auf dem Ziel, um die Ursache des Fehlers zu ermitteln.
  3. Es empfiehlt sich, den Verify (Überprüfungs)-Modus anstelle des Passthrough-Modus auf dem mTLS-Listener zu verwenden.

Fehler: „ClientCertTypeUnsupported“

Dieser Fehler tritt auf, weil Application Load Balancer mindestens eines der vom Client bereitgestellten Zertifikate in der Kette nicht unterstützt. Das Zertifikat verwendet eine X509-Zertifikatsversion, eine Schlüsselgröße, einen Schlüsselalgorithmus oder einen Signaturalgorithmus, der nicht unterstützt wird.

Gehe wie folgt vor, um diesen Fehler zu beheben:

  1. Führe den folgenden Befehl für die Client-Zertifikatskette aus:

    openssl x509 -in client-cert.crt —text

    Hinweis: Ersetze client-cert.crt durch den Namen deiner Zertifikatsdatei.

  2. Stelle sicher, dass alle Zertifikate in der Kette die Anforderungen für Zertifikate erfüllen.

Fehler: „ClientCertUntrusted“

Dieser Fehler tritt auf, weil das Client-Zertifikat nicht vertrauenswürdig ist.

Gehe wie folgt vor, um diesen Fehler zu beheben:

  1. Überprüfe, ob der Zertifikatsname im Feld leaf_client_cert_subject von der Zertifizierungsstelle (CA) ausgestellt wurde, die im konfigurierten EC2-Vertrauensspeicher vorhanden ist.
    Hinweis: Wenn der Aussteller des Client-Zertifikats nicht im CA-Zertifikatspaket enthalten ist, das vom EC2-Vertrauensspeicher verwendet wird, funktioniert mTLS nicht.

  2. Führe den folgenden Befehl für das Client-Zertifikat aus:

    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: /'"

    Hinweis: Ersetze client-cert.crt durch den Namen deiner Zertifikatsdatei.

  3. Um die im Paket enthaltenen Subjekte abzurufen, führe den folgenden Befehl für das CA-Zertifikatspaket aus, das vom EC2-Vertrauensspeicher verwendet wird:

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

    Hinweis: Ersetze client-cert.crt durch den Namen deiner Zertifikatspaketdatei.

Fehler: „UnmappedConnectionError“

Dieser Fehler tritt auf, wenn die Laufzeitverbindung nicht zugeordnet werden kann.

Wende dich für weitere Informationen an den AWS Support. Stelle dem AWS-Supporttechniker die folgenden Informationen zur Verfügung:

  • Ausgabe des folgenden curl-Befehls:

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

    Hinweis: Ersetze HTTP_action durch den Namen deiner HTTP-Aktion, client-cert.crt durch den Namen deiner Zertifikatsdatei und client_key.pem durch den Namen deiner Schlüsseldatei.

  • Client-Zertifikat (die Schlüsseldatei nicht angeben)

  • Verbindungsprotokolle für den Zeitraum, in dem das Problem aufgetreten ist

Ähnliche Informationen

Wie verwende ich Amazon Athena, um meine Application-Load-Balancer-Verbindungsprotokolle abzufragen?

Einführung von mTLS für Application Load Balancer

Wie untersuche ich Probleme im Zusammenhang mit dem CA-Paket für mTLS-Listener auf dem Application Load Balancer?