Comment résoudre les erreurs de négociation SSL/TLS du client lorsque je me connecte à un Application Load Balancer qui utilise le protocole HTTPS ?

Lecture de 10 minute(s)
0

Je souhaite résoudre les erreurs de négociation SSL/TLS (Secure Socket Layer/Transport Layer Security) du client qui s’affichent lorsque j'utilise le protocole HTTPS pour me connecter à l'Application Load Balancer.

Brève description

Une erreur de négociation se produit lorsque le client TLS ne parvient pas à établir une session SSL avec l'Application Load Balancer. Cette erreur s'affiche car la politique de sécurité de l’équilibreur de charge ne prend pas en charge le protocole de sécurité ou la suite de chiffrement du client qui se connecte. L'erreur entraîne l'incrémentation de la métrique clientTLSnegotiationErrorCount.

Pour établir une connexion sécurisée, assurez-vous que le handshake SSL/TLS initial de votre client répond aux exigences suivantes :

  • Correspond à une ou plusieurs suites de chiffrement prises en charge par la politique de sécurité de l’Application Load Balancer.
  • Utilise une version du protocole SSL/TLS spécifiée dans la politique de sécurité de l’Application Load Balancer.

Résolution

Consultez les journaux de connexion de l’Application Load Balancer durant la période au cours de laquelle la métrique ClientTLSNegotiationErrorCount a été incrémentée. Les journaux indiquent les protocoles de sécurité et les chiffrements que le client a présentés à l'Application Load Balancer.
Remarque : Assurez-vous d'avoir activé vos journaux de connexion. Ou, si vous avez accès au client qui ne parvient pas à se connecter, effectuez une capture de paquets, puis examinez le paquet Client Hello. Pour plus d’informations sur les tests de capture de paquets, consultez la section Comment résoudre les problèmes de performances réseau entre les instances EC2 Linux ou Windows d'un VPC et un hôte sur site via la passerelle Internet ?

Déterminez les protocoles et les chiffrements qui sont pris en charge par la politique de sécurité de votre équilibreur de charge

Les Application Load Balancers ne prennent pas en charge les politiques de sécurité personnalisées. Pour plus d'informations sur les politiques de sécurité, y compris la politique de sécurité par défaut, consultez la section Politiques de sécurité de l’Application Load Balancer.

Vous pouvez consulter les politiques de sécurité associées à votre Application Load Balancer de deux manières :

  • En utilisant la console Amazon Elastic Compute Cloud (Amazon EC2).
  • En utilisant l'interface de ligne de commande AWS (AWS CLI) et la commande describe-listeners.

Remarque : La section AWS CLI part du principe que votre configuration répond aux conditions préalables suivantes :

À partir de la console Amazon EC2

Pour consulter la politique de sécurité, procédez comme suit :

  1. Ouvrez la console Amazon EC2.
  2. Dans le volet de navigation, sous Équilibrage de charge, sélectionnez Équilibreurs de charge.
  3. Sélectionnez l'Application Load Balancer souhaité. Puis, sélectionnez Écouteurs et règles.
  4. Dans le tableau, développez la colonne Politique de sécurité. Vérifiez les protocoles de sécurité et les suites de chiffrement pris en charge.

À partir de l’AWS CLI

Pour consulter la politique de sécurité, exécutez les commandes suivantes :

  1. Pour localiser l’Amazon Resource Name (ARN) de l'Application Load Balancer, exécutez la commande describe-load-balancers :

    aws elbv2 describe-load-balancers --region your_region | grep 'LoadBalancerName\|LoadBalancerArn'
  2. Pour localiser la politique de sécurité de l'Application Load Balancer, exécutez la commande describe-listeners :

    aws elbv2 describe-listeners --region your_region --load-balancer-arn your_loadbalancer_arn | grep 'SslPolicy'

    Remarque : Remplacez your_region par la région qui contient vos ressources. Remplacez your_loadbalancer_arn par l’ARN de votre équilibreur de charge.

Utiliser les journaux de connexion pour déterminer les protocoles de sécurité et les suites de chiffrement présentés par le client

Utilisez la console Amazon Simple Storage Service (Amazon S3) pour décompresser les journaux de connexion et afficher les informations qu'ils contiennent. Puis, téléchargez les fichiers pour un examen plus approfondi.
Remarque : Utilisez les outils bash zcat, awk et sed pour traiter les journaux de connexion.

L'outil bash awk analyse les valeurs de champs suivantes dans le journal :

($1) timestamp
($2) client_ip  
($3) client_port  
($4) listener_port
($5) tls_protocol
($6) tls_cipher
($7) tls_handshake_latency
($8) leaf_client_cert_subject
($9) leaf_client_cert_validity
($10) leaf_client_cert_serial_number
($11) tls_verify_status

Les sections suivantes décrivent les différentes méthodes que vous pouvez utiliser pour traiter les journaux de connexion.

