diff --git a/doc/html/howtoe.html b/doc/html/howtoe.html index cbeb0e6..f9a03e9 100644 --- a/doc/html/howtoe.html +++ b/doc/html/howtoe.html @@ -33,6 +33,8 @@
+SSLPlugin provides TLS/SSL support for 3proxy. It can be used to: +
+Creating an https:// proxy:
+
To create an https:// proxy, you need a server certificate and key. The certificate must not be self-signed
+and should contain Subject Alternative Names (SAN) for the proxy hostname/IP.
+
+plugin /path/to/SSLPlugin.ld.so ssl_plugin +ssl_server_cert /etc/3proxy/certs/server.crt +ssl_server_key /etc/3proxy/certs/server.key +ssl_serv +proxy -p3129 +ssl_noserv +proxy -p3128 ++
+This creates an https:// proxy on port 3129 and an http:// proxy on port 3128. +Configure clients to use https://proxy-host:3129/ as the proxy URL. +
+
+Client certificate authentication (mTLS):
+
To require clients to authenticate with a certificate, use ssl_server_verify and provide the CA certificate:
+
+plugin /path/to/SSLPlugin.ld.so ssl_plugin +ssl_server_cert /etc/3proxy/certs/server.crt +ssl_server_key /etc/3proxy/certs/server.key +ssl_server_ca_file /etc/3proxy/certs/ca.crt +ssl_server_verify +ssl_serv +proxy -p3129 ++
+Only clients with a valid certificate signed by the CA can connect. +
+
+MITM for TLS traffic inspection:
+
To intercept and decrypt TLS traffic, you need a CA certificate to generate spoofed server certificates:
+
+plugin /path/to/SSLPlugin.ld.so ssl_plugin +ssl_server_ca_file /etc/3proxy/certs/ca.crt +ssl_server_ca_key /etc/3proxy/certs/ca.key +ssl_client_verify +ssl_client_ca_file /etc/ssl/certs/ca-certificates.crt +ssl_mitm +proxy -p3128 +ssl_nomitm +proxy -p3129 ++
+The CA certificate must be trusted by clients. ssl_client_verify ensures the real server certificates are validated. +Without ssl_client_verify, the proxy is vulnerable to MITM attacks. +
+
+TLS client (connect to upstream via TLS):
+
To connect to upstream servers via TLS with client certificate authentication:
+
+plugin /path/to/SSLPlugin.ld.so ssl_plugin +ssl_client_cert /etc/3proxy/certs/client.crt +ssl_client_key /etc/3proxy/certs/client.key +ssl_client_verify +ssl_client_ca_file /etc/ssl/certs/ca-certificates.crt +ssl_cli +proxy -p3128 ++
+Creating a Certificate Authority (CA):
+
For MITM or mTLS, you need a CA. Generate a CA private key and certificate:
+
+# Generate CA private key +openssl genrsa -out ca.key 4096 + +# Generate CA certificate (valid for 10 years) +openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 \ + -subj "/C=US/ST=State/L=City/O=MyOrg/CN=My CA" \ + -out ca.crt ++
+For MITM, import ca.crt into client browsers/OS as a trusted root CA. +
+
+Creating a server certificate for https:// proxy:
+
The server certificate must have proper Subject Alternative Names (SAN):
+
+# Generate server private key +openssl genrsa -out server.key 2048 + +# Create a certificate signing request (CSR) +openssl req -new -key server.key \ + -subj "/C=US/ST=State/L=City/O=MyOrg/CN=proxy.example.com" \ + -out server.csr + +# Create extensions file for SAN +cat > server.ext << 'EOF' +authorityKeyIdentifier=keyid,issuer +basicConstraints=CA:FALSE +keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment +extendedKeyUsage = serverAuth +subjectAltName = @alt_names + +[alt_names] +DNS.1 = proxy.example.com +DNS.2 = proxy +IP.1 = 192.168.1.100 +EOF + +# Sign the certificate with CA +openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key \ + -CAcreateserial -out server.crt -days 365 -sha256 \ + -extfile server.ext ++
+For a public https:// proxy, use a CA like Let's Encrypt instead of self-signed. +
++Creating a client certificate for mTLS: +
+# Generate client private key +openssl genrsa -out client1.key 2048 + +# Create CSR +openssl req -new -key client1.key \ + -subj "/C=US/ST=State/L=City/O=MyOrg/CN=client1" \ + -out client1.csr + +# Create extensions file +cat > client.ext << 'EOF' +basicConstraints=CA:FALSE +keyUsage = digitalSignature, nonRepudiation, keyEncipherment +extendedKeyUsage = clientAuth +EOF + +# Sign with CA +openssl x509 -req -in client1.csr -CA ca.crt -CAkey ca.key \ + -CAcreateserial -out client1.crt -days 365 -sha256 \ + -extfile client.ext + +# Create PKCS#12 bundle for browser import +openssl pkcs12 -export -out client1.p12 \ + -inkey client1.key -in client1.crt -certfile ca.crt ++
+Import client1.p12 into the client browser or OS certificate store. +
++Quick setup script for development/testing: +
+#!/bin/sh +# Creates CA, server, and client certificates for SSLPlugin testing + +# CA +openssl genrsa -out ca.key 4096 +openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 \ + -subj "/CN=3proxy CA" -out ca.crt + +# Server +openssl genrsa -out server.key 2048 +openssl req -new -key server.key -subj "/CN=localhost" -out server.csr +cat > server.ext << 'EOF' +basicConstraints=CA:FALSE +keyUsage = keyEncipherment +extendedKeyUsage = serverAuth +subjectAltName = DNS:localhost,DNS:proxy,IP:127.0.0.1 +EOF +openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key \ + -CAcreateserial -out server.crt -days 365 -sha256 -extfile server.ext + +# Client +openssl genrsa -out client.key 2048 +openssl req -new -key client.key -subj "/CN=client" -out client.csr +cat > client.ext << 'EOF' +basicConstraints=CA:FALSE +extendedKeyUsage = clientAuth +EOF +openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key \ + -CAcreateserial -out client.crt -days 365 -sha256 -extfile client.ext +openssl pkcs12 -export -out client.p12 -passout pass: \ + -inkey client.key -in client.crt -certfile ca.crt +
First, always specify the internal interface to accept incoming connections with the diff --git a/doc/html/howtor.html b/doc/html/howtor.html index 6433c6b..91b175c 100644 --- a/doc/html/howtor.html +++ b/doc/html/howtor.html @@ -33,6 +33,8 @@
+SSLPlugin обеспечивает поддержку TLS/SSL для 3proxy. Он может использоваться для: +
+Создание https:// прокси:
+
Для создания https:// прокси требуется сертификат и ключ сервера. Сертификат не должен быть самоподписанным
+и должен содержать альтернативные имена (SAN) для имени хоста/IP прокси.
+
+plugin /path/to/SSLPlugin.ld.so ssl_plugin +ssl_server_cert /etc/3proxy/certs/server.crt +ssl_server_key /etc/3proxy/certs/server.key +ssl_serv +proxy -p3129 +ssl_noserv +proxy -p3128 ++
+Создаётся https:// прокси на порту 3129 и http:// прокси на порту 3128. +Настройте клиенты на использование https://proxy-host:3129/ в качестве URL прокси. +
+
+Аутентификация по клиентскому сертификату (mTLS):
+
Чтобы требовать от клиентов аутентификацию по сертификату, используйте ssl_server_verify и укажите CA-сертификат:
+
+plugin /path/to/SSLPlugin.ld.so ssl_plugin +ssl_server_cert /etc/3proxy/certs/server.crt +ssl_server_key /etc/3proxy/certs/server.key +ssl_server_ca_file /etc/3proxy/certs/ca.crt +ssl_server_verify +ssl_serv +proxy -p3129 ++
+Только клиенты с действительным сертификатом, подписанным CA, смогут подключиться. +
+
+MITM для инспекции TLS-трафика:
+
Для перехвата и расшифровки TLS-трафика требуется CA-сертификат для генерации подделанных серверных сертификатов:
+
+plugin /path/to/SSLPlugin.ld.so ssl_plugin +ssl_server_ca_file /etc/3proxy/certs/ca.crt +ssl_server_ca_key /etc/3proxy/certs/ca.key +ssl_client_verify +ssl_client_ca_file /etc/ssl/certs/ca-certificates.crt +ssl_mitm +proxy -p3128 +ssl_nomitm +proxy -p3129 ++
+CA-сертификат должен быть доверенным для клиентов. ssl_client_verify обеспечивает проверку реальных серверных сертификатов. +Без ssl_client_verify прокси уязвим для MITM-атак. +
+
+TLS-клиент (соединение с вышестоящим сервером через TLS):
+
Для соединения с вышестоящими серверами через TLS с аутентификацией по клиентскому сертификату:
+
+plugin /path/to/SSLPlugin.ld.so ssl_plugin +ssl_client_cert /etc/3proxy/certs/client.crt +ssl_client_key /etc/3proxy/certs/client.key +ssl_client_verify +ssl_client_ca_file /etc/ssl/certs/ca-certificates.crt +ssl_cli +proxy -p3128 ++
+Создание удостоверяющего центра (CA):
+
Для MITM или mTLS требуется CA. Сгенерируйте закрытый ключ CA и сертификат:
+
+# Генерация закрытого ключа CA +openssl genrsa -out ca.key 4096 + +# Генерация сертификата CA (действителен 10 лет) +openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 \ + -subj "/C=RU/ST=Region/L=City/O=MyOrg/CN=My CA" \ + -out ca.crt ++
+Для MITM импортируйте ca.crt в браузеры/ОС клиентов как доверенный корневой CA. +
+
+Создание серверного сертификата для https:// прокси:
+
Серверный сертификат должен иметь правильные альтернативные имена (SAN):
+
+# Генерация закрытого ключа сервера +openssl genrsa -out server.key 2048 + +# Создание запроса на подпись сертификата (CSR) +openssl req -new -key server.key \ + -subj "/C=RU/ST=Region/L=City/O=MyOrg/CN=proxy.example.com" \ + -out server.csr + +# Создание файла расширений для SAN +cat > server.ext << 'EOF' +authorityKeyIdentifier=keyid,issuer +basicConstraints=CA:FALSE +keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment +extendedKeyUsage = serverAuth +subjectAltName = @alt_names + +[alt_names] +DNS.1 = proxy.example.com +DNS.2 = proxy +IP.1 = 192.168.1.100 +EOF + +# Подписание сертификата CA +openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key \ + -CAcreateserial -out server.crt -days 365 -sha256 \ + -extfile server.ext ++
+Для публичного https:// прокси используйте CA вроде Let's Encrypt вместо самоподписанного. +
++Создание клиентского сертификата для mTLS: +
+# Генерация закрытого ключа клиента +openssl genrsa -out client1.key 2048 + +# Создание CSR +openssl req -new -key client1.key \ + -subj "/C=RU/ST=Region/L=City/O=MyOrg/CN=client1" \ + -out client1.csr + +# Создание файла расширений +cat > client.ext << 'EOF' +basicConstraints=CA:FALSE +keyUsage = digitalSignature, nonRepudiation, keyEncipherment +extendedKeyUsage = clientAuth +EOF + +# Подписание CA +openssl x509 -req -in client1.csr -CA ca.crt -CAkey ca.key \ + -CAcreateserial -out client1.crt -days 365 -sha256 \ + -extfile client.ext + +# Создание PKCS#12 для импорта в браузер +openssl pkcs12 -export -out client1.p12 \ + -inkey client1.key -in client1.crt -certfile ca.crt ++
+Импортируйте client1.p12 в хранилище сертификатов браузера или ОС клиента. +
++Скрипт быстрой настройки для разработки/тестирования: +
+#!/bin/sh +# Создаёт CA, серверный и клиентский сертификаты для тестирования SSLPlugin + +# CA +openssl genrsa -out ca.key 4096 +openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 \ + -subj "/CN=3proxy CA" -out ca.crt + +# Сервер +openssl genrsa -out server.key 2048 +openssl req -new -key server.key -subj "/CN=localhost" -out server.csr +cat > server.ext << 'EOF' +basicConstraints=CA:FALSE +keyUsage = keyEncipherment +extendedKeyUsage = serverAuth +subjectAltName = DNS:localhost,DNS:proxy,IP:127.0.0.1 +EOF +openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key \ + -CAcreateserial -out server.crt -days 365 -sha256 -extfile server.ext + +# Клиент +openssl genrsa -out client.key 2048 +openssl req -new -key client.key -subj "/CN=client" -out client.csr +cat > client.ext << 'EOF' +basicConstraints=CA:FALSE +extendedKeyUsage = clientAuth +EOF +openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key \ + -CAcreateserial -out client.crt -days 365 -sha256 -extfile client.ext +openssl pkcs12 -export -out client.p12 -passout pass: \ + -inkey client.key -in client.crt -certfile ca.crt ++
Во-первых, для ограничения доступа необходимо указать внутренний интерфейс,