Перейти к содержанию

Глава 15. Условия SSL/TLS

Условия SSL/TLS позволяют фильтровать трафик по параметрам TLS-соединения: версия согласованного протокола, набор шифров (cipher suite), SNI (Server Name Indication), атрибуты клиентских и серверных сертификатов, ALPN, статус TLS-инспекции (MITM).

Условия этой группы доступны в слоях <Proxy>, <SSL>, <SSL-Intercept> и <Forward> в зависимости от конкретного условия. Условия, связанные с параметрами TLS handshake (версия, шифр, сертификат), требуют завершённого TLS-соединения и доступны в слое <SSL>. Условия, работающие с ClientHello до расшифровки (SNI), доступны в слое <SSL-Intercept>.

15.1. client.connection.negotiated_ssl_version=

Проверяет версию протокола SSL/TLS, согласованную между клиентом и прокси во время TLS handshake. Позволяет запретить устаревшие версии протокола или требовать определённую версию.

Синтаксис:

client.connection.negotiated_ssl_version=version
client.connection.negotiated_ssl_version=(version1, version2, ...)
client.connection.negotiated_ssl_version=!version
client.connection.negotiated_ssl_version=!(version1, version2, ...)

где version — одно из: SSLv3, TLSv1, TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3.

Поддерживается отрицание через ! — проверяет, что согласованная версия НЕ совпадает с указанной.

Допустимые слои: Proxy, SSL

Примечание: В <Proxy> layer условие работает для HTTPS запросов с включённой SSL-инспекцией (MITM). Версия берётся из client-side TLS handshake после MITM intercept. Для plain HTTP запросов условие не матчит (версия отсутствует).

BlueCoat CPL Reference: client.connection.negotiated_ssl_version= . Совместимость полная — имя и семантика идентичны BlueCoat ProxySG.

Примеры:

<SSL>
    ; Запрет устаревших версий TLS
    client.connection.negotiated_ssl_version=SSLv3 deny
    client.connection.negotiated_ssl_version=TLSv1 deny
    client.connection.negotiated_ssl_version=TLSv1.1 deny

    ; Разрешить только TLS 1.2 и выше
    client.connection.negotiated_ssl_version=!(TLSv1.2, TLSv1.3) deny

    ; Список допустимых версий
    client.connection.negotiated_ssl_version=(TLSv1.2, TLSv1.3) allow

См. также: 15.3. server.connection.negotiated_ssl_version=, 28. SSL/TLS действия


15.2. client.connection.negotiated_cipher=

Проверяет набор шифров (cipher suite), согласованный между клиентом и прокси при TLS handshake.

Синтаксис:

client.connection.negotiated_cipher=cipher_suite
client.connection.negotiated_cipher=(cipher_suite1, cipher_suite2, ...)

где cipher_suite — имя набора шифров в формате IANA (например, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, ECDHE-RSA-AES128-GCM-SHA256).

Допустимые слои: Proxy, SSL, Exception

Примечание: В <Proxy> layer условие работает для HTTPS запросов с включённой SSL-инспекцией (MITM). Имя cipher берётся из client-side TLS handshake после MITM intercept. Для plain HTTP запросов условие не матчит (cipher отсутствует).

BlueCoat CPL Reference: client.connection.negotiated_cipher= . Совместимость полная — имя и семантика идентичны BlueCoat ProxySG. BlueCoat также поддерживает значение none (нешифрованное соединение).

Примеры:

<Proxy>
    ; Запрет конкретного cipher через MITM
    client.connection.negotiated_cipher=TLS_AES_256_GCM_SHA384 deny

    ; Разрешить только AES-128, запретить AES-256
    client.connection.negotiated_cipher=TLS_AES_128_GCM_SHA256 allow
    client.connection.negotiated_cipher=TLS_AES_256_GCM_SHA384 deny
    ALLOW

client.connection.negotiated_cipher.strength= / server.connection.negotiated_cipher.strength= — категория стойкости согласованного шифра; поддерживается для обеих сторон (имена как в BlueCoat).

client.connection.negotiated_cipher.strength={low|medium|high|export}
server.connection.negotiated_cipher.strength={low|medium|high|export}

