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