🏀🏀🏀来都来了,不妨点个关注!
🎧🎧🎧博客主页:欢迎各位大佬!
1. HTTPS的概念
在介绍HTTPS的加密过程之前我们先介绍下HTTPS的概念,HTTPS也是一种应用层协议,是在HTTP协议上引入了一个加密层。那么都有了HTTP协议了为什么还要搞个HTTPS协议呢,这是因为HTTP协议是明文传输的,而在网络传输的过程,明文传输都是存在被劫持,被篡改的风险的。HTTPS就是在HTTP的基础上进行加密,进一步保护用户的信息安全。
2.什么是加密
加密就是把明文经过一系列变换,生成密文。
解密就是把密文经过一系列变换,还原成明文。
3. HTTPS的工作流程
既然要保证在网络上传输的数据是安全的,就需要进行“加密”。
网络传输中不再直接传输明文了, 而是加密之后的 “密文”。
加密的方式有很多种,整体上分为两种:对称加密和非对称加密。
3.1 引入对称加密
在最开始我们说用HTTP协议传输数据的时候是明文传输,容易被劫持和篡改,现在我们对明文进行对称加密,对称加密就是用同一个“密钥”将明文加密成密文,并且能将密文解密成明文。
如下图:
这个就是最基础的对称加密的传输过程,这样,即使数据被截获,由于黑客不知道密钥是什么,因此就无法进行解密,就不知道要传输的内容了。但事实上,网络传输真的这么简单吗?肯定不是啦,服务器同一时刻其实是给多个客户端提供服务的,这么多客户端,每个客服端的密钥必然都不相同,因为如果都用一个密钥的话,那么黑客也可以作为一个客户端拿到这个密钥,那这样又变成明文传输了。那么,既然是不同的客户端,不同的密钥,此时就需要客户端与服务器在连接的时候,各自生成一个互不相同的密钥。既然客户端需要各自生成一个密钥,那么它是如何将这个密钥告诉服务器的呢?也是通过网络传输。那么就会出现如下的情况了:
客户端生成自己的密钥后就将这个key通过网络传输给服务器,此时也可能被黑客截获,黑客就知道密钥了,此时你们肯定会说,那是因为你没对密钥进行加密呀,那我们对密钥进行加密,那么对密钥加密的这个密钥如何让服务器知道呢,是不是也得通过网络传输给服务器,那么是不是也可能被黑客截获,如此循环,是不是得考虑换个方法加密了呢?
3.2引入非对称加密
引入非对称加密的原因无非是想将密钥安全能传输给服务器,值得注意的是,客户端与服务器之间的业务数据传输依旧还是对称加密(传输速度快,成本低),为了保证对称密钥(key)安全的到达服务器,引入了非对称加密,保护对称密钥。非对称加密在对称密钥传输完成后就不用了。下面,我们先画图来解释这个过程:
需要注意的是:这对非对称密钥是服务器提供的。
这个时候,虽然客户端和黑客都拿到了公钥pub,但因为没有与之相对的私钥pri,所以黑客无法对pub加密的密文进行解密,就拿不到key,即对称密钥key就安全的传输到了服务器,此时就可以利用对称加密进行数据的传输了。
小结:
1.非对称加密是为了将对称密钥安全的传输给服务器而引用的,在将对称密钥安全传输给服务器后就不用了,后续还是用对称密钥进行数据的传输。
2.非对称密钥pub和pri是由服务器提供的,且私钥pri是服务器私有的,不会进行传输
3.公钥和私钥一般是比较大的整数,这两个整数谁当公钥谁当私钥都可以。
4.公钥pub和私钥pri只是约定,服务器留着的数字就是私钥,而公布给客户端的数字则是公钥。
需要注意的是,黑客也不会“吃素”的,他也会通过"欺骗"的方式来骗取我们的数据,这就是我们说的中间人攻击。
3.3 中间人攻击
中间人攻击,顾名思义,就是攻击者躲在通信双方之间,窃听甚至篡改通信信息,而这个攻击是不可见的,通信双方并不知道消息已经被截获甚至篡改了。
在这里就是黑客通过伪造服务器的公钥和私钥来进行攻击的手段。下面,我们画图解释:
此时,黑客自己生成一对非对称密钥pub2和pri2,同时,黑客把服务器的公钥记住,通过自己的pri2黑客拿到了客户端的对称密钥key,此后客服端与服务器进行的对称加密对黑客来说就是明文传输了,因为黑客知道客户端的key。
破解中间人攻击的关键是让客服端能知道服务器传回来的pub是不是被篡改了,这就是下面我们要介绍的方法。
3.4 引入证书
这个"证书"不是一个"纸质"的证书,而是一串数据(类似于一个对象,里面有很多属性),是数字证书,包括以下属性:
- 服务器的url
- 证书的过期时间
- 颁发证书的机构
- 服务器自己的公钥pub
- 加密的签名(先对证书的所有数据计算一个校验和,然后由证书自己的私钥pri对签名进行加密)
- …
那么客户端找服务器要的就不是服务器的公钥pub了,而是直接要证书了。
需要注意的是,此时我们有五把钥匙,分别是客户端的对称密钥key,服务器的非对称密钥pub1和pri1,还有证书自己的非对称密钥pub2和pri2。并且,由于颁发证书的机构就几个,所以每个客户端的操作系统都自带了证书的公钥pub2,包括黑客的操作系统。此时,过程如下:
客户端拿到证书后,首先会对证书进行校验:
- 得到初始签名:通过由证书提供的公钥pub2对签名进行解密,拿到初始签名,记为sum1
- 计算现在的签名:客服端使用同样的签名算法,基于证书的所有属性,计算签名sum2
- 比较两个签名是否相同,如果相同,说明证书的内容没有被篡改,如果不相同,说明证书的内容被篡改了,此时客户端的浏览器会弹窗报错!!!
为啥我们说黑客现在不能篡改了呢?
黑客如果要对证书内容进行修改:
1.黑客将证书中服务器的pub1改成自己的pub
2.黑客针对证书的各种属性重新计算签名
3.黑客将证书的内容重新加密,但黑客是不知道证书的私钥pri2的,所以无法进行加密。(此处是关键,黑客并不是"看不到",而是"改不了")
这样,我们引入证书后,黑客就改不了数据了,这样客户端的对称密钥key就能安全到达服务器了,客户端和服务器之间就可以进行由key加密的密文传输了。
写到这里,我们HTTPS的加密过程就结束了,如果文章有错误的地方,还请各位大佬指出。