Для server-стороны значение доступно только при SSL-инспекции (MITM) — на сквозном CONNECT-туннеле условие не совпадает.

Пример:

<Proxy>
    ; Запретить слабые (low) согласованные шифры на клиентской стороне
    client.connection.negotiated_cipher.strength=low deny

    ; Аналогично для upstream-соединения (только при MITM)
    server.connection.negotiated_cipher.strength=(low, export) deny

См. также: 15.4. server.connection.negotiated_cipher=, 28. SSL/TLS действия


15.3. server.connection.negotiated_ssl_version=

Проверяет версию протокола SSL/TLS, согласованную между прокси и целевым (upstream) сервером. Доступно только при TLS-инспекции (MITM), когда прокси устанавливает отдельное TLS-соединение с сервером.

Синтаксис:

server.connection.negotiated_ssl_version=version
server.connection.negotiated_ssl_version=(version1, version2, ...)
server.connection.negotiated_ssl_version=!version
server.connection.negotiated_ssl_version=!(version1, version2, ...)

где version — одно из: SSLv3, TLSv1, TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3.

Поддерживается отрицание через !.

Допустимые слои: SSL

BlueCoat CPL Reference: server.connection.negotiated_ssl_version= . Совместимость полная — имя и семантика идентичны BlueCoat ProxySG.

Примеры:

<SSL>
    ; Предупредить, если сервер не поддерживает TLS 1.3
    server.connection.negotiated_ssl_version=!TLSv1.3 log.warning("Server does not support TLS 1.3")

    ; Заблокировать серверы с устаревшими версиями
    server.connection.negotiated_ssl_version=(SSLv3, TLSv1) deny

Примечание: Работает аналогично client.connection.negotiated_ssl_version=, но проверяет upstream-соединение. Если TLS-инспекция не активна (tunnel mode), значение отсутствует и условие не срабатывает.

См. также: 15.1. client.connection.negotiated_ssl_version=


15.4. server.connection.negotiated_cipher=

Проверяет набор шифров (cipher suite), согласованный между прокси и целевым сервером. Доступно только при TLS-инспекции (MITM).

Синтаксис:

server.connection.negotiated_cipher=cipher_suite
server.connection.negotiated_cipher=(cipher_suite1, cipher_suite2, ...)

где cipher_suite — имя набора шифров в формате IANA.

Допустимые слои: SSL

BlueCoat CPL Reference: server.connection.negotiated_cipher= . Совместимость полная — имя и семантика идентичны BlueCoat ProxySG.

Примеры:

<SSL>
    ; Логировать, если сервер согласовал слабый шифр
    server.connection.negotiated_cipher=DES-CBC3-SHA log.warning("Weak cipher negotiated with server")

    ; Запрет серверов без поддержки AEAD
    server.connection.negotiated_cipher=(TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256) allow

Примечание: Работает аналогично client.connection.negotiated_cipher=, но проверяет upstream-соединение. Если TLS-инспекция не активна, значение отсутствует.

См. также: 15.2. client.connection.negotiated_cipher=


15.5. client.certificate.presented=

Проверяет, предоставил ли клиент X.509 сертификат при TLS handshake (mutual TLS / mTLS). Поддерживается bare keyword без =yes (подразумевается =yes).

Синтаксис:

client.certificate.presented=yes|no
client.certificate.presented

Bare keyword client.certificate.presented (без =) эквивалентен client.certificate.presented=yes.

Допустимые слои: Proxy, SSL

Сравнение с BlueCoat: В BlueCoat CPL Reference существует условие client.certificate.requested=, которое проверяет, запросил ли сервер клиентский сертификат (yes|no). Семантика различается:

Redcoat client.certificate.presented= BlueCoat client.certificate.requested=
Что проверяет Клиент предоставил сертификат Сервер запросил сертификат
Слой Proxy, SSL SSL-Intercept
Перспектива Факт наличия cert в handshake CertificateRequest от сервера

Это сознательное расхождение: для forward proxy presented= полезнее — позволяет строить политики на основе mTLS аутентификации клиента.

Примеры:

<SSL>
    ; Требовать клиентский сертификат для доступа к внутренним ресурсам
    url.domain=internal.corp.com client.certificate.presented=no deny

    ; Логировать mTLS-аутентифицированные запросы
    client.certificate.presented=yes log.enable("mtls")

    ; Bare keyword (без =yes)
    client.certificate.presented allow

