https连接建立过程学习笔记

1.HTTPS简介

    HTTPS是在 HTTP(超文本传输协议)基础上提出的一种安全的 HTTP协议,因此可以称为安全的超文本传输协议。HTTP 协议直接放置在 TCP 协议之上,而 HTTPS 提出在 HTTP 和 TCP 中间加上一层加密层。从发送端看,这一层负责把 HTTP 的内容加密后送到下层的 TCP;从接收方看,这一层负责将 TCP 送来的数据解密还原成 HTTP 的内容。

2.消息加密过程

2.1 对称**

    HTTP是属于应用层的协议,它是基于TCP/IP的,所以它只是规定一些要传输的内容,以及头部信息,然后通过TCP协议进行传输,依靠IP协议进行寻址,通过一幅最简单的图来描述:
https连接建立过程学习笔记    客户端发出请求,服务端进行响应,就是这么简单。在整个过程中,没有任何加密的东西,所以它是不安全的,中间人可以进行拦截,获取传输和响应的数据,造成数据泄露。
    因为上图中数据是明文传输的,我们能想到最简单的提高安全性的方法就是在传输前对数据进行加密,如下图:
https连接建立过程学习笔记
    这种加密方式叫做:对称加密。加密和解密用同一个秘钥的加密方式叫做对称加密。这是一个客户端,但是在WWW上,是成千上万的客户端,为所有的客户端都应用同一个秘钥A,这种方式很显然是不合理的,**了一个用户,所有的用户信息都会被盗取:
https连接建立过程学习笔记
    如果对每一个客户端都用不同的秘钥进行传输是不是就解决这个问题了:
https连接建立过程学习笔记

2.2 非对称**

    我们对每个客户端应用不同的对称加密秘钥,那么这个秘钥客户端或者服务端是如何知道的呢,只能是在一端生成一个秘钥,然后通过HTTP传输给另一端。
    那么这个传输秘钥的过程,又如何保证加密?如果被中间人拦截,秘钥也会被获取。也许你会说,对秘钥再进行加密,那又如何保证对秘钥加密的过程,是加密的呢?
    在对称加密的路上走不通了,我们换个思路,还有一种加密方式叫非对称加密,比如RSA。非对称加密会有一对秘钥:公钥和私钥公钥加密的内容,只有私钥可以解开,私钥加密的内容,所有的与之对应的公钥都可以解开
https连接建立过程学习笔记
    私钥只保存在服务器端,公钥可以发送给所有的客户端。
    在传输公钥的过程中,肯定也会有被中间人获取的风险,但在目前的情况下,至少可以保证客户端通过公钥加密的内容,中间人是无法**的,因为私钥只保存在服务器端,只有私钥可以**公钥加密的内容。
    现在还存在一个问题,如果公钥被中间人拿到篡改呢:
https连接建立过程学习笔记

2.3 三方认证

    公钥被掉包,是因为客户端无法分辨传回公钥的到底是中间人,还是服务器,这也是密码学中的身份验证问题。
    在HTTPS中,使用 证书 + 数字签名 来解决这个问题。
https连接建立过程学习笔记
    数字证书 = 网站信息 + 数字签名
    假如中间人拦截后把服务器的公钥替换为自己的公钥,因为数字签名的存在,会导致客户端验证签名不匹配,这样就防止了中间人替换公钥的问题。
    为什么要有数字签名这个东西呢?第三方认证机构是一个开放的平台,我们可以去申请,中间人也可以去申请呀:
https连接建立过程学习笔记
    如果没有签名,只对网站信息进行第三方机构私钥加密的话,会存在下面的问题:
https连接建立过程学习笔记
    因为没有认证,所以中间人也向第三方认证机构进行申请,然后拦截后把所有的信息都替换成自己的,客户端仍然可以解密,并且无法判断这是服务器的还是中间人的,最后造成数据泄露。

2.4 连接建立过程

    在安全的拿到服务器的公钥之后,客户端会随机生成一个对称秘钥,使用服务器公钥加密,传输给服务端,此后,相关的 Application Data 就通过这个随机生成的对称秘钥进行加密/解密,服务器也通过该对称秘钥进行解密/加密。
    HTTPS中SSL连接建立的过程如下所示:
https连接建立过程学习笔记

3.总结

    HTTPS就是使用SSL/TLS协议进行加密传输,让客户端拿到服务器的公钥,然后客户端随机生成一个对称加密的秘钥,使用公钥加密,传输给服务端,后续的所有信息都通过该对称秘钥进行加密解密,完成整个HTTPS的流程。

主要参考博客:
https://www.kuacg.com/22672.html