Identifier la période contenue dans les journaux de connexion
Remarque : Les valeurs de temps consignées sont exprimées en UTC.

zcat *.log.gz | gawk '{print substr($1,0,16)}'| sort | uniq | sed '1p;$!d'

2024-03-30T18:14
2024-03-30T19:04

Identifier ou comparer les erreurs présentes dans les journaux de connexion
Remarque : Le champ tls_verify_status est principalement destiné aux connexions mTLS. Toutefois, le champ peut être utilisé pour indiquer l'échec d'une tentative de connexion TLS en raison d'une incompatibilité entre un ou plusieurs protocoles ou suites de chiffrement.

zcat *.log.gz | gawk '{print $11}' | sort | uniq -c | sort -r

1354 Failed:UnmappedConnectionError
 176 Success

Identifier les clients uniques qui présentent le plus grand nombre d'erreurs de connexion

zcat *.log.gz | gawk '$11 ~ "Failed"' | gawk '{print $2}' | sort | uniq -c | sort -r

440 a.a.a.a
436 b.b.b.b
386 c.c.c.c
 90 d.d.d.d
  1 e.e.e.e
  1 f.f.f.f

**Identifier la suite de chiffrement et le protocole utilisés par le client **

Noter le protocole, la suite de chiffrement et l'erreur qui en résulte.

zcat *.log.gz | gawk '($11 ~ "Failed" && $6 != "-")' | gawk '{print $2,$5,$6,$11}' | sort | uniq -c | sort -r

40 a.a.a.a TLSv1.2 ECDHE-RSA-AES256-SHA Failed:UnmappedConnectionError
30 b.b.b.b TLSv1.2 ECDHE-RSA-AES256-SHA Failed:UnmappedConnectionError
15 c.c.c.c TLSv1.2 ECDHE-RSA-AES256-SHA Failed:UnmappedConnectionError
 2 d.d.d.d TLSv1.2 ECDHE-RSA-AES256-SHA Failed:UnmappedConnectionError
 2 e.e.e.e TLSv1.2 ECDHE-RSA-AES256-SHA Failed:UnmappedConnectionError
 1 f.f.f.f TLSv1.2 ECDHE-RSA-AES256-SHA Failed:UnmappedConnectionError

Utiliser des captures de paquets pour déterminer le protocole de sécurité et la suite de chiffrement présentés par le client

Après avoir effectué une capture de paquets sur le client qui a établi la connexion, examinez le paquet Client Hello qui est envoyé à l'Application Load Balancer.

Utiliser Tshark pour la capture de paquets
Remarque : Vous pouvez également utiliser Wireshark (GUI) au lieu de Tshark (Terminal) pour analyser la capture de paquets.

L'exemple Tshark utilise les informations suivantes :

  • Adresse IP du client : 192.168.150.100
  • Adresse IP de l'Application Load Balancer : 10.10.10.10
  • Port de destination : 443