См. также: 15.6. client.certificate.subject.cn=, 15.7. client.certificate.subject.ou=


15.6. client.certificate.common_name=

Проверяет Common Name (CN) из поля Subject клиентского X.509 сертификата. Поддерживает wildcard-паттерны и два синтаксиса: =value и function-style ("value").

Синтаксис:

client.certificate.common_name=pattern
client.certificate.common_name("pattern")

где pattern — строка с поддержкой wildcards (*, ?).

Допустимые слои: Proxy, SSL

Принимаемые имена (эквивалентны, одно условие TlsClientCertCn): client.certificate.common_name= — каноническое имя (как в BlueCoat); client.certificate.subject.cn= — алиас Redcoat (CN — часть Subject). Оба парсятся и ведут себя одинаково, в обоих синтаксисах (=value и function-style ("value")) — по принципу «выравниваем под 7.3 с алиасами». Wildcards поддерживаются через строковый матчер (*, ?); отдельные string-модификаторы (.exact/.prefix/.suffix/.substring/.regex) к CN не применяются.

каноническое (BlueCoat) алиас (Redcoat)
Имя client.certificate.common_name= client.certificate.subject.cn=
Function-style client.certificate.common_name("value") client.certificate.subject.cn("value")
Wildcards *, ? (строковый матчер) то же

Примеры:

<SSL>
    ; Проверка CN клиентского сертификата (каноническое имя)
    client.certificate.common_name=admin.corp.com allow
    client.certificate.common_name=*.corp.com allow

    ; Алиас subject.cn — то же условие
    client.certificate.subject.cn=service-account allow

    ; Function-style синтаксис
    client.certificate.common_name("service-account") allow

    ; Запрет неизвестных сертификатов
    client.certificate.presented=yes client.certificate.common_name=!*.corp.com deny

См. также: 15.5. client.certificate.presented=, 15.7. client.certificate.subject.ou=


15.7. client.certificate.subject.ou=

Проверяет Organizational Unit (OU) из поля Subject клиентского X.509 сертификата. Поддерживает wildcard-паттерны и два синтаксиса.

Синтаксис:

client.certificate.subject.ou=pattern
client.certificate.subject.ou("pattern")

где pattern — строка с поддержкой wildcards (*, ?).

Допустимые слои: Proxy, SSL

Сравнение с BlueCoat: BlueCoat CPL Reference определяет client.certificate.subject_directory_attribute= для проверки произвольных атрибутов Subject. Redcoat предоставляет прямой доступ к OU как отдельное условие — это расширение Redcoat, не имеющее прямого аналога в BlueCoat. BlueCoat также предоставляет client.certificate.subject= для проверки всего Subject — в Redcoat не реализовано.

Примеры:

<SSL>
    ; Разрешить доступ только для определённых подразделений
    client.certificate.subject.ou=Engineering allow
    client.certificate.subject.ou=Security allow
    client.certificate.presented=yes deny    ; остальные сертификаты — запретить

    ; Wildcard
    client.certificate.subject.ou=*-team allow

    ; Function-style
    client.certificate.subject.ou("DevOps") allow

См. также: 15.5. client.certificate.presented=, 15.6. client.certificate.subject.cn=


15.8. ssl.proxy_mode=

Проверяет, выполняет ли прокси перехват и расшифровку SSL-соединения (по BlueCoat). Условие истинно, если текущий запрос обрабатывается на расшифрованном (перехваченном) SSL-соединении.

Синтаксис:

ssl.proxy_mode=yes|no|https-forward-proxy|https-reverse-proxy
Значение Когда истинно (Redcoat)
yes Запрос на перехваченном/расшифрованном SSL-соединении (forward или reverse)
no Запрос НЕ на перехваченном SSL-соединении (обычный HTTP или сквозной TLS-туннель)
https-forward-proxy Перехваченное SSL в режиме forward-proxy (is_ssl и НЕ reverse)
https-reverse-proxy Соединение в режиме reverse-proxy

Режим прокси задаётся слушателем

