Expressions de stratégie avancées : analyse SSL
Il existe des expressions de stratégie avancées pour analyser les certificats SSL et les messages Hello du client SSL.
Analyse des certificats SSL
Vous pouvez utiliser des expressions de stratégie avancées pour évaluer les certificats clients SSL (Secure Sockets Layer) X.509. Un certificat client est un document électronique qui peut être utilisé pour authentifier l’identité d’un utilisateur. Un certificat client contient (au minimum) des informations de version, un numéro de série, un identifiant d’algorithme de signature, un nom d’émetteur, une période de validité, un nom de sujet (utilisateur), une clé publique et des signatures.
Vous pouvez examiner à la fois les connexions SSL et les données des certificats clients. Par exemple, vous pouvez envoyer des demandes SSL qui utilisent des chiffrements de faible puissance à une batterie de serveurs virtuels d’équilibrage de charge particulière. La commande suivante est un exemple de stratégie de commutation de contenu qui analyse la force de chiffrement dans une demande et fait correspondre des forces de chiffrement inférieures ou égales à 40 :
add cs policy p1 -rule "client.ssl.cipher_bits.le(40)"
Dans un autre exemple, vous pouvez configurer une stratégie qui détermine si une demande contient un certificat client :
add cs policy p2 -rule "client.ssl.client_cert exists"
Vous pouvez également configurer une stratégie qui examine des informations spécifiques d’un certificat client. Par exemple, la stratégie suivante vérifie que le certificat a un ou plusieurs jours avant son expiration :
add cs policy p2 -rule "client.ssl.client_cert exists && client.ssl.client_cert.days_to_expire.ge(1)"
Exemple d’utilisation des empreintes digitales JA3 :
add ssl policy ja3_pol -rule "CLIENT.SSL.JA3_FINGERPRINT.EQ(bb4c15a90e93a25ddc16274395bce4c6)" -action reset
Ou, un exemple d’utilisation des empreintes digitales JA3 avec patset :
add policy patset pat1
bind policy patset pat1 bb4c15a90e93a25ddc16274395bce4c6 -index 1
bind policy patset pat1 cd3c15a90e93a25ddc16274395bce6b4 -index 2
add ssl policy ssl_ja3_pol -rule CLIENT.SSL.JA3_FINGERPRINT.contains_any("pat1") -action reset
<!--NeedCopy-->
Remarque
Pour plus d’informations sur l’analyse des dates et des heures dans un certificat, voir Format des dates et heures dans une expression et des expressions pour les dates de certificat SSL.
Préfixes pour les données SSL et de certificat basées sur le texte
Le tableau suivant décrit les préfixes d’expression qui identifient les éléments textuels dans les transactions SSL et les certificats clients.
Tableau 1 Préfixes qui renvoient du texte ou des valeurs booléennes pour les données de certificat SSL et client
Préfixe | Description |
---|---|
CLIENT.SSL.CLIENT_CERT | Renvoie le certificat client SSL dans la transaction SSL en cours. |
CLIENT.SSL.CLIENT_CERT.TO_PEM | Renvoie le certificat client SSL au format binaire. |
CLIENT.SSL.CIPHER_EXPORTABLE | Renvoie une valeur booléenne TRUE si le chiffrement cryptographique SSL est exportable. |
CLIENT.SSL.CIPHER_NAME | Renvoie le nom du chiffrement SSL s’il est invoqué à partir d’une connexion SSL, et une chaîne NULL s’il est invoqué à partir d’une connexion non SSL. |
CLIENT.SSL.IS_SSL | Renvoie une valeur booléenne TRUE si la connexion en cours est basée sur SSL. |
CLIENT.SSL.JA3_FINGERPRINT | Renvoie une valeur booléenne TRUE si l’empreinte digitale JA3 configurée correspond à l’empreinte digitale JA3 dans le message Hello du client. Remarque : Cette expression est disponible dans les versions 13.1 build 12.x et ultérieures. |
Préfixes pour les données numériques dans les certificats SSL
Le tableau suivant décrit les préfixes qui évaluent des données numériques autres que les dates dans les certificats SSL. Ces préfixes peuvent être utilisés avec les opérations décrites dans Opérations de base sur les préfixes d’expression et Opérations composées pour les nombres.
Tableau 2. Préfixes qui évaluent les données numériques autres que les dates dans les certificats SSL
Préfixe | Description |
---|---|
CLIENT.SSL.CLIENT_CERT.DAYS_TO_EXPIRE | Renvoie le nombre de jours pendant lesquels le certificat est valide ou renvoie -1 pour les certificats expirés. |
CLIENT.SSL.CLIENT_CERT.PK_SIZE | Renvoie la taille de la clé publique utilisée dans le certificat. |
CLIENT.SSL.CLIENT_CERT.VERSION | Renvoie le numéro de version du certificat. Si la connexion n’est pas basée sur SSL, renvoie zéro (0). |
CLIENT.SSL.CIPHER_BITS | Renvoie le nombre de bits de la clé cryptographique. Renvoie 0 si la connexion n’est pas basée sur SSL. |
CLIENT.SSL.VERSION | Renvoie un nombre qui représente la version du protocole SSL, comme suit : 0. La transaction n’est pas basée sur SSL : 0x002. La transaction est SSLv2 : 0x300. La transaction est SSLv3 : 0x301. La transaction est TLSv1 : 0x302. La transaction est TLS 1.1 : 0x303. La transaction est TLS 1.2 : 0x304. La transaction est TLS 1.3. |
Remarque
Pour les expressions liées aux dates d’expiration d’un certificat, voir Expressions pour les dates de certificat SSL.
Expressions pour les certificats SSL
Vous pouvez analyser les certificats SSL en configurant des expressions qui utilisent le préfixe suivant :
CLIENT.SSL.CLIENT_CERT
Cette section décrit les expressions que vous pouvez configurer pour les certificats, à l’exception des expressions qui examinent l’expiration du certificat. Les opérations temporelles sont décrites dans Expressions de stratégie avancées : utilisation des dates, des heures et des nombres.
Le tableau suivant décrit les opérations que vous pouvez spécifier pour le préfixe CLIENT.SSL.CLIENT_CERT.
Tableau 3. Opérations pouvant être spécifiées avec le préfixe CLIENT.SSL.CLIENT_CERT
Opération du certificat SSL | Description |
---|---|
<certificate>.EXISTS |
Renvoie une valeur booléenne TRUE si le client possède un certificat SSL. |
<certificate>.ISSUER |
Renvoie le nom distinctif (DN) de l’émetteur dans le certificat sous forme de liste nom-valeur. Un signe égal (« = ») est le délimiteur du nom et de la valeur, et la barre oblique («/») est le délimiteur qui sépare les paires nom-valeur. Voici un exemple du DN renvoyé : /C=US/O=myCompany/OU=www.mycompany.com/CN=www.mycompany.com/emailAddress=myuserid@mycompany.com
|
<certificate>.ISSUER. IGNORE_EMPTY_ELEMENTS |
Renvoie l’émetteur et ignore les éléments vides d’une liste nom-valeur. Par exemple, considérez ce qui suit : Cert-Issuer: /c=in/st=kar//l=bangelore //o=mycompany/ou=sales/ /emailAddress=myuserid@mycompany.com . L’action Réécriture suivante renvoie un nombre de 6 en fonction de la définition précédente de l’émetteur : sh rewrite action insert_ssl_header Name: insert_ssl Operation: insert_http_header Target:Cert-Issuer Value:CLIENT.SSL.CLIENT_CERT.ISSUER.COUNT . Toutefois, si vous modifiez la valeur suivante, le nombre retourné est 9 :CLIENT.SSL.CLIENT_CERT.ISSUER.IGNORE_EMPTY_ELEMENTS.COUNT
|
<certificate>. SERIALNUMBER |
Renvoie le numéro de série du certificat sous la forme d’une chaîne hexadécimale en majuscule, sans zéro en début de chaîne. Par exemple, si le numéro de série du certificat est 04daa1e44bd2e7769638a0058b4964bd, l’expression suivante permet de faire correspondre le numéro de série CLIENT.SSL.CLIENT_CERT.SERIALNUMBER.SET_TEXT_MODE(IGNORECASE).CONTAINS(\"4daa1e44bd2e7769638a0058b4964bd\")
|
Bonjour du client Parse SSL
Vous pouvez analyser le message Hello du client SSL en configurant des expressions qui utilisent le préfixe suivant :
Préfixe | Description |
---|---|
CLIENT.SSL.CLIENT_HELLO.CIPHERS.HAS_HEXCODE | Correspond au code hexadécimal fourni dans l’expression avec les codes hexadécimaux des suites de chiffrement reçues dans le message Hello du client. |
CLIENT.SSL.CLIENT_HELLO.CLIENT_VERSION | Version reçue dans l’en-tête du message Hello du client. |
CLIENT.SSL.CLIENT_HELLO.IS_RENEGOTIATE | Renvoie la valeur true si un client ou un serveur lance une renégociation de session. |
CLIENT.SSL.CLIENT_HELLO.IS_REUSE | Renvoie true si l’appliance réutilise la session SSL en fonction de l’ID de session différent de zéro reçu dans le message client-Hello. |
CLIENT.SSL.CLIENT_HELLO.IS_SCSV | Renvoie true si la capacité SCSV (Signaling Cipher Suite Value) est annoncée dans le message Hello du client. Le code hexadécimal pour SCSV de secours est 0x5600. |
CLIENT.SSL.CLIENT_HELLO.IS_SESSION_TICKET | Renvoie la valeur true si une extension de ticket de session dont la longueur est différente de zéro est annoncée dans le message client-hello. |
CLIENT.SSL.CLIENT_HELLO.LENGTH | Longueur reçue dans l’en-tête du message Hello du client. |
CLIENT.SSL.CLIENT_HELLO.SNI | Renvoie le nom du serveur reçu dans l’extension Nom du serveur du message Hello du client. |
CLIENT.SSL.CLIENT_HELLO.ALPN.HAS_NEXTPROTOCOL | Renvoie true si le protocole d’application de l’extension ALPN reçu dans le message Hello du client correspond au protocole fourni dans l’expression. |
Ces expressions peuvent être utilisées au niveau du point de liaison CLIENTHELLO_REQ. Pour plus d’informations, voir Liaison de stratégie SSL.