一个很自然的想法,使用TLS套餐一IP数据报实现第三层VPN。
这种想法必须经过深思熟虑的,但不幸的是,。这是一个错误的想法。有文章《Why TCP Over TCP Is A Bad Idea》,详解了Why。

其实重传叠加问题是无法解决的,要知道,TCP的RTO计算是极其复杂的。影响它的因素也非常多,这就是说,仅仅要你用一个TCP封装还有一个TCP。外层TCP丢包,且RTO小于内层TCP的RTO。连接就会崩溃。而以上这个条件是非常easy满足的。
       用TLS来封装IP数据报是对TLS的误用!SSL/TLS的初衷是提供传输层之上的安全层,本身执行了可靠的TCP上,其记录层协议封装的是应用层数据,因此。SSL/TLS是对基于TCP应用的安全增强,并非一个通用的传输协议。之所以TLS执行于TCP之上,就是这个原因。由于应用是基于TCP的。假设你想实现一个IP层的VPN,用TLS来封装IP数据报,就相当于你将IP数据报当成了一个基于TCP的应用数据,这不正是《Why TCP Over TCP Is A Bad Idea》中描写叙述的那种连接崩溃的场景吗?事实是,IP数据报显然不是基于TCP的应用数据。
       后来出现了DTLS。显然去掉了非常多约束,轻量了非常多,假设非要封装使用TLS封装IP数据报,首先要想到的怎么也应该是DTLS而不是TLS。DTLS衍生自TLS,而且保留了UDP无序的语义。可是它还是从TLS继承了非常多复杂的东西,本质上,DTLS也是封装应用数据的,这些应用基于UDP。循着这个思路,假设我们能够将IP数据报看作是一个基于UDP的应用数据。那么就能够用DTLS封装它了。能吗?当然能。UDP本身就是IP的第四层镜像。仅仅是多了一个多路复用机制。

使用DTLS封装IP数据报实现一个IP层VPN将会是一个不错的选择,可是还有更好的方法。
       OpenVPN提供了一种更好的方式。仅仅使用TLS实现控制通道。而封装加密IP数据报的数据通道则是首选普通UDP通道。这有点IPSec的影子,不是吗?IPSec使用独立的IKE协商好SA,然后使用独立的ESP/AH协议封装加密IP数据报。

其实。这才是实现IP层VPN的正确方式,本来安全參数的协商和认证/加密就是两个独立的过程,独立的过程。

TLS/DTLS将这些封装进了一个会话过程中。该会话通过一个称为SSL握手的过程建立。在握手的过程中协商安全參数。握手完成后将使用协商好的安全參数保护兴许的应用数据。这样的方式的不灵活性在于你无法添加自己的协商机制,除非改动TLS协议。

另外作为一个TLS Record,IP数据报被封装在Application data中,外部能看到的仅仅是一个TLS Record,中间系统非常难对其进行识别和控制,也就是说。作为加密后的IP数据报的传输协议。TLS非常适合。可是非常难从外部去控制它,你看到的永远是一个TLS Record头,而看不到VPN协议的头。
       对于IP数据报的保护,终于的思想还是IPSec的那套思想。即定义安全端点,定义安全联盟。协商安全參数,保护IP数据报,四个过程是全然独立的。

尽管你能够将IP数据报看作是“应用数据”,可是它毕竟不是应用数据,TLS源自应用数据的安全需求,它针对单一应用,单独的业务逻辑能够起到非常好的安全加固作用,比方实现HTTPS。比方OpenVPN的控制通道,这些都是业务单一且固定的应用。可是加密IP数据报却不适合,抛开TCP over TLS的连接崩溃问题不谈而引入DTLS,控制和传输叠加在一个会话中将会使扩展非常难,比方防火墙无法区分VPN数据和其他TLS应用数据。比方无法实现组播加密,比方无法重协商单独的安全參数,同一个SSL会话无法被不同的安全端点共享...
       因此, 使用TLS记录封装IP层VPN IS A Bad Idea。DTLS更好,但是不是绝对的。真正的好节目,最大限度地利用TLS不要控制通道协商交换安全参数,然后定义一个单独的封装协议封装保护的安全参数IP数据报。

样品太多,IPSec。OpenVPN。只是OpenVPN该代码是太恶心了,据了解,这个想法写了后它。也许它会更好。

