LINUX.ORG.RU
ФорумAdmin

HTTP-прокси для клиентов, не поддерживающих TLS

 , , , ,


1

1

Всем здравствуйте.

Есть зоопарк виртуальных машин со старыми ОС и, соответственно, старыми браузерами (Mozilla 1.x, SeaMonkey 1.x, Netscape 3-4.x, NCSA Mosaic, вот это вот всё). Вот только Red Hat RedBaron нет.

Gopher и FTP работают прекрасно, но хочется порой и на ЛОР заходить, не выходя из криокамеры виртуальной машины. Браузеры в лучшем случае знают о TLS 1.0, а в худшем – только об SSLv3 (или иногда даже SSLv2).

Хочется поднять прокси-сервер и настроить его таким образом, чтобы:

  1. при попытке удалённого HTTP-сервера перенаправить HTTP в HTTPS, прокси-сервер сам бы устанавливал HTTPS-соединение и отдавал клиенту содержимое по HTTP;
  2. переписывал богомерзкие ссылки вида //domain.com в православный http://domain.com;
  3. при попытке клиента использовать HTTPS, прокси-сервер
    1. либо выполнял «protocol downgrade» любым доступным способом (HTTP 30x, URL rewrite, etc.),
    2. либо выполнял роль MITM, отдавая «колхозный» SSLv3-сертификат или даже генеря его на лету (мне ничто не мешает прописать в браузер свой «колхозный» же УЦ. В крайнем же случае предупреждения о несоответствии сертификатов я потерплю.)

В сети вроде упоминается https://mitmproxy.org/. Годится ли это решение для поставленной задачи?

И можно ли то же самое сделать средствами старого доброго Squid?

★★★★

Ответ на: комментарий от devl547

Спасибо, попробую.

Ещё удалось достичь частичного успеха с помощью sslstrip, но он работает на уровне содержимого, а не на уровне протокола, и потому ненадёжен.

Bass ★★★★ ()

сделать средствами старого доброго Squid?

В nginx proxy_pass умеет принимать http, а коннектиться на свежие tls.
Использую для пары приложений, которые в принципе не умеют ssl/tls.
Можно попробовать nginx в качестве прокси.
Ну, или хотя-бы, настроить для конкретных сайтов.

DiMoN ★★★ ()
Ответ на: комментарий от Bass

Ради интереса протестил, работает:

nginx -V
nginx version: nginx/1.14.2
built with OpenSSL 1.1.1c  28 May 2019
TLS SNI support enabled
server {
 listen 80 default_server;
 server_name _;
 root /var/www/html;
 index index.html index.htm index.nginx-debian.html;
 location / {
  try_files $uri $uri/ =404;
 }
}

server {
 listen 80;
 server_name lor.proxy.local;
 location / {
  proxy_pass https://www.linux.org.ru;
  sub_filter 'https://www.linux.org.ru'  'http://lor.proxy.local';
  sub_filter_once off;
 }
}

Лог с консоли: https://pastebin.com/SjM9ew8n

DiMoN ★★★ ()