配置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个月
[媒体不可用]