Подключение к VPN без установки клиентского ПО

StackOverflow https://stackoverflow.com/questions/899349

  •  23-08-2019
  •  | 
  •  

Вопрос

Иногда мне приходится писать программное обеспечение для установления сокета с конкретным сервером, находящимся в Cisco VPN.Я просто пишу свое программное обеспечение так, как будто VPN не существует (используя стандартную библиотеку сокетов).Когда приходит время запуска этой программы, я вручную подключаюсь к VPN с помощью клиентского программного обеспечения, установленного на моем компьютере, а затем запускаю саму программу.

Однако было бы желательно написать программное обеспечение, использующее преимущества специализированной библиотеки сокетов, способной взаимодействовать напрямую через VPN, без использования какого-либо установленного клиентского программного обеспечения.

Вот некоторый код Java, иллюстрирующий функциональность, которую я хотел бы:

String vpnHost = ...;
String vpnUser = ...;
String vpnPassword = ...;
VPNConnection vpnConnection = new CiscoVPNConnection(vpnHost, vpnUser, vpnPassword);

String serverHost = ...;
int serverPort = ...;
Socket socket = vpnConnection.openSocket(serverHost, serverPort);

Можно ли установить такое подключение к VPN без установки какого-либо клиентского ПО?

Это было полезно?

Решение

Это зависит от того, как настроен VPN-сервер.

Большинство продуктов VPN используют IPSEC — стандартный протокол шифрования TCP/IP-соединений.Большинство продуктов также используют ISAKMP, протокол управления ключами архитектуры безопасности Интернета, который также является стандартом для настройки сеанса.Исходный код IPSEC и ISAKMP легко доступен и может быть уже установлен в вашей системе.

Теперь о плохих новостях:хотя все, что я уже упомянул, является стандартным, схемы аутентификации, которые можно использовать с ISAKMP, почти все являются запатентованными.Две «стандартные» схемы аутентификации — это общий ключ и сертификаты X.509.Если VPN-сервер настроен на разрешение любого из этих действий, у вас есть шанс.В противном случае вы не сможете по-настоящему использовать VPN, поскольку протокол действительно является запатентованным, и его практически невозможно перепроектировать, поскольку сеанс аутентификации зашифрован.

Гораздо более простой путь:вам действительно нужен VPN или есть способ туннелировать через SSL?Я думаю, что Java поддерживает SSL;вы можете просто создать нужный вам безопасный сокет и продолжить работу с ним.

Если вы знаете, какую клиентскую систему вы используете, рассмотрите возможность вызова клиента Cisco VPN для этой системы.

В противном случае вам придется повторить то, что делает VPN-клиент.VPN-клиент выполняет аутентификацию и настройку сеанса с помощью ISAKMP и устанавливает результат в ядро ​​для создания VPN-соединения.Доступны реализации ISAKMP;вам нужно только выяснить, какая аутентификация используется, и попытаться ее настроить.На этом этапе вы напишете свой собственный VPN-клиент.

Другие советы

Я использую пакет vpnc в Linux для подключения к Cisco VPN моей компании, поскольку у нас нет совместимого клиента Linux.Однако vpnc написан на языке C, поэтому вам придется выполнить порт.

Вы можете прочитать официальный документ Cisco и после этого создать bat-файл со следующими данными:VpnClient Connect [имя подключения] Pwd [пароль] и отключить.Включите его в свою Java-программу:Runtime.getRuntime().exec("cmd /c start [Путь к bat-файлу]");

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top