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


问题内容

有时,我必须编写软件以与位于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(Internet安全体系结构密钥管理协议,也是一种标准)来建立会话。IPSEC和ISAKMP的源代码很容易获得,并且可能已经安装在您的系统上。

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

更简单的方法:您是否真的需要VPN,或者是否可以通过SSL进行隧道传输?我认为Java支持SSL;您可以只创建所需的安全套接字,然后从那里去。

如果知道您使用的是哪个客户端系统,则考虑进行炮击以调用该系统的Cisco VPN客户端。

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