Procédez comme suit :
Remarque : Remplacez your_file.pcapng par le nom de votre fichier.

  1. Pour trouver tous les paquets de la conversation entre le client et les adresses IP de l'Application Load Balancer, exécutez la commande suivante :

    tshark -r your_file.pcapng '(ip.addr == 10.10.10.10 && tcp.port == 443)'
    
    69   1.428028 192.168.150.100 → 10.10.10.10 TCP 66 61747 → 443 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM=1
    70   1.481769 10.10.10.10 → 192.168.150.100 TCP 66 443 → 61747 [SYN, ACK] Seq=0 Ack=1 Win=26883 Len=0 MSS=1460 SACK_PERM=1 WS=256
    71   1.481905 192.168.150.100 → 10.10.10.10 TCP 54 61747 → 443 [ACK] Seq=1 Ack=1 Win=131328 Len=0
    72   1.490709 192.168.150.100 → 10.10.10.10 TLSv1 244 Client Hello
    74   1.541926 10.10.10.10 → 192.168.150.100 TCP 56 443 → 61747 [ACK] Seq=1 Ack=191 Win=28160 Len=0
    75   1.541926 10.10.10.10 → 192.168.150.100 TCP 56 [TCP Dup ACK 74#1] 443 → 61747 [ACK] Seq=1 Ack=191 Win=28160 Len=0
    76   1.541926 10.10.10.10 → 192.168.150.100 TLSv1.2 61 Alert (Level: Warning, Description: Close Notify)
    77   1.541926 10.10.10.10 → 192.168.150.100 TCP 56 443 → 61747 [FIN, ACK] Seq=8 Ack=191 Win=28160 Len=0
    78   1.542087 192.168.150.100 → 10.10.10.10 TCP 54 61747 → 443 [ACK] Seq=191 Ack=9 Win=131328 Len=0
    79   1.543501 192.168.150.100 → 10.10.10.10 TCP 54 61747 → 443 [FIN, ACK] Seq=191 Ack=9 Win=131328 Len=0
    95   1.614454 10.10.10.10 → 192.168.150.100 TCP 56 443 → 61747 [ACK] Seq=9 Ack=192 Win=28160 Len

    La sortie précédente affiche les informations suivantes :

    Le client (192.168.15.100) établit une connexion avec l'Application Load Balancer (10.10.10.10).
    Peu de temps après le handshake TCP initial (SYN, SYN-ACK, ACK), Client Hello est suivi d'un ACK provenant de l'Application Load Balancer (paquet 72).
    L'Application Load Balancer émet ensuite une notification de fermeture pour indiquer que la session doit être fermée (paquet 76).

  2. Localisez le protocole SSL/TLS et les suites de chiffrement utilisés dans les paquets Client Hello. Ces paquets sont utilisés dans la conversation entre l'adresse IP du client (192.168.15.100) et l'adresse IP de l'équilibreur de charge (10.10.10.10).

    Pour déplacer le paquet Client Hello (tls.handshake.type == 1) pour la conversation vers son propre fichier PCAP, exécutez la commande suivante :

    tshark -r your_file.pcapng -O -P -w ALB_Sessions.pcap '(ip.addr == 10.10.10.10 && tcp.port == 443) && (tls.handshake.type==1)'
  3. Pour déplacer les suites de chiffrement du fichier ALB_Sessions.pcap vers un fichier texte, exécutez la commande suivante :

    tshark -r ALB_Sessions.pcap -Y ssl.handshake.ciphersuites -Vx > TLS_outfile.txt
  4. Pour concaténer le fichier et utiliser grep pour rechercher le champ Version :, exécutez la commande suivante. Vérifiez la version TLS utilisée dans le paquet Client Hello.

    cat TLS_outfile.txt | grep "Version:"
    
    0100 .... = Version: 4
        Version: TLS 1.0 (0x0301)
            Version: TLS 1.2 (0x0303)
  5. Pour concaténer le fichier et utiliser grep pour rechercher le champ****Cipher Suite (Suite de chiffrement) :, exécutez la commande suivante. Vérifiez les suites de chiffrement utilisées dans le paquet Client Hello.

    cat TLS_outfile.txt | grep "Cipher Suite:"
    
    Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)
    Cipher Suite: TLS_EMPTY_RENEGOTIATION_INFO_SCSV (0x00ff)
  6. Pour comparer les valeurs hexadécimales au fichier d'origine, exécutez la commande suivante :

    tshark -r your_file.pcapng -T fields -Y '(tls.handshake.type==1 && ip.addr == 10.10.10.10)' -e tls.handshake.version -e tls.handshake.ciphersuite
    
    0x0303  0xc014,0x00ff

    La commande lit le fichier file.pcapng et l'analyse pour y rechercher le paquet Client Hello qui a été envoyé à l'adresse IP de l'Application Load Balancer (10.10.10.10). La commande imprime ensuite tls.handshake.version et tls.handshake.ciphersuites sous forme de colonnes individuelles. Comparez la sortie pour confirmer qu'il s'agit des valeurs hexadécimales qui apparaissaient dans le fichier TLS_outfile.txt.

Analyser la capture de paquets

Dans cet exemple, la seule suite de chiffrement présentée par le client était TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA. Ces informations suivent le schéma de dénomination IANA, mais l'Application Load Balancer utilise le schéma de dénomination OpenSSL.
Remarque : Utilisez ce tableau pour traduire l'IANA en schéma de dénomination OpenSSL. TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA est égal à ECDHE-RSA-AES256-SHA.

Identifier la politique de sécurité de votre équilibreur de charge

Pour tenir compte des protocoles ou chiffrements pris en charge par le client, effectuez les actions suivantes :

  1. Ouvrez la console Amazon EC2.
  2. Dans le volet de navigation, sélectionnez Équilibreurs de charge.
  3. Sélectionnez l'équilibreur de charge.
  4. Dans l'onglet Écouteurs et règles, sélectionnez le texte dans la colonne Protocol:Port pour ouvrir la page de détails de l'écouteur.
  5. Sur la page Détails, sélectionnez Actions, puis Modifier l’écouteur.
  6. Dans la section Paramètres d'écouteur sécurisé, pour Politique de sécurité, choisissez une nouvelle politique de sécurité.
  7. Sélectionnez Enregistrer les modifications.

Mettre à jour les protocoles de sécurité et les suites de chiffrement pris en charge par le client

Pour mettre à jour les protocoles de sécurité et les suites de chiffrement pris en charge par le client, consultez la documentation du système d'exploitation de l’appareil qui envoie la demande.

Informations connexes

Qu'est-ce qu'un certificat SSL/TLS ?

Comment résoudre les erreurs de connexion qui s’affichent avec les Application Load Balancers via HTTP ?

Comment identifier et résoudre les problèmes de connexion client lorsque j'utilise mTLS avec l'Application Load Balancer ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 6 mois