Expresiones de directivas avanzadas: análisis de SSL
Existen expresiones de directivas avanzadas para analizar los certificados SSL y los mensajes de saludo del cliente SSL.
Analizar certificados SSL
Puede utilizar expresiones de directivas avanzadas para evaluar los certificados de cliente de Secure Sockets Layer (SSL) X.509. Un certificado de cliente es un documento electrónico que se puede utilizar para autenticar la identidad de un usuario. Un certificado de cliente contiene (como mínimo) información de versión, un número de serie, un identificador de algoritmo de firma, un nombre de emisor, un período de validez, un nombre de sujeto (usuario), una clave pública y firmas.
Puede examinar tanto las conexiones SSL como los datos en los certificados de cliente. Por ejemplo, es posible que quiera enviar solicitudes SSL que usen cifrados de baja intensidad a una comunidad de servidores virtuales de equilibrio de carga en particular. El siguiente comando es un ejemplo de una directiva de Content Switching que analiza la fuerza de cifrado en una solicitud y hace coincidir las fortalezas de cifrado que son menores o iguales a 40:
add cs policy p1 -rule "client.ssl.cipher_bits.le(40)"
Como otro ejemplo, puede configurar una directiva que determine si una solicitud contiene un certificado de cliente:
add cs policy p2 -rule "client.ssl.client_cert exists"
O bien, puede configurar una directiva que examine información concreta en un certificado de cliente. Por ejemplo, la siguiente directiva verifica que el certificado tenga uno o más días antes del vencimiento:
add cs policy p2 -rule "client.ssl.client_cert exists && client.ssl.client_cert.days_to_expire.ge(1)"
Un ejemplo del uso de la huella dactilar JA3:
add ssl policy ja3_pol -rule "CLIENT.SSL.JA3_FINGERPRINT.EQ(bb4c15a90e93a25ddc16274395bce4c6)" -action reset
O bien un ejemplo del uso de la huella dactilar JA3 con 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-->
Nota
Para obtener información sobre el análisis de fechas y horas de un certificado, consulte Formato de fechas y horas de una expresión y expresiones para fechas de certificado SSL.
Prefijos para datos SSL y certificados basados en texto
En la siguiente tabla se describen los prefijos de expresión que identifican los elementos basados en texto en las transacciones SSL y los certificados de cliente.
Tabla 1. Prefijos que devuelven texto o valores booleanos para datos de certificados de cliente y SSL
Prefijo | Descripción |
---|---|
CLIENT.SSL.CLIENT_CERT | Devuelve el certificado de cliente SSL en la transacción SSL actual. |
CLIENT.SSL.CLIENT_CERT.TO_PEM | Devuelve el certificado de cliente SSL en formato binario. |
CLIENT.SSL.CIPHER_EXPORTABLE | Devuelve un valor booleano TRUE si el cifrado criptográfico SSL es exportable. |
CLIENT.SSL.CIPHER_NAME | Devuelve el nombre del cifrado SSL si se invoca desde una conexión SSL y una cadena NULL si se invoca desde una conexión no SSL. |
CLIENT.SSL.IS_SSL | Devuelve un valor booleano TRUE si la conexión actual se basa en SSL. |
CLIENT.SSL.JA3_FINGERPRINT | Devuelve un valor booleano TRUE si la huella digital JA3 configurada coincide con la huella digital JA3 en el mensaje de saludo del cliente. Nota: Esta expresión está disponible en la versión 13.1 compilación 12.x y posteriores. |
Prefijos para datos numéricos en certificados SSL
En la tabla siguiente se describen los prefijos que evalúan datos numéricos distintos de las fechas de los certificados SSL. Estos prefijos se pueden utilizar con las operaciones que se describen en Operaciones básicas sobre prefijos de expresión y Operaciones compuestas para números.
Tabla 2. Prefijos que evalúan los datos numéricos distintos de las fechas en los certificados SSL
Prefijo | Descripción |
---|---|
CLIENT.SSL.CLIENT_CERT.DAYS_TO_EXPIRE | Devuelve el número de días en que el certificado es válido o devuelve -1 para certificados caducados. |
CLIENT.SSL.CLIENT_CERT.PK_SIZE | Devuelve el tamaño de la clave pública utilizada en el certificado. |
CLIENT.SSL.CLIENT_CERT.VERSION | Devuelve el número de versión del certificado. Si la conexión no se basa en SSL, devuelve cero (0). |
CLIENT.SSL.CIPHER_BITS | Devuelve el número de bits de la clave criptográfica. Devuelve 0 si la conexión no se basa en SSL. |
CLIENT.SSL.VERSION | Devuelve un número que representa la versión del protocolo SSL, de la siguiente manera: 0. La transacción no está basada en SSL: 0x002. La transacción es SSLv2: 0x300. La transacción es SSLv3: 0x301. La transacción es TLSv1: 0x302. La transacción es TLS 1.1: 0x303. La transacción es TLS 1.2: 0x304. La transacción es TLS 1.3. |
Nota
Para ver las expresiones relacionadas con las fechas de caducidad de un certificado, consulte Expresiones para fechas de certificado SSL.
Expresiones para certificados SSL
Puede analizar certificados SSL configurando expresiones que usen el siguiente prefijo:
CLIENT.SSL.CLIENT_CERT
En esta sección se describen las expresiones que puede configurar para certificados, excepto las que examinan la caducidad del certificado. Las operaciones basadas en tiempo se describen en Expresiones de directivas avanzadas: trabajo con fechas, horas y números.
En la siguiente tabla se describen las operaciones que puede especificar para el prefijo CLIENT.SSL.CLIENT_CERT.
Tabla 3. Operaciones que se pueden especificar con el prefijo CLIENT.SSL.CLIENT_CERT
Operación de certificado SSL | Descripción |
---|---|
<certificate>.EXISTS |
Devuelve un valor booleano TRUE si el cliente tiene un certificado SSL. |
<certificate>.ISSUER |
Devuelve el nombre distintivo (DN) del emisor en el certificado como una lista de nombre-valor. Un signo igual (“=”) es el delimitador del nombre y el valor, y la barra (“/”) es el delimitador que separa los pares nombre-valor. A continuación se muestra un ejemplo del DN devuelto: /C=US/O=myCompany/OU=www.mycompany.com/CN=www.mycompany.com/emailAddress=myuserid@mycompany.com
|
<certificate>.ISSUER. IGNORE_EMPTY_ELEMENTS |
Devuelve el emisor e ignora los elementos vacíos en una lista de nombre-valor. Por ejemplo, considere lo siguiente: Cert-Issuer: /c=in/st=kar//l=bangelore //o=mycompany/ou=sales/ /emailAddress=myuserid@mycompany.com . La siguiente acción Reescritura devuelve un recuento de 6 basado en la definición de emisor anterior: sh rewrite action insert_ssl_header Name: insert_ssl Operation: insert_http_header Target:Cert-Issuer Value:CLIENT.SSL.CLIENT_CERT.ISSUER.COUNT . Sin embargo, si cambia el valor al siguiente, el recuento devuelto es 9: CLIENT.SSL.CLIENT_CERT.ISSUER.IGNORE_EMPTY_ELEMENTS.COUNT
|
<certificate>. SERIALNUMBER |
Devuelve el número de serie del certificado como una cadena hexadecimal en mayúsculas sin ceros a la izquierda. Por ejemplo, si el número de serie del certificado es 04daa1e44bd2e7769638a0058b4964bd, la siguiente expresión ayuda a hacer coincidir el número de serie CLIENT.SSL.CLIENT_CERT.SERIALNUMBER.SET_TEXT_MODE(IGNORECASE).CONTAINS(\"4daa1e44bd2e7769638a0058b4964bd\")
|
Parse SSL client hello
Puede analizar el mensaje de saludo del cliente SSL configurando expresiones que usen el siguiente prefijo:
Prefijo | Descripción |
---|---|
CLIENT.SSL.CLIENT_HELLO.CIPHERS.HAS_HEXCODE | Hace coincidir el código hexadecimal proporcionado en la expresión con los códigos hexadecimales de los conjuntos de cifrado recibidos en el mensaje de saludo del cliente. |
CLIENT.SSL.CLIENT_HELLO.CLIENT_VERSION | Versión recibida en el encabezado del mensaje de saludo del cliente. |
CLIENT.SSL.CLIENT_HELLO.IS_RENEGOTIATE | Devuelve true si un cliente o un servidor inicia la renegociación de la sesión. |
CLIENT.SSL.CLIENT_HELLO.IS_REUSE | Devuelve true si el dispositivo reutiliza la sesión SSL en función del ID de sesión distinto de cero recibido en el mensaje de saludo del cliente. |
CLIENT.SSL.CLIENT_HELLO.IS_SCSV | Devuelve true si la capacidad Signaling Cipher Suite Value (SCSV) se anuncia en el mensaje de saludo del cliente. El código hexadecimal para el SCSV de reserva es 0x5600. |
CLIENT.SSL.CLIENT_HELLO.IS_SESSION_TICKET | Devuelve true si la extensión del tíquet de sesión con una longitud distinta de cero se anuncia en el mensaje de saludo del cliente. |
CLIENT.SSL.CLIENT_HELLO.LENGTH | Longitud recibida en el encabezado del mensaje de saludo del cliente. |
CLIENT.SSL.CLIENT_HELLO.SNI | Devuelve el nombre del servidor recibido en la extensión del nombre del servidor del mensaje de saludo del cliente. |
CLIENT.SSL.CLIENT_HELLO.ALPN.HAS_NEXTPROTOCOL | Devuelve true si el protocolo de aplicación en la extensión ALPN recibido en el mensaje de saludo del cliente coincide con el protocolo proporcionado en la expresión. |
Estas expresiones se pueden utilizar en el punto de enlace CLIENTHELLO_REQ. Para obtener más información, consulte Vinculación de directivas SSL.