HTTPS协议深入理解
" class="reference-link">
- 博主简介:想进大厂的打工人
- 博主主页:@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
还没有评论,来说两句吧...