0 SSLPlugin (русский)
Vladimir Dubrovin edited this page 2026-04-13 21:32:26 +03:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

3proxy SSL/TLS плагин

Плагин можно использовать для перехвата и дешифровки SSL/TLS трафика, для шифрования трафика прокси-сервера и аутентификации с помощью клиентских сертификатов.

Для прозрачного перехвата трафика (MITM):


ssl_mitm - подменять сертификаты для сервисов, запущенных ниже. Использование без ssl_client_verify небезопасно.
ssl_nomitm - не подменять сертификаты для сервисов, запущенных ниже.

Для защиты трафика прокси-сервера (https:// proxy):

ssl_serv (или ssl_server) - требовать TLS-соединение от клиентов для сервисов, запущенных ниже
ssl_noserv (или ssl_noserver) - не требовать TLS-соединение от клиентов для сервисов, запущенных ниже

Для использования TLS при соединении к вышестоящему серверу:

ssl_cli (или ssl_client) - устанавливать TLS-соединение к вышестоящему серверу для сервисов, запущенных ниже
ssl_nocli (или ssl_noclient) - не устанавливать TLS-соединение к вышестоящему серверу для сервисов, запущенных ниже

Параметры:


ssl_server_cert /path/to/cert - сертификат сервера (не должен быть самоподписанным, должен содержать альтернативные имена) для ssl_serv
ssl_server_key /path/to/key - ключ сертификата сервера для ssl_server_cert или сгенерированного MITM-сертификата
ssl_client_cert /path/to/cert - клиентский сертификат для аутентификации на вышестоящем сервере (используется с ssl_cli)
ssl_client_key /path/to/key - ключ клиентского сертификата для ssl_client_cert
ssl_client_ciphersuites ciphersuites_list - наборы шифров TLS для TLS 1.3 (клиент), пример: ssl_client_ciphersuites TLS_AES_128_GCM_SHA256
ssl_server_ciphersuites ciphersuites_list - наборы шифров TLS для TLS 1.3 (сервер)
ssl_client_cipher_list ciphers_list - наборы шифров TLS для TLS 1.2 и ниже (клиент), пример: ssl_client_cipher_list ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
ssl_server_cipher_list ciphers_list - наборы шифров TLS для TLS 1.2 и ниже (сервер)
ssl_client_min_proto_version tls_version - минимальная версия TLS клиента (например, ssl_client_min_proto_version TLSv1.2)
ssl_server_min_proto_version tls_version - минимальная версия TLS сервера
ssl_client_max_proto_version tls_version - максимальная версия TLS клиента
ssl_server_max_proto_version tls_version - максимальная версия TLS сервера
ssl_client_verify - проверять сертификат вышестоящего сервера (используется с ssl_mitm или ssl_cli)
ssl_client_no_verify - не проверять сертификат вышестоящего сервера (по умолчанию)
ssl_server_verify - требовать клиентский сертификат (mTLS) для ssl_serv
ssl_server_no_verify - не требовать клиентский сертификат (по умолчанию)
ssl_server_ca_file /path/to/cafile - файл CA-сертификата для MITM
ssl_server_ca_key /path/to/cakey - ключ CA-сертификата ssl_server_ca_file для MITM
ssl_server_ca_dir /path/to/cadir - директория CA-сертификатов для ssl_server_verify
ssl_server_ca_store /path/to/castore - хранилище CA-сертификатов для ssl_server_verify (OpenSSL 3.0+)
ssl_client_ca_file /path/to/cafile - файл CA-сертификатов для ssl_client_verify
ssl_client_ca_dir /path/to/cadir - директория CA-сертификатов для ssl_client_verify
ssl_client_ca_store /path/to/castore - хранилище CA-сертификатов для ssl_client_verify (OpenSSL 3.0+)
ssl_client_sni hostname - SNI-имя хоста для отправки вышестоящему серверу (переопределяет запрошенное имя хоста)
ssl_client_alpn протокол1 протокол2 ... - ALPN-протоколы для согласования с вышестоящим сервером (например, ssl_client_alpn h2 http/1.1)
ssl_client_mode режим - когда устанавливать TLS-соединение: 0 - при подключении (по умолчанию), 1 - после аутентификации, 2 - перед передачей данных, 3 - только для защищённых типов parent прокси (заканчивающихся на 's')
ssl_certcache /path/to/cache/ - расположение кеша сгенерированных MITM-сертификатов. Кеш может содержать файлы 3proxy.pem, 3proxy.key, server.key, которые используются как ssl_server_ca_file, ssl_server_ca_key и ssl_server_key соответственно, если они не заданы. Если server.key не задан, 3proxy.key используется для генерации серверного сертификата.

Пример MITM:

plugin /path/to/SSLPlugin.so ssl_plugin
ssl_server_ca_file /path/to/cafile
ssl_server_ca_key /path/to/cakey
ssl_mitm
proxy -p3128
ssl_nomitm
proxy -p3129
Перехватывается трафик в прокси на порту 3128.

Пример конфигурации https:// прокси:

plugin /path/to/SSLPlugin.so ssl_plugin
ssl_server_cert path_to_cert
ssl_server_key path_to_key
ssl_serv
proxy -p33128
ssl_noserv
proxy -p3128
На порту 33128 создается https:// прокси, на порту 3128 - http:// прокси.

Пример TLS-клиента (соединение к вышестоящему серверу через TLS):

plugin /path/to/SSLPlugin.so ssl_plugin
ssl_client_cert /path/to/client.crt
ssl_client_key /path/to/client.key
ssl_client_verify
ssl_client_ca_file /path/to/ca.crt
ssl_cli
proxy -p3128
Создается HTTP-прокси, который соединяется с вышестоящими серверами через TLS с аутентификацией по клиентскому сертификату.

Условное TLS для parent прокси (ssl_client_mode 3):

plugin /path/to/SSLPlugin.so ssl_plugin
ssl_server_cert /path/to/server.crt
ssl_server_key /path/to/key
ssl_client_mode 3

auth strong allow user1 parent 1000 https parent1.example.com 443 allow user2 parent 1000 socks5 parent2.example.com 1080 ssl_serv ssl_cli proxy -p3128 ssl_noserv ssl_nocli

Создается HTTP-прокси на порту 3128, использующий TLS для клиентских соединений (ssl_serv). При ssl_client_mode 3 TLS-рукопожатие с родительским прокси выполняется только если тип parent прокси заканчивается на 's' (защищённые типы). В данном примере трафик user1 идёт через https родительский прокси с TLS-шифрованием, а трафик user2 — через обычный socks5 родитель без TLS. Защищённые типы parent прокси: tcps, https, connects, connect+s, socks4s, socks5s, socks4+s, socks5+s, pop3s, smtps, ftps.

Пример mTLS (требование клиентского сертификата):

plugin /path/to/SSLPlugin.so ssl_plugin
ssl_server_cert /path/to/server.crt
ssl_server_key /path/to/server.key
ssl_server_ca_file /path/to/ca.crt
ssl_server_verify
ssl_serv
proxy -p3128
Создается https:// прокси, требующий аутентификацию по клиентскому сертификату.

© Vladimir Dubrovin, License: BSD style