← 回到文章列表

配置OpenVPN调用Java验证用户名/密码登录

Openvpn和PPTP VPN相比存在诸多的优势 最明显的是Openvpn支持NAT穿越 不需要其他路由的支持 其次openvpn使用证书加密数据传输 安全性方便也优于PPTP VPN 但在配置方面比PPTP VPN要复杂许多 从而思考到不采用证书登录 而采用通用的User/P…

Openvpn和PPTP VPN相比存在诸多的优势
最明显的是Openvpn支持NAT穿越
不需要其他路由的支持
其次openvpn使用证书加密数据传输
安全性方便也优于PPTP VPN
但在配置方面比PPTP VPN要复杂许多
从而思考到不采用证书登录
而采用通用的User/Password组合登录方式
因为本人本编语是java
那就来怎么通过java来验证user吧

我们在已经配置到Openvpn
并且可以通过证书验证的基础上
在server端的conf文件中
添加以下四条内容

script-security 3 system
#使server支持從變量獲取用戶名密碼
auth-user-pass-verify /etc/openvpn/java.sh via-env
#調用外部程序java.sh來處理用戶登錄請求
client-cert-not-required  
#只使用用戶名密碼方式驗證登錄
username-as-common-name

然后nano java.sh进行外置shell编写
内容如下

#!/bin/sh
exit `java -jar check.jar ${username} ${password}`

保存即可
check.jar已经打包放在文章底部下载
其原理就是从指定mysql数据库查询用户信息
检验用户名密码以及过期时间
未过期的用户名密码才可以通过验证
否则将返回失败代码

内置链接mysql信息如下:

	String driverName="com.mysql.jdbc.Driver";
	String dbName="openvpn";
	String dbPasswd="openvpn";
	String url="jdbc:mysql://127.0.0.1:3306/openvpn";
	Class.forName(driverName);
	Connection connection=DriverManager.getConnection(url,dbName,dbPasswd);

Mysql数据库创建脚本如下:

create database openvpn;

GRANT ALL ON openvpn.* TO openvpn@localhost IDENTIFIED BY 'openvpn';

use openvpn;

create table vpnuser(
username varchar(50) binary not null,
password varchar(128) binary not null,
exdate date not null,
primary key (username));

insert into vpnuser values('test','test',date_add(sysdate(),interval 1 month));

内置test用户 密码test
有效时期1个月

[媒体不可用]

在这里找找

输入关键词,找一篇过去的记录。