Squid4.6 используется в качестве прямого прокси для преобразования всего трафика в безопасный трафик.Конфигурация squid очень проста, он разрешает весь трафик и использует urlrewrite.pl для замены «http» на «https». (SSL-BUMP НЕ используется) Для прокси-сервера Squid установлено значение tls_outgoing_options, поэтому работает следующее:
клиент (http) -----> Squid ------> Сервер (https)
Теперь я пытаюсь повторить то же самое с помощью веб-сокетов.Есть 3 теста, 1. клиент (ws) ------> Squid -----> сервер (ws)
клиент (wss) ------> Squid -----> сервер (wss)
3 клиент (ws) ------> Squid ----> Сервер (wss)
Первые два случая работают с squid, но третий не работает.И мне нужен только третий вариант.
Я дал журналы отладки для urlrewrite.pl, чтобы показать точный запрос, полученный для подключения через веб-сокет, и следующий - это журнал: Здесь порт 8080: сервер и порт 3128: squid
DEBUG: root: localhost: 8080 127.0.0.1/localhost - CONNECT myip = 127.0.0.1 myport = 3128
Даже wireshark показывает то же самое, 1. CONNECT HTTP 1.1 2. GET 3.обновить протокол.
Вопрос: 1. Есть ли способ обновить соединение через веб-сокет для защиты веб-сокета с помощью squid4.6?2. Или, скажем, я использую wss-клиент (без сертификата) и wss-сервер (с сертификатами), есть ли способ сообщить squid использовать его собственные сертификаты, даже упомянутые в "tls_outgoing_options", для установления соединения?
ТРЕБУЕТСЯ: клиент всегда отправляет незащищенный трафик HTTP / WS, и Squid должен обновить его до HTTPS / WSS.В нашей настройке приложения мы используем наши собственные библиотеки openssl для создания сертификатов, которые не могут быть включены в пакет (client.go) go-tls, поэтому мы используем прокси-сервер squid для использования сертификатов, созданных нашими собственными библиотеками openssl.Client и Forward-Proxy (Squid) находятся в нашей специфической среде, поэтому squid.conf очень прост и допускает весь трафик.И нам нужна взаимная проверка подлинности.
SQUID CONF CODE
#
# Recommended minimum configuration:
#
# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl localhost src 127.0.0.1
acl SSL_ports port 443
acl Safe_ports port 443 # https
acl Safe_ports port 80 # http
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
# Squid normally listens to port 3128
http_port 3128
url_rewrite_program /etc/squid/urlrewrite.pl
url_rewrite_access allow all
tls_outgoing_options cert=/etc/squid/proxy.crt
tls_outgoing_options key=/etc/squid/proxy.key
tls_outgoing_options cafile=/etc/squid/serverauth.crt
urlrewrite CODE
#!/usr/bin/perl
select(STDOUT);
$| = 1;
while (<>) {
#print STDOUT "OK rewrite-url=\"https://google.com\"\n";
if (/^(|\d+\s+)((\w+):\/+)([^\/:]+)(|:(\d+))(|\/\S*)(|\s.*)$/) {
my $channel = $1;
my $protocolClean = $3;
my $domain = $4;
my $port = $5;
my $portClean = $6;
my $urlPath = $7;
if ($protocolClean eq 'http' ){#&& ($port eq '' || $portClean eq '80')) {
print STDOUT "${channel}OK rewrite-url=\"https://${domain}${port}${urlPath}\"\n";
#print STDOUT "${channel}OK rewrite-url=\"https://google.com\"\n";
} else {
print STDOUT "${channel}ERR\n";
}
}
}