Режим (forward / reverse) определяется слушателем (ProxyMode), а не самим правилом. Соответствие значений: yes истинно для любого перехваченного SSL — forward или reverse; https-forward-proxy — только forward-перехват; https-reverse-proxy — соединение в reverse-режиме; no — соединение без перехвата SSL. Принимаются только эти четыре значения — значения inspection-режимов (deep-inspection и т.п.) для ssl.proxy_mode= не допускаются (для них есть отдельное условие ssl.inspection_mode=).

Допустимые слои: <Proxy>, <SSL>.

Примеры:

<Proxy>
    ; Применить правило только к перехваченному (расшифрованному) SSL
    ssl.proxy_mode=yes url.domain=*.internal.com allow

    ; Запретить обычные (не SSL-перехваченные) запросы к ресурсу
    ssl.proxy_mode=no url.domain=secure.example.com deny

См. также: 15.14. ssl.intercepted=, 15.15. ssl.bypassed=


15.9. is_ssl=

Статус: планируется. Использование в CPL файле приведёт к ошибке парсинга. Поле is_ssl заполняется и используется внутренне для определения схемы (http/https) и порта по умолчанию (80/443).

Проверяет, является ли клиентское соединение TLS-защищённым.

Синтаксис (планируемый):

is_ssl=yes|no

Допустимые слои: Proxy

Сериализация: Connection.IsSsl=yes|no

Примеры (планируемые):

<Proxy>
    ; Перенаправить HTTP на HTTPS
    is_ssl=no redirect(301, "https://$(url.host)$(url.path)")

    ; Применить правила только к HTTPS
    is_ssl=yes url.domain=sensitive.com allow

Примечание: В отличие от client.connection.negotiated_ssl_version=, которое проверяет конкретную версию TLS, is_ssl= — бинарная проверка наличия TLS-соединения.

См. также: 15.1. client.connection.negotiated_ssl_version=


15.10. tls.version=

Статус: планируется. Использование в CPL файле приведёт к ошибке парсинга.

Проверяет версию TLS-протокола клиентского соединения. Отличается от client.connection.negotiated_ssl_version= именем (упрощённое) и предполагаемым use case (Redcoat-native синтаксис).

Синтаксис (планируемый):

tls.version=version
tls.version=(version1, version2, ...)

Допустимые значения: SSLv3, TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3

Допустимые слои: Proxy, SSL

Сериализация: tls.version=TLSv1.2 или tls.version=(TLSv1.2, TLSv1.3)

Примечание: Рекомендуется использовать реализованное условие client.connection.negotiated_ssl_version= (BlueCoat-совместимое). tls.version= будет добавлено как alias для удобства.

Примеры (планируемые):

<SSL>
    ; Запрет устаревших версий
    tls.version=SSLv3 deny
    tls.version=TLSv1.0 deny
    tls.version=TLSv1.1 deny

См. также: 15.1. client.connection.negotiated_ssl_version=


15.11. tls.cipher_suite=

Статус: планируется. Использование в CPL файле приведёт к ошибке парсинга.

Проверяет набор шифров TLS-соединения клиента. Аналогично client.connection.negotiated_cipher= с упрощённым именем.

Синтаксис (планируемый):

tls.cipher_suite=cipher_name
tls.cipher_suite=(cipher1, cipher2, ...)

Допустимые слои: Proxy, SSL

Примечание: Рекомендуется использовать реализованное условие client.connection.negotiated_cipher= (BlueCoat-совместимое).

Примеры (планируемые):

<SSL>
    tls.cipher_suite=TLS_AES_256_GCM_SHA384 allow
    tls.cipher_suite=(TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256) allow

См. также: 15.2. client.connection.negotiated_cipher=


15.12. tls.sni=

Проверяет имя сервера (hostname) из расширения SNI (Server Name Indication) в TLS ClientHello. Для HTTPS CONNECT запросов SNI извлекается из hostname CONNECT. Доступно до расшифровки TLS, поэтому может использоваться в слое <SSL-Intercept> для принятия решения о перехвате.

Синтаксис:

client.connection.ssl_server_name=hostname
client.connection.ssl_server_name.exact=hostname
client.connection.ssl_server_name.prefix=prefix
client.connection.ssl_server_name.suffix=.domain.com
client.connection.ssl_server_name.substring=pattern
client.connection.ssl_server_name.regex="regex_pattern"

