VPN简介与举例

最近看了篇关于VPN原理的文章,发现它的连接建立过程与HTTPS有点相似,并且都是对通信进行了数据加密。

在这里记录下VPN的连接建立过程,想要比较与HTTPS的区别的可以看我的另外一篇博客:https://sunra.top/posts/‘51308784’/。

VPN是用来做什么的

有的公司有多个数据中心,需要将多个数据中心连接起来,或者需要办公室和数据中心连接起来。这该怎么办呢?

  • 第一种方式是走公网,但是公网太不安全,你的隐私可能会被别人偷窥。

  • 第二种方式是租用专线的方式把它们连起来,这是土豪的做法,需要花很多钱。

  • 第三种方式是用 VPN 来连接,这种方法比较折中,安全又不贵。

VPN,全名 Virtual Private Network虚拟专用网,就是利用开放的公众网络,建立专用数据传输通道,将远程的分支机构、移动办公人员等连接起来。

VPN是如何工作的

VPN 通过隧道技术在公众网络上仿真一条点到点的专线,是通过利用一种协议来传输另外一种协议的技术,这里面涉及三种协议:乘客协议、隧道协议和承载协议。

我们以 IPsec 协议为例来说明。

在最前面的时候说了,直接使用公网太不安全,所以接下来我们来看一种十分安全的 VPN,IPsec VPN。这是基于 IP 协议的安全隧道协议,为了保证在公网上面信息的安全,因而采取了一定的机制保证安全性。

  • 机制一:私密性,防止信息泄露给未经授权的个人,通过加密把数据从明文变成无法读懂的密文,从而确保数据的私密性。在讲 HTTPS 的时候,说过加密可以分为对称加密和非对称加密。对称加密速度快一些。而 VPN 一旦建立,需要传输大量数据,因而我们采取对称加密。但是同样,对称加密还是存在加密密钥如何传输的问题,这里需要用到因特网密钥交换(IKE,Internet Key Exchange)协议。

  • 机制二:完整性,数据没有被非法篡改,通过对数据进行 hash 运算,产生类似于指纹的数据摘要,以保证数据的完整性。

  • 机制三:真实性,数据确实是由特定的对端发出,通过身份认证可以保证数据的真实性。

那如何保证对方就是真正的那个人呢?

第一种方法就是预共享密钥,也就是双方事先商量好一个暗号,比如“天王盖地虎,宝塔镇河妖”,对上了,就说明是对的。

另外一种方法就是用数字签名来验证。咋签名呢?当然是使用私钥进行签名,私钥只有我自己有,所以如果对方能用我的数字证书里面的公钥解开,就说明我是我。

基于以上三个特性,组成了 IPsec VPN 的协议簇。这个协议簇内容比较丰富

在这个协议簇里面,有两种协议,这两种协议的区别在于封装网络包的格式不一样。

  • 一种协议称为 AH(Authentication Header),只能进行数据摘要 ,不能实现数据加密。

  • 还有一种 ESP(Encapsulating Security Payload),能够进行数据加密和数据摘要。

在这个协议簇里面,还有两类算法,分别是加密算法和摘要算法

这个协议簇还包含两大组件,一个用于 VPN 的双方要进行对称密钥的交换的 IKE 组件,另一个是 VPN 的双方要对连接进行维护的 SA(Security Association)组件

IPsec VPN 的建立过程

下面来看 IPsec VPN 的建立过程,这个过程分两个阶段。

第一个阶段,建立 IKE 自己的 SA。这个 SA 用来维护一个通过身份认证和安全保护的通道,为第二个阶段提供服务。在这个阶段,通过 DH(Diffie-Hellman)算法计算出一个对称密钥 K。

DH 算法是一个比较巧妙的算法。客户端和服务端约定两个公开的质数 p 和 q,然后客户端随机产生一个数 a 作为自己的私钥,服务端随机产生一个 b 作为自己的私钥,客户端可以根据 p、q 和 a 计算出公钥 A,服务端根据 p、q 和 b 计算出公钥 B,然后双方交换公钥 A 和 B。

到此客户端和服务端可以根据已有的信息,各自独立算出相同的结果 K,就是对称密钥。但是这个过程,对称密钥从来没有在通道上传输过,只传输了生成密钥的材料,通过这些材料,截获的人是无法算出的。

有了这个对称密钥 K,接下来是第二个阶段,建立 IPsec SA。在这个 SA 里面,双方会生成一个随机的对称密钥 M,由 K 加密传给对方,然后使用 M 进行双方接下来通信的数据。对称密钥 M 是有过期时间的,会过一段时间,重新生成一次,从而防止被破解。

IPsec SA 里面有以下内容:

  • SPI(Security Parameter Index),用于标识不同的连接;

  • 双方商量好的加密算法、哈希算法和封装模式;

  • 生存周期,超过这个周期,就需要重新生成一个 IPsec SA,重新生成对称密钥。

当 IPsec 建立好,接下来就可以开始打包封装传输了。

在 IP 头里面,会指定上一层的协议为 TCP。ESP 要对 IP 包进行封装,因而 IP 头里面的上一层协议为 ESP。在 ESP 的正文里面,ESP 的头部有双方商讨好的 SPI,以及这次传输的序列号。接下来全部是加密的内容。可以通过对称密钥进行解密,解密后在正文的最后,指明了里面的协议是什么。如果是 IP,则需要先解析 IP 头,然后解析 TCP 头,这是从隧道出来后解封装的过程。有了 IPsec VPN 之后,客户端发送的明文的 IP 包,都会被加上 ESP 头和 IP 头,在公网上传输,由于加密,可以保证不被窃取,到了对端后,去掉 ESP 的头,进行解密。

与HTTPS的相同点与不同点

二者的相同点都分为两个过程:

HTTPS的公私钥是事先已经在CA申请好的,公钥会随着证书一起发送给对方,私钥留在自己这里,然后第二个阶段利用生成的三个随即字符生成对称秘钥,用对称秘钥来加密HTTP信息;

而IPSec VPN是第一阶段先自己生成一个临时私钥,然后双方交换临时公钥和各自生成的一个随即字符串,通过DH算法各自计算出一个对称秘钥K,只不过二者计算出来的这个对称密钥匙K相同的,第二个阶段在用K生成另一个有时效的对称秘钥M来加密信息。