Предположения:
Сервер:
- У меня есть сервер Debian Squeeze, маршрутизируемый в общедоступном Интернете, со статическим IPv4-адресом.
- У меня есть неограниченный доступ для изменения программного обеспечения на сервере.
- Сервер может прослушивать произвольные порты, переконфигурировать правила брандмауэра, в основном нет никаких ограничений на то, что сервер может сделать.
Клиент:
- Я могу запускать Firefox, Java-программы, .NET-программы и некоторые собственные исполняемые файлы, которым не требуется доступ администратора в моей локальной системе (заблокированный рабочий стол Windows без прав администратора).
- Я могу установить дополнения в Firefox.
- Я могу слушать на любом порту интерфейса loopback (
localhost
). Таким образом, вышеупомянутые программы могут связываться с локальным портом и выполнять произвольный сетевой ввод-вывод без прохождения через прокси. - Весь общедоступный доступ в Интернет направляется через ограничивающий прокси-сервер HTTP, который блокирует многие сайты и тщательно проверяет состояние. На порте 80 он разрешает исключительно HTTP (без TLS/SSL). На порте 443 он позволяет использовать SSL/TLS на основе
CONNECT
для удаленных хостов, которые не заблокированы именем домена / 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.