Допустимые слои: Proxy, SSL, SSL-Intercept, Forward

Default match (без модификатора): domain suffix — client.connection.ssl_server_name=example.com матчит example.com, www.example.com, sub.example.com.

Совместимость с BlueCoat: Полная. Имя, синтаксис и string modifiers идентичны BlueCoat . Поддерживается также внутренний формат tls.sni= (legacy).

Redcoat BlueCoat
Имя client.connection.ssl_server_name= client.connection.ssl_server_name=
Default match domain suffix domain suffix
String modifiers .exact, .prefix, .suffix, .substring, .regex .exact, .prefix, .suffix, .substring, .regex
Слои Proxy, SSL, SSL-Intercept, Forward Proxy, SSL, SSL-Intercept, Forward, Tenant

Примеры:

<SSL-Intercept>
    ; Не перехватывать банковские сайты
    client.connection.ssl_server_name.suffix=.bank.com ssl.forward_proxy(no)
    client.connection.ssl_server_name.suffix=.banking.org ssl.forward_proxy(no)

    ; Перехватывать всё остальное
    ssl.forward_proxy(yes)

<Proxy>
    ; Блокировка по SNI (domain suffix match)
    client.connection.ssl_server_name=blocked-site.com deny

    ; Блокировка по точному имени
    client.connection.ssl_server_name.exact=evil.com deny

Сериализация: client.connection.ssl_server_name[.modifier]=pattern

См. также: 8. Условия URL, 28. SSL/TLS действия


15.13. tls.alpn=

Статус: планируется. Использование в CPL файле приведёт к ошибке парсинга.

Проверяет протокол, согласованный через TLS ALPN (Application-Layer Protocol Negotiation). ALPN определяет протокол верхнего уровня (HTTP/1.1, HTTP/2, HTTP/3) на этапе TLS handshake.

Синтаксис (планируемый):

tls.alpn=protocol
tls.alpn=(protocol1, protocol2, ...)

Допустимые значения: h2 (HTTP/2), http/1.1 (HTTP/1.1), h3 (HTTP/3)

Допустимые слои: Proxy, SSL

Примеры (планируемые):

<SSL>
    ; Логировать HTTP/2 соединения
    tls.alpn=h2 log.enable("http2")

    ; Разрешить только HTTP/1.1 и HTTP/2
    tls.alpn=(h2, http/1.1) allow

Сериализация: tls.alpn=h2 или tls.alpn=(h2, http/1.1)

Примечание: В BlueCoat CPL Reference отсутствует прямой аналог tls.alpn=. Это расширение Redcoat.


15.14. ssl.intercepted=

Статус: планируется. Использование в CPL файле приведёт к ошибке парсинга.

Проверяет, был ли TLS-трафик перехвачен (расшифрован) прокси через MITM.

Синтаксис (планируемый):

ssl.intercepted=yes|no

Допустимые слои: Proxy, Exception

Примеры (планируемые):

<Proxy>
    ; Применить дополнительные правила к расшифрованному трафику
    ssl.intercepted=yes url.domain=internal.com allow

<Exception>
    ; Особая страница ошибки для MITM-трафика
    ssl.intercepted=yes exception.id=policy_denied exception(ssl_blocked_page)

Примечание: Связано с ssl.proxy_mode=, но проще — бинарная проверка факта перехвата.

См. также: 15.15. ssl.bypassed=, 15.8. ssl.proxy_mode=


15.15. ssl.bypassed=

Статус: планируется. Использование в CPL файле приведёт к ошибке парсинга.

Проверяет, был ли TLS-трафик пропущен без расшифровки (tunnel mode, bypass).

Синтаксис (планируемый):

ssl.bypassed=yes|no

Допустимые слои: Proxy, Exception

Примеры (планируемые):

<Proxy>
    ; Логировать пропущенный SSL-трафик
    ssl.bypassed=yes log.enable("ssl_bypass")

    ; В tunnel mode — ограниченные возможности фильтрации
    ssl.bypassed=yes url.domain=blocked.com deny

