OpenVPN实在不给力,最近发疯似得要搞定它,先一步一步来吧,首先说明问题之所在,每当OpenVPN重协商(--reneg-xxx)时,通道都要重新初始化一下,这看起来很不爽,并且用起来也比较不妥,然而如果将重协商的间隔设置太大,对称密钥又容易被暴破,因此两全不齐美!还好工作正好是这方面的,除了公司的安排,我自己也在做一些改造。首先就瞄上了它的密钥协商!“
小顾de杂记”是一个很好的学习OpenVPN的博客,他曾经有一篇文章《
OpenVPN
& reneg-sec & 一小时断线一次 & Solution》引起了我的思考,最终我有了解决方案。因此我觉得我的博客也是学习OpenVPN的一个不错的去处,呵呵~~
我的想法很简单,那就是向IPSec靠拢即可!IPSec的密钥协商在两个阶段中的第二个阶段,两个阶段是分离的,而OpenVPN的密钥协商运行于SSL加密通道之上,SSL握手可以视为完成认证以及第二阶段加密通道构建的第一阶段。有了想法就要做了,第一步就是实现它,而不是先搞一大堆所谓的计划。我还是觉得程序员的快感来自于编码而不是计划。因此我十分讨厌《人月神话》之类的经验总结书。
在OpenVPN中,当SSL握手建立起一个安全的加密通道的时候,所谓的第一阶段完成,密钥协商这个第二阶段任务开始执行,它正是在第一阶段建立好的加密通道之上来完成的。反正说了这么多,很多人可能有点晕,因此可以参考我的《OpenVPN协议解析》系列文章,这里就不再谈论协议细节了。
在OpenVPN中,两个阶段的协商过程都用状态机来维持,第一阶段和第二阶段统一于一个状态机当中,因此只需要将第二阶段的状态机完美复制一份,然而和原始的第二阶段状态机稍作区分,就大功告成了。要完成这个修改,需要你对OpenVPN代码以及协议完全熟悉。
在OpenVPN的源码中,有以下的宏:
#define S_START 3 /* ready to exchange keys */
#define S_SENT_KEY 4 /* client does S_SENT_KEY -> S_GOT_KEY */
#define S_GOT_KEY 5 /* server does S_GOT_KEY -> S_SENT_KEY */
这也是我们需要复制模拟的宏,我们需要模拟出这三个宏即可,然后在ssl.c的tls_process函数中做以下修改:
0.起码增加三个新的状态;(在ssl.h中搞定)1.第二阶段,在客户端写入key的时候,更新客户端的状态为新的添加的状态;2.第二阶段,在服务端读取key的时候,更新服务端的状态为新的添加的状态;3.第二阶段,在客户端得到key的时候,向对端确认;4.第二阶段,在服务器端发送了key的时候,等待客户端的确认;5.第一阶段后,服务器端可以根据配置引发第二阶段协商;6.第一阶段后,客户端接收到服务端的消息,被动开始第二阶段协商,写入key。
如果完成了以上修改,你的OpenVPN虽然已面目全非,但是更像IPSec了。我的修改中,我使用了push消息在控制信道通知客户端第二阶段协商开启,经测试也是很不错的。最终,我们又多了一个配置,那就是第二阶段密钥协商的间隔,比如1小时,然后加上第一阶段密钥协商的时间间隔,比如5小时,OpenVPN就可以完美了。
分享到:
相关推荐
计算机网络基础
8.4.1.2 Packet Tracer - 使用CLI配置和验证站点到... - 在每个路由器上创建IKE策略和IKE密钥(预共享密钥): ```shell crypto isakmp policy encryption authentication hash group crypto isakmp ke
网络系统管理赛项软件包(服务模块软件包、普通PC软件包、无线地勘系统等)
与原版open-build-master相比,我做了稍稍修改,已经包含Open虚拟专网2.5源代码和依赖项源代码,需要VS2019、ActivePerl、WDK10,可以直接按照我写的教程进行编译,100%可编译。
一个基于DELPHI的远程屏幕传输(差异截图)
Book Description Angular 2 introduces an entirely new paradigm of applications. It wholly embraces all the newest concepts that are built into the next generation of browsers, and it cuts away all the...
交叉编译器3.4.5,下载解压,按照交叉编译器安装过程安装。
使用Cisco Packet Tracer实现两个局域网通信,亲自测试可以使用
win10mi版+Linux CentOS-7+苹果系统驱动加满的无敌合集
Angular 2 Cookbook Angular 2 Cookbook Angular 2 Cookbook
根据本人运维经验,结合openVPN社区相关案例,针对TAP-Windows-adapter安装失败“an error occured installing the TAP device driver”错误提示,提出五种解决方案
ARM9平台上的嵌入式Linux系统移植研究
安装OpenVPN 保护OpenVPN 在局域网中安装Orthanc ? 先决条件 Ansible> 2.5 Ansible> 2.9(用于SSH-sec角色) 在客户端计算机和服务器计算机之间已正确配置SSH身份验证。 安装 克隆项目并安装角色: git clone...
用于显示表格数据,可以实现隐藏数据和展开数据。
信息安全-中间人攻击的技术构成,以及Kali Linux的双工具.
嵌入式Linux在ARM9(TQ)上的移植.pdf
Atmel-SmartConnect APK for android!
使用 mcollective、openvpn 等工具,您通常需要一种授权方式并对用户进行身份验证。 使用 OpenVPN,您可以使用密码或SSL证书。 管理我自己的SSL CA 不是我的好主意,但经常需要对于某些事情。 此外,教工程师如何...
应用控制网关有SecPath ACG盒式设备和SecBlade ACG插卡两种产品形态,ACG可针对P2P/IM、网络游戏、炒股、非法网站访问等行为,进行精细化识别和控制,有效解决带宽滥用、访问非法网站感染病毒等问题;安全管理平台有...
linux企业实战运维入门到高级系列 ubuntu Centos ...自动化运维 安装kickstart文件(半自动化) ANSIBLE部署 企业级OpenVPN 安装OpenVPN 该笔记由刘森飚整理,版权归原作者所有 仅用于学习交流分享,如有争议请联系下架