Welcome to Yumao′s Blog.

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個月

check.jar

关键字:, , ,

  1. 你好,我最近在做毕设,正好涉及openvpn和JAVA还有数据库的一些东西,看了您的博客感觉很相关,但他的链接失效了,还有些问题我也想请教您,方便的话能给我邮箱回复吗?谢谢!