Примечание: ssl.bypassed=yes и ssl.intercepted=yes взаимоисключающи для одного соединения. Для нешифрованных (не-SSL) соединений оба значения no.

См. также: 15.14. ssl.intercepted=


15.16. ssl.inspection_mode=

Статус: планируется. Использование в CPL файле приведёт к ошибке парсинга.

Определяет режим инспекции SSL-трафика. Более детальная альтернатива бинарным ssl.intercepted= и ssl.bypassed=.

Синтаксис (планируемый):

ssl.inspection_mode=mode
Значение Алиасы Описание
deep-inspection deep, full, mitm Полная расшифровка и инспекция (MITM)
certificate-inspection certificate, cert Проверка только серверного сертификата без расшифровки
bypass none, passthrough Пропуск без инспекции
block deny Блокировка SSL-соединения

Допустимые слои: SSL-Intercept

Примеры (планируемые):

<SSL-Intercept>
    ; Полная инспекция для корпоративных ресурсов
    url.domain=.corp.com ssl.inspection_mode=deep-inspection

    ; Только проверка сертификата для банков
    url.domain=.bank.com ssl.inspection_mode=certificate-inspection

    ; Пропуск для доверенных ресурсов
    url.domain=.trusted.com ssl.inspection_mode=bypass

Детали: Поддерживается 4 режима инспекции; для каждого допускается несколько алиасов. Режимом MITM (полной расшифровки) считается только deep-inspection.

См. также: 15.14. ssl.intercepted=, 28. SSL/TLS действия


15.17. tls.ech=

Статус: планируется. Использование в CPL файле приведёт к ошибке парсинга.

Проверяет наличие расширения Encrypted Client Hello (ECH) в TLS 1.3 ClientHello. ECH шифрует SNI и другие метаданные, скрывая их от промежуточных узлов.

Синтаксис (планируемый):

tls.ech=yes|no

Допустимые слои: Proxy, SSL-Intercept

Примеры (планируемые):

<SSL-Intercept>
    ; Блокировать ECH — без SNI невозможна фильтрация
    tls.ech=yes deny

<Proxy>
    ; Логировать ECH-соединения
    tls.ech=yes log.enable("ech_detected")

Примечание: В BlueCoat CPL Reference отсутствует аналог tls.ech=. Это расширение Redcoat для работы с TLS 1.3 Encrypted Client Hello (draft-ietf-tls-esni). При tls.ech=yes значение tls.sni= может быть недоступно или содержать «внешний» (public) SNI вместо реального.


15.18. Условия серверного сертификата (server.certificate.*)

Статус: планируется. Все три условия принимаются при загрузке политики (имена как в BlueCoat), но проверка сертификата upstream-сервера ещё не реализована — правило с этими условиями не сработает.

Группа условий для проверки X.509-сертификата upstream-сервера. По замыслу доступны только при TLS-инспекции (MITM), когда прокси сам устанавливает TLS-соединение с сервером.

server.certificate.hostname=шаблон            ; имя хоста сертификата
server.certificate.hostname.category=(кат.)   ; категория имени хоста
server.certificate.subject=DN                 ; всё поле Subject

Планируемое сокращение Redcoat tls.server_cert.cn= (CN из Subject) пока также не реализовано.

где pattern — строка с поддержкой wildcards.

Допустимые слои: SSL, SSL-Intercept

Сравнение с BlueCoat: В BlueCoat CPL Reference аналогичное условие называется server.certificate.subject= и проверяет всё поле Subject (не только CN). BlueCoat поддерживает string modifiers (.exact, .prefix, .suffix, .substring, .regex) и .case_sensitive.

Redcoat BlueCoat
Имя tls.server_cert.cn= server.certificate.subject=
Что проверяет Только CN Всё поле Subject
Слои SSL, SSL-Intercept SSL, SSL-Intercept

Примеры (планируемые):

<SSL>
    ; Проверка CN серверного сертификата
    tls.server_cert.cn=*.google.com allow
    tls.server_cert.cn=*.phishing-site.com deny

Примечание: Серверный сертификат доступен только после установления TLS-соединения с сервером, поэтому условие проверяется на этапе обработки ответа.

Сериализация: tls.server_cert.cn=pattern

См. также: 15.6. client.certificate.subject.cn=