Why 使用TLS记录封装IP层VPN IS A Bad Idea的更多相关文章

  1. 老斜两宗事-七层代理模式还是IP层VPN

    1.七层代理模式还是IP层VPN 非常多人会问,我究竟是使用代理模式呢,还是使用VPN模式,假设我想数据在中间不安全的链路上实现加密保护的话.这个问题有一个背景.那就是,你想保护你的数据,能够使用VP ...

  2. TCP/IP协议之IP层

    TCP/IP协议的结构参见下图.有应用层,运输层,网络层,链路层. 但是如果更细化的话,其实还有几层没在这上面体现出来. 1 表示层:数据格式化,代码转换,加密. 没有协议 2 会话层:解除或者建立与 ...

  3. IP 层收发报文简要剖析3--ip输入报文分片重组

    在ip_local_deliver中,如果检测到是分片包,则需要将报文进行重组.其所有的分片被重新组合后才能提交到上层协议,每一个被重新组合的数据包文用ipq结构实例来表示 struct ipq { ...

  4. linux记录登录ip方法

    PS:Linux用户操作记录一般通过命令history来查看历史记录,但是如果因为某人误操作了删除了重要的数据,这种情况下history命令就不会有什么作用了.以下方法可以实现通过记录登陆IP地址和所 ...

  5. Linux内核IP层的报文处理流程(一)

    本文主要讲解了Linux内核IP层的整体架构和对从网卡接受的报文处理流程,使用的内核的版本是2.6.32.27 为了方便理解,本文采用整体流程图加伪代码的方式对Linxu内核中IP整体实现架构和对网卡 ...

  6. TCP层的分段和IP层的分片之间的关系 & MTU和MSS之间的关系 (转载)

    首先说明:数据报的分段和分片确实发生,分段发生在传输层,分片发生在网络层.但是对于分段来说,这是经常发生在UDP传输层协议上的情况,对于传输层使用TCP协议的通道来说,这种事情很少发生. 1,MTU( ...

  7. vivado封装IP

    reference: https://www.cnblogs.com/mouou/p/5851736.html   1.新建一个测试工程 工程化的设计方法是离不开工程的,第一步往往都是新建工程,后面我 ...

  8. 把mysql中的记录封装成集合

    package cn.hu3.com;import cn.hu1.com.JdbcUtils;import java.sql.Connection;import java.sql.PreparedSt ...

  9. 原 TCP层的分段和IP层的分片之间的关系 & MTU和MSS之间的关系

    首先说明:数据报的分段和分片确实发生,分段发生在传输层,分片发生在网络层.但是对于分段来说,这是经常发生在UDP传输层协议上的情况,对于传输层使用TCP协议的通道来说,这种事情很少发生. 1,MTU( ...

随机推荐

  1. python 循环中的else

    众多语言中都有if else这对条件选择组合,但是在python中还有更多else使用的地方,比如说循环for,或者while都可以和else组合. 下面简单介绍一下for-else while-el ...

  2. IE7IE8兼容性设置_服务器端设定

    用ASP.NET开发的web程序,客户端是IE7以上时,需要设置IE的兼容性,否则web页面可能混乱,但这样在每客户端设置不太现实, 对策: ①在站点的配置文件中,修改web.config文件,使得该 ...

  3. ZeroClipboard插件:兼容各浏览器网页复制功能

    常规利用JS编写的网页复制功能只对IE有效,无法做到兼容其它浏览器,代码如下: function copyToClipBoard(){ var clipBoardContent="" ...

  4. VC++ 视频播放器 图文步骤记录

    1.安装DirectShow9.0 SDK DirectShow9 SDK下载链接http://download.csdn.net/detail/jindou910101/5591169 2.运行Di ...

  5. Windows8和MacOS10.9双系统安装及Mac经常使用软件安装--联想E49A

    前提 本篇内容所描写叙述的内容仅仅适合联想E49A笔记本,经过本篇的内容之后,对于Mac OS 10.9的使用达到正常工作使用的标准,完美度已经比較好了. 结果例如以下:显卡.网卡(RTL8168). ...

  6. 关于NSArray的几种排序:

    #利用数组的sortedArrayUsingComparator调用 NSComparator  当中NSComparator事实上就是一个返回NSComparisonResult的block. ty ...

  7. OC对象创建过程

    在利用OC开发应用程序中,须要大量创建对象,那么它的过程是什么呢? 比方:NSArray *array = [[NSArrayalloc] init]; 在说明之前,先把OC的Class描写叙述一下: ...

  8. Android开发周报:Flyme OS开源、经典开源项目解析

    Android开发周报:Flyme OS开源.经典开源项目解析 新闻 <魅族Flyme OS源码上线Github> :近日魅族正式发布了MX5,并且在发布会上,魅族还宣布Flyme OS开 ...

  9. hdu4185+poj3020(最大匹配+最小边覆盖)

    传送门:hdu4185 Oil Skimming 题意:n*n的方格里有字符*和#,只能在字符#上放1*2的板子且不能相交,求最多能放多少个. 分析:直接给#字符编号,然后相邻的可以匹配,建边后无向图 ...

  10. hdu 5071 Chat(模拟)

    题目链接:hdu 5071 Chat 题目大意:模拟题. .. 注意最后说bye的时候仅仅要和讲过话的妹子说再见. 解题思路:用一个map记录每一个等级的妹子讲过多少话以及是否有这个等级的妹子.数组A ...