java - 不安装客户端软件连接VPN

标签 java sockets vpn cisco

有时我必须编写软件来与驻留在 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 连接的标准协议(protocol)。大多数产品还使用 ISAKMP(互联网安全体系结构 key 管理协议(protocol))(也是一种标准)来建立 session 。 IPSEC 和 ISAKMP 的源代码很容易获得,并且可能已经安装在您的系统上。

现在是坏消息:尽管我已经提到的所有内容都是标准的,但可以与 ISAKMP 一起使用的身份验证方案几乎都是专有的。两种“标准”身份验证方案是预共享 key 和 X.509 证书。如果 VPN 服务器配置为允许其中任何一个,那么您就有机会。否则,您无法真正使用 VPN,因为该协议(protocol)是真正专有的,并且由于身份验证对话已加密,几乎不可能进行逆向工程。

一条更简单的途径:您真的需要 VPN,还是可以通过 SSL 建立隧道?我认为 Java 支持 SSL;您只需创建所需的安全套接字,然后从那里开始。

如果您知道自己使用的是哪种客户端系统,则可以考虑花钱为该系统调用 Cisco VPN 客户端。

否则,您将不得不复制 VPN 客户端的功能。 VPN 客户端使用 ISAKMP 执行身份验证和 session 设置,并将结果安装到内核中以创建 VPN 连接。 ISAKMP 实现可用;您只需要找出正在使用的身份验证并尝试进行设置即可。届时您将编写自己的 VPN 客户端。

关于java - 不安装客户端软件连接VPN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/899349/

相关文章:

java - Amazon SES 自定义 header 列表-取消订阅不起作用

java - 读取请求使服务器停止

java - 从互联网连接到服务器套接字到通过 LAN 连接到互联网的系统

go - 如何将 VPN(pptp) 与 golang net 包一起使用?

java - 仅当 Mustache Java 中的 Map 中存在值时才打印列表

java - 有没有办法检查 or 语句中的哪个条件导致代码运行?

java - 装饰JTextArea

c++ - 设置套接字超时?

mysql - 通过 VPN 的 Talend 连接

macos - 可以配置 OS X VPN 以在 VPN 和本地接口(interface)之间拆分流量吗?