Сводная таблица условий SSL/TLS

# Условие Статус BlueCoat аналог
15.1 client.connection.negotiated_ssl_version= реализовано идентичен
15.2 client.connection.negotiated_cipher= реализовано идентичен
15.3 server.connection.negotiated_ssl_version= реализовано идентичен
15.4 server.connection.negotiated_cipher= реализовано идентичен
15.5 client.certificate.presented= реализовано client.certificate.requested= (другая семантика)
15.6 client.certificate.subject.cn= реализовано client.certificate.common_name=
15.7 client.certificate.subject.ou= реализовано расширение Redcoat
15.8 ssl.proxy_mode= планируется ssl.proxy_mode=
15.9 is_ssl= планируется нет прямого аналога
15.10 tls.version= планируется alias для 15.1
15.11 tls.cipher_suite= планируется alias для 15.2
15.12 client.connection.ssl_server_name= реализовано client.connection.ssl_server_name= (полная совместимость, все string modifiers)
15.13 tls.alpn= планируется расширение Redcoat
15.14 ssl.intercepted= планируется нет прямого аналога
15.15 ssl.bypassed= планируется нет прямого аналога
15.16 ssl.inspection_mode= планируется нет прямого аналога
15.17 tls.ech= планируется расширение Redcoat
15.18 tls.server_cert.cn= планируется server.certificate.subject=

15.19. client.connection.authenticated=

Синтаксис и семантика — как в BlueCoat.

Истинно, если на клиентском соединении учётные данные realm были проверены в предыдущей транзакции (соединение уже аутентифицировано). Как и authenticated=, не может сочетаться со свойством authenticate() в одном правиле.

Синтаксис:

client.connection.authenticated={yes|no}

Допустимые слои: <Proxy>.

Примеры:

<Proxy>
    client.connection.authenticated=yes allow

15.20. client.connection.dscp=

Статус: планируется. DSCP-метка из входящего соединения пока не читается, поэтому значение всегда отсутствует и условие никогда не срабатывает (безопасно). Будет добавлено позже.

Проверяет DSCP-метку (Differentiated Services Code Point, QoS) клиентского соединения. DSCP — 6-битное значение (0–63) в IP-заголовке для приоритизации трафика.

Синтаксис:

client.connection.dscp=<0..63>

Допустимые слои: <Proxy>.

Примеры:

<Proxy>
    client.connection.dscp=46 allow    ; 46 = EF (Expedited Forwarding, обычно VoIP)

15.21. client.connection.realm=

Статус: планируется. Realm соединения пока не передаётся из аутентификации, поэтому условие никогда не срабатывает (безопасно). Будет добавлено позже.

Истинно, если клиентское соединение уже аутентифицировано в указанном realm в предыдущей транзакции.

Синтаксис:

client.connection.realm=<realm_name>
client.connection.realm.exact=<realm_name>
client.connection.realm.prefix=<prefix>
client.connection.realm.suffix=<suffix>
client.connection.realm.substring=<substring>
client.connection.realm.regex=<regex>

Поддерживаются стандартные формы сравнения строки: точное (= / .exact), по префиксу/суффиксу/подстроке и по регулярному выражению.

Допустимые слои: <Proxy>.

Примеры:

<Proxy>
    client.connection.realm=Corporate_LDAP allow
    client.connection.realm.regex="Corp.*" allow

15.22. client.connection.ssl_server_name.exists=

Синтаксис и семантика — как в BlueCoat.

Истинно, если в TLS-рукопожатии клиента присутствует SNI (Server Name Indication).

Синтаксис:

client.connection.ssl_server_name.exists={yes|no}

Допустимые слои: <Proxy>, <SSL>.

Примеры:

<SSL>
    client.connection.ssl_server_name.exists=no deny    ; запретить TLS без SNI

15.23. client.connection.ssl_server_name.length=

Синтаксис и семантика — как в BlueCoat.

Проверяет длину значения SNI (в символах) в TLS-рукопожатии клиента. Используется для отсева аномально длинных SNI.

Синтаксис:

client.connection.ssl_server_name.length=<число>

Допустимые слои: <Proxy>, <SSL>.

Примеры:

<SSL>
    client.connection.ssl_server_name.length=255..1000 deny