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来加密信息。