无需安装客户端软件即可连接VPN

15

有时我需要编写软件以建立与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 的连接?


我希望有一个MIT许可证(或类似)的Java jar文件,我可以像您的伪代码一样调用它来打开一个OpenVPN支持的套接字。 - James T Snell
3个回答

10

这取决于VPN服务器的配置方式。

大多数VPN产品使用IPSEC,这是一种用于加密TCP/IP连接的标准协议。大多数产品还使用ISAKMP(Internet安全体系结构密钥管理协议),这也是一个标准协议,用于建立会话。 IPSEC和ISAKMP的源代码可以轻松获取,可能已经安装在您的系统上。

现在说一些不好的消息:虽然我已经提到的所有内容都是标准的,但可用于ISAKMP的身份验证方案几乎全部是专有的。两个“标准”的身份验证方案是预共享密钥和X.509证书。如果VPN服务器配置为允许其中任何一个,则您有机会使用。否则,您不能真正使用VPN,因为该协议真正是专有的,而且由于认证对话是加密的,几乎不可能进行逆向工程。

更简单的方法是:您真的需要VPN吗?还是有一种通过SSL进行隧道传输的方法?我认为Java支持SSL;您只需创建所需的安全套接字即可继续操作。

如果您知道所使用的客户端系统,请考虑外壳调用相应系统的Cisco VPN客户端。

否则,您将不得不复制VPN客户端的操作。 VPN客户端使用ISAKMP执行身份验证和会话设置,并将结果安装到内核中以创建VPN连接。 ISAKMP实现可用;您只需弄清楚正在使用哪种身份验证方式并尝试进行设置。这时,您将编写自己的VPN客户端。


2

您可以阅读官方的思科文档,然后使用以下数据创建一个批处理文件: vpnclient connect [连接名称] pwd [密码] 并断开连接。 将其包含到您的Java程序中: Runtime.getRuntime().exec("cmd /c start [批处理文件路径]");


2

我在Linux上使用vpnc软件包来连接公司的Cisco VPN,因为我们没有兼容Linux的客户端。不过vpnc是用C语言编写的,所以您需要进行一些移植。


这确实引起了我的兴趣。谢谢你的提示! - Adam Paynter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接