- 博主简介:想进大厂的打工人
- 博主主页:@xyk:
- 所属专栏: JavaEE初阶
目录
文章目录
一、HTTPS协议的由来及概念
二、加密是什么
三、HTTPS的工作流程
3.1 使用对称密钥
3.2 引入非对称加密
3.3 中间人攻击
3.4 引入证书
一、HTTPS协议的由来及概念
HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层,其他方面基本和HTTP协议一致~~~
那么为什么要有HTTPS?它能解决什么问题?
因为HTTP协议内容都是按照文本的方式明文传输的,这就导致在传输过程中出现一些被篡改的情况,最出名的就是“运营商劫持”!!!
什么是 “运营商劫持”?
所谓运营商劫持,就是运营商通过交换机或者路由器上面转发的数据,在他的其他设备上部署一个小小的抓包程序识别到特定包,从而做出修改~~
比如下载一个天天动听,未被劫持的效果, 点击下载按钮, 就会弹出天天动听的下载链接
已被劫持的效果, 点击下载按钮, 就会弹出 QQ 浏览器的下载链接
点击 "下载按钮", 其实就是在给服务器发送了一个 HTTP 请求, 获取到的 HTTP 响应其实就包含了该 APP的下载链接. 运营商劫持之后, 就发现这个请求是要下载天天动听, 那么就自动的把交给用户的响应给篡改成 "QQ浏览器" 的下载地址了.
HTTPS就是为了解决这一问题,在HTTP基础上进行了加密来保证信息安全
二、加密是什么
加密:针对 HTTP 的各种 header 和 body 进行加密
一组重要的概念:
- 明文:实际要传达的信息
- 密文:转换后得到的信息
- 把明文 => 密文 :加密
- 把密文 => 明文 :解密
在加密和解密的过程中,需要一个关键的钥匙 => 密钥
加密解密到如今已经发展成一个独立的学科: 密码学
而密码学的奠基人, 也正是计算机科学的祖师爷之一, 艾伦·麦席森·图灵
计算机领域中的最高荣誉就是以他名字命名的 "图灵奖"~~
对于密码学,我们不讨论细节算法,只考虑宏观的流程~~
三、HTTPS的工作流程
既然要保证数据安全, 就需要进行 "加密",网络传输中不再直接传输明文了, 而是加密之后的 "密文".加密的方式有很多, 但是整体可以分成两大类: 对称加密 和 非对称加密
对称加密:只有一个密钥,key
- 明文 + key => 密文
- 密文 + key => 明文
加密和解密使用同一个密钥~~对称加密的特点,计算速度快
非对称加密:需要两个密钥,一个叫做 公钥(pub),一个叫做私钥(pri),使用其中哪个加密,就用另一个解密即可~~
- 明文 + pub => 密文
- 密文 + pri => 明文
或者
- 明文 + pri => 密文
- 密文 + pub => 明文
3.1 使用对称密钥
客户端生成对称密钥,通过网络传输,传给服务器.
如果中间出现了黑客要盗取数据,应该怎么办?
黑客如果没有密钥 key,此时黑客拿到密文之后,是不知道真实信息的,自然就无法篡改信息,安全性就大幅度提升了.
服务器对应的客户端,有很多个,不是只有一个,如果只有一个的话,那么黑客也可以作为其中一个的客户端,来进行盗取所有信息,所以不同的客户端,使用的密钥,是不同的!!
那么既然客户端,需要自己生成一个密钥,前面我们说了,密钥通过网络传输传给服务器!!!也就是说黑客在其中截获,黑客是知道密钥的!!!
看起来是需要针对 key 也进行加密,难道要生成一个 key2吗?使用key2 加密 key吗??那么key2也要通过网络传输,传给服务器,这样自然行不通的,就要考虑其他方法!
3.2 引入非对称加密
客户端是希望把自己的 key 安全的传输给服务器,不被黑客拿到.于是服务器生成一对非对称密钥~
首先,客户端询问服务器你的 pub公钥是啥??于是服务器将公钥通过网络传输将 pub公钥 传给服务器
这个时候黑客和客户端都拿到了公钥 pub,随后客户端使用 pub 针对 key 进行加密进行网络传输给服务器,因为黑客是没有 pri 私钥,是无法解密的,只能使用 pri 来解开 pub!!!黑客无法解密,就拿不到 对称密钥 key.
后续传输信息,客户端和服务器都拿着 客户端生成的 对称密钥key 来加密数据,进行传输,由于黑客没用拿到 对称密钥 key,自然不能篡改~~~
客户端和服务器的业务数据传输,仍然是使用对称加密的方式,(对称加密速度快,成本低),为了保证对称密钥能够安全到达服务器,引入了非对称密钥,来保护对称密钥的传输~
3.3 中间人攻击
我们说 安全是”相对的“,黑客也不是吃素的!!!于是黑客自己生成了一对非对称密钥,来进行篡改数据,这个过程叫做中间人攻击.
此时客户端还是询问服务器你的 公钥 pub 是啥?服务器返回它的 公钥 pub,但是黑客在中间截获了,将 公钥 pub 改成了自己生成的 公钥 pub2,通过网络传输给了客户端,于是客户端认为这个就是服务器的 公钥pub!!!
随后客户端 使用 公钥 pub2 来进行加密 对称密钥key 进行传输,因为是用黑客的 公钥 pub2来进行加密的,黑客自然就能使用 私钥pri2 来进行解密,于是黑客拿到了 对称密钥key,再将 key 使用 服务器的pub 来进行加密 传送给 服务器.至此,黑客就拥有了盗取客户端和服务器的数据能力,之后的信息传输都是可以被截获的.
记住,这个过程里面有五把钥匙~~~
3.4 引入证书
中间人攻击,破解的关键,就是在于让客户端信任公钥!!!
下面这里也是有五把钥匙~~
先了解一下证书,所谓证书包括了:
- 服务器的 url
- 证书的过期时间
- 颁布证书的机构是什么
- 服务器自己的公钥 pub
- ...........
- 加密后的签名
所谓签名:就是一个校验和,针对证书的所有属性,进行计算的~~再由证书颁布机构,使用自己的私钥对于这个签名进行加密!!!
此处,我们要明确,如果数据相同,按照相同的算法计算得到的签名,也一定相同!!!
反之,如果签名不同了,说明原始的数据一定不同
在这个过程中,客户端首先去询问服务器你的证书是啥?于是服务器将证书返回给客户端~~
客户端拿到证书之后,就首先要针对证书进行校验:
- 得到初始的签名:客户端使用系统中内置的权威机构的 公钥 pub2,针对上述证书中的 加密签名进行解密,得到了初始签名(这个签名是权威机构算出来的)(此处设为sum1)
- 计算现在的签名:客户端使用相同的签名计算算法,基于证书中的属性重新计算,(得到sum2)
- 比较两个签名是否相同,如果相同,说明证书中的数据都是未被篡改的原始数据!!如果签名不同,说明证书的数据被篡改过,客户端的浏览器会弹框报错!!
此时,我们有个疑问,那么此时黑客不会进行修改服务器的公钥吗?
答案是黑客是可以的修改服务器的公钥,但是会在客户端检验签名的时候报错,此时客户端就会发现数据被篡改过,就不再进行数据传输了!!
黑客要篡改,怎么做呢?
- 黑客把证书中的 服务器的公钥(pub),替换成自己的公钥
- 黑客针对证书的各个属性,重新计算签名
- 黑客需要把签名,重新加密!!想要加密,就要知道权威机构的私钥(pri2),但是这个钥匙是可能知道的!!!
此处安全的关键,不是黑客”看不到“,而是黑客”改不了“
上述介绍的这一套,(对称加密 + 非对称加密 + 证书)叫做SSL或者TLS, 这一套流程,不仅仅是 HTTPS 会涉及到,其他的场景也会用到~
HTTPS = HTTP + SSL