Как я могу настроить прокси-приложение моего приложения Windows C ++ / OpenSSL? - PullRequest
0 голосов
/ 29 января 2020

Я работаю над настольным приложением C ++, которое использует сокеты OpenSSL (необработанный сокет TLS, а не HTTPS) для связи с нашим сервером.

Один из наших клиентов должен направить свой трафик c через прокси. Клиент использует ZScaler в режиме Tunnel с режимом Local Proxy .

Теоретически можно перенастроить ZScaler для принудительной передачи нашего трафика c через прокси, выбранный ZScaler. Однако я хочу исследовать решения, в которых наше приложение использует настройки прокси Windows на уровне ОС, а не полагается на конфигурацию ZScaler.

Я читал этот пост: openssl s_client с использованием прокси

Но я не уверен, применимы ли эти ответы к моей ситуации, потому что этот пользователь не упомянул, используют ли они Windows или Linux, и, похоже, он говорит о HTTP / HTTPS прокси. Кроме того, кажется, что этот вопрос касается функции s_client, а не просто создания сокета TLS для моего сервера через "Туннель с локальным прокси" на Windows.

Итак, мои вопросы:
Можно ли использовать OpenSSL для открытия сокета SSL для сервера через туннель с локальным прокси?

Можем ли мы сделать вызов ОС, чтобы определить IP / сокет для конфигурации туннеля с локальным прокси?

Если это возможно, то у меня есть другой вопрос: предположим, у нас есть один прокси на 10.100.10.0:5000.

Если один пользователь в офисе нашего клиента откроет сокет для нашего сервера через свой прокси, не сможет ли второй пользователь подключиться из своего офиса, потому что у него узкое место в одном сокете прокси?

Другими словами: каков стандартный способ реализации осведомленности о прокси для Windows приложения, использующего OpenSSL?

Примечание: Этот вопрос был первоначально отправлен на обмен стека Network Engineering, но он был закрыт, поскольку он относится к проблеме выше уровня OSI 4.

Примечание : Я ищу решение, которое не требует прав администратора для пользователя P C. Я бы предпочел, чтобы наше приложение обнаруживало и использовало настройки прокси на уровне операционной системы, не внося каких-либо административных изменений в компьютер, например, вызывая netsh.

1 Ответ

1 голос
/ 29 января 2020

Можно ли использовать OpenSSL для открытия сокета SSL для сервера через туннель с локальным прокси?

OpenSSL не делает этого за вас, но OpenSSL также не предотвращает его. Туннель должен быть установлен до того, как вы выполните TLS-подтверждение для конечной точки. В зависимости от того, какой это тип прокси, вам может понадобиться использовать для этого метод HTTP CONNECT или вам может понадобиться протокол SOCKS или все, что требуется вашему прокси. В случае ZScaler это, скорее всего, метод HTTP CONNECT, но вам нужно убедиться, что соединение с целевым IP и портом действительно разрешено политикой безопасности.

Как только вы установили туннель к конечной точке используя прокси, вы можете просто построить сокет SSL поверх сокета TCP для туннеля. Просто выполните обычную настройку SSL (т.е. SSL_new et c), а затем свяжите объект SSL с существующим сокетом, используя SSL_set_fd . Затем выполните обычное рукопожатие, например SSL_connect или аналогичное.

Можем ли мы сделать вызов ОС для определения IP / сокета для конфигурации туннеля с локальным прокси-сервером?

Я не знаю, но Winsock использует настройки системного прокси может ответить на эту часть.

Если один пользователь в офисе нашего клиента откроет сокет для нашего сервера через свой прокси, не сможет ли второй пользователь подключиться из своего офиса, потому что у него узкое место в одном сокете прокси?

Это не должно быть проблемой. Совершенно нормально иметь несколько соединений через прокси.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...