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

推荐订阅源

S
SegmentFault 最新的问题
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
GbyAI
GbyAI
博客园 - 叶小钗
小众软件
小众软件
WordPress大学
WordPress大学
I
InfoQ
Last Week in AI
Last Week in AI
Vercel News
Vercel News
博客园 - Franky
Stack Overflow Blog
Stack Overflow Blog
P
Proofpoint News Feed
A
About on SuperTechFans
Engineering at Meta
Engineering at Meta
腾讯CDC
D
DataBreaches.Net
有赞技术团队
有赞技术团队
宝玉的分享
宝玉的分享
Jina AI
Jina AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
G
Google Developers Blog
V
Visual Studio Blog
酷 壳 – CoolShell
酷 壳 – CoolShell

《羽毛の家》的留言

移遠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