惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
博客园 - Franky
MyScale Blog
MyScale Blog
L
LangChain Blog
Martin Fowler
Martin Fowler
Recent Announcements
Recent Announcements
Stack Overflow Blog
Stack Overflow Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 司徒正美
量子位
A
About on SuperTechFans
C
Check Point Blog
大猫的无限游戏
大猫的无限游戏
Last Week in AI
Last Week in AI
小众软件
小众软件
Apple Machine Learning Research
Apple Machine Learning Research
I
InfoQ
V
Visual Studio Blog
Vercel News
Vercel News
B
Blog
爱范儿
爱范儿
aimingoo的专栏
aimingoo的专栏
U
Unit 42

《羽毛の家》的留言

移遠RM500Q-GL在NSA組網下鎖5G – 羽毛の家 Ubuntu下wine中文乱码问题解决 – 羽毛の家 不要IDE Mode! 我們要AHCI! – 羽毛の家 使用HttpClient4登錄支付寶-淘寶接口 – 羽毛の家 B站直傳測試連接 – 羽毛の家 多線程HttpClient4 Common – 羽毛の家 FFxivARR SqPack 暴力拆包 – 羽毛の家
配置OpenVPN調用Java驗證用戶名/密碼登錄 – 羽毛の家
yumao · 2016-05-13 · via 《羽毛の家》的留言

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