Welcome to Yumao′s Blog.
Openvpn和PPTP VPN相比存在諸多的優勢
最明顯的是Openvpn支持NAT穿越
不需要其他路由的支持
其次openvpn使用證書加密數據傳輸
安全性方便也優于PPTP VPN
但在配置方面比PPTP VPN要複雜許多
從而思考到不采用證書登錄
而采用通用的User/Password組合登錄方式
因爲本人本編語是java
那就來怎麽通過java來驗證user吧
我們在已經配置到Openvpn
並且可以通過證書驗證的基礎上
在server端的conf文件中
添加以下四條內容
1 2 3 4 5 6 7 | 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編寫
內容如下
1 2 | #!/bin/sh exit `java -jar check.jar ${username} ${password}` |
保存即可
check.jar已經打包放在文章底部下載
其原理就是從指定mysql數據庫查詢用戶信息
檢驗用戶名密碼以及過期時間
未過期的用戶名密碼才可以通過驗證
否則將返回失敗代碼
內置鏈接mysql信息如下:
1 2 3 4 5 6 | 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數據庫創建腳本如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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还有数据库的一些东西,看了您的博客感觉很相关,但他的链接失效了,还有些问题我也想请教您,方便的话能给我邮箱回复吗?谢谢!