Предположения:
Сервер:
- У меня есть сервер Debian Squeeze, маршрутизируемый в общедоступном Интернете, со статическим IPv4-адресом.
- У меня есть неограниченный доступ для изменения программного обеспечения на сервере.
- Сервер может прослушивать произвольные порты, переконфигурировать правила брандмауэра, в основном нет никаких ограничений на то, что сервер может сделать.
Клиент:
- Я могу запускать Firefox, Java-программы, .NET-программы и некоторые собственные исполняемые файлы, которым не требуется доступ администратора в моей локальной системе (заблокированный рабочий стол Windows без прав администратора).
- Я могу установить дополнения в Firefox.
- Я могу слушать на любом порту
localhost
интерфейса loopback ( ). Таким образом, вышеупомянутые программы могут связываться с локальным портом и выполнять произвольный сетевой ввод-вывод, не проходя через прокси. - Весь общедоступный доступ в Интернет направляется через ограничивающий прокси-сервер HTTP, который блокирует многие сайты и тщательно проверяет состояние. На порте 80 он разрешает исключительно HTTP (без TLS / SSL). На порте 443 он позволяет на
CONNECT
основе SSL / TLS удаленным хостам, которые не заблокированы доменным именем / IP-адресом. - Ограничительный прокси-сервер HTTP не выполняет глубокую проверку пакетов соединений TLS, которые разрешены через прокси-сервер, и не выполняет атаки Man in Middle на эти соединения.
- Вышеупомянутый сервер, к которому у меня есть доступ, не заблокирован прокси.
Цель:
Я хочу направить все запросы HTTP и HTTPS, отправленные Firefox, через вышеуказанный сервер через SSL / TLS.
Другие заметки о «Голе»:
- Даже если сайт конечной точки (например,
http://superuser.com
) не использует SSL / TLS для моего сервера, я все же хочу использовать SSL / TLS от моего клиента до моего сервера , и чтобы мой сервер выполнял HTTP-запрос - зашифрованный или нет - - в желаемое место назначения. - Мне все равно, если мой сервер смотрит на трафик SSL "в открытом виде". Другими словами, я не требую полного сквозного шифрования SSL от моего локального клиента, вплоть до удаленного сервера, если к удаленному серверу обращаются, например, через
https://google.com
. Другими словами, я доверяю серверу для обеспечения конфиденциальности моих данных. - Я готов установить любое программное обеспечение или дополнения Firefox, которые не требуют прав администратора и могут работать на 32-битной Windows 7.
- Программное обеспечение с открытым исходным кодом предпочтительнее проприетарного, и бесплатное программное обеспечение предпочтительнее программного обеспечения, требующего лицензионного сбора.
- Существующее программное обеспечение предпочтительнее, чем кодирование нового программного обеспечения, хотя я готов написать код, если это единственный способ.
Я ищу свободно описанное «решение», которое описывает:
- Какое программное обеспечение потребуется клиенту? Если вам известен конкретный пакет программного обеспечения, назовите его; в противном случае опишите, что клиентское программное обеспечение должно было бы делать .
- Какое программное обеспечение потребуется на сервере? Если вам известен конкретный пакет программного обеспечения, назовите его; в противном случае опишите, что должно делать серверное программное обеспечение .
- Если вы назвали конкретные программные пакеты выше, опишите, какие параметры конфигурации были бы необходимы для его настройки в соответствии с моей целью.
- Если по какой-то причине вы считаете, что это невозможно , опишите почему .
Вещи, которые я пробовал, которые не работают
- Устанавливая
squid
на своем сервере, я попытался настроить собственный HTTP-прокси на своем сервере. Это не сработало, потому что когда я запрашиваю сайты в Firefox по обычному HTTP, Firefox пытается получить доступ к моему серверу также по обычному HTTP! Это неприемлемо, потому что прокси в моей локальной сети может, конечно, наблюдать и / или блокировать обычный HTTP-трафик между моим клиентом и сервером. - VPN не работают , даже OpenVPN через TLS, прослушивающий порт 443, потому что у меня нет прав на локальном компьютере для установки
tun
сетевого адаптера, который может выполнять маршрутизацию уровня 3, и я не могу выполнить какую-либо маршрутизацию уровня 2 (напримерtap
). Короче говоря: мне понадобятся права администратора для установки OpenVPN, и даже если бы у меня были эти права администратора временно, компания не слишком обрадовалась бы, если бы обнаружила, что она установлена. Программа на Java или .NET гораздо менее заметна, особенно если она не установлена в «Установка и удаление программ» и не имеет компонента драйвера ядра, как в OpenVPN.
socat
прав администратора или на клиентском компьютере Windows.