目录
HTTPS是什么?
HTTPS 也是⼀个应⽤层协议. 是在 HTTP 协议的基础上引⼊了⼀个加密层 .
HTTP 协议内容都是按照⽂本的⽅式明⽂传输的. 这就导致在传输过程中出现⼀些被篡改的.
为什么要加密?
这就不得不提一下臭名昭著的 "运营商劫持".
比如:好像是2017年,"国务院App遭流量劫持"事件,也是上新闻了.国务院app弹出疑似不良广告,经排查"基本确定为用户当地运营商http劫持导致h5页面被插入广告.."(感兴趣的可以去搜一下).
以前,在浏览器下载软件的时候,想要下载的软件跟弹出的下载链接不符合.
正常情况下:
被运营商劫持的情况下:
分析整个过程:
点击 "下载按钮", 其实就是在给服务器发送了⼀个 HTTP 请求, 获取到的 HTTP 响应其实就包含了该APP 的下载链接. 运营商劫持之后, 就发现这个请求是要下载天天动听, 那么就⾃动的把交给⽤户的响应给篡改成 "QQ浏览器" 的下载地址了.
不⽌运营商可以劫持, 其他的 ⿊客 也可以⽤类似的⼿段进⾏劫持, 来窃取⽤户隐私信息, 或者篡改内容.
在互联⽹上, 明⽂传输 是⽐较危险的事情!!!
HTTPS 就是在 HTTP 的基础上进⾏了加密, 进⼀步的来保证**⽤户的信息安全**。
加密是什么?
加密: 就是把 明⽂ (要传输的信息)进⾏⼀系列变换, ⽣成 密⽂ .
**解密:**就是把 密⽂ 再进⾏⼀系列变换, 还原成 明⽂ .
比如:83 版 <<⽕烧圆明园>> , 有⼈要谋反⼲掉慈禧太后. 恭亲王奕䜣给慈禧递的折⼦. 折⼦内容只是扯⼀扯家常, 套上⼀张挖了洞的纸就能看到真实要表达的意思.
明⽂: "当⼼肃顺, 端华, 戴恒" (这⼏个⼈都是当时的权⾂, 后来被慈禧⼀锅端).
密⽂: 奏折全⽂.
密钥: 挖了洞的纸.
HTTPS工作流程
引入对称加密
对称加密就是通过同一个"密钥",设密钥为key.
明文 + key => 密文 ;密文 + key => 明文.
这没有我们想的这么简单,服务器可不是只服务一个客户端,所以,每个客户端的密钥都是不同的,服务器就要维护每个客户端和每个密钥之间的关联关系!!!
比较理想的方式:每个客户端,在和服务器建立连接的时候就把密钥给生成出来!!!
客户端再把自已的密钥通过网络传输给服务器.
这时候传输的密钥可相当于是明文传输,如果被黑客截获可就直接凉凉了----裤衩子都被看光了!!!在对称加密的基础就需要引入非对称加密了.
引入非对称加密
非对称加密就要用到两个密钥,一个 公钥,一个 私钥.
公钥和私钥是配对的.是由服务器生成的,服务器把私钥藏好,公钥返回给客户端.
- 通过公钥对明文加密,私钥对密文进行解密
- 或者反着用,私钥加密,公钥解密
过程分析:
- 客户端在本地⽣成对称密钥, 通过公钥对 对称密钥进行加密, 发送给服务器
- 如果黑客拿到加密后的 对称密钥,也是无能为力的,公钥加密需要私钥解密,私钥只有服务器才有,也就无法获取对称密钥.
- 服务器通过私钥解密, 还原出客户端发送的对称密钥. 并且使⽤这个对称密钥加密给客户端返回的响应数据
大家会不会有这样的疑问?
既然已经引入了非对称加密了,为啥还还需要引入对称加密?直接使用非对称加密,来完成所有的业务数据的传输不好吗?
进行非对称加密:加密 / 解密 , 运算成本是比较高的.运算速度也是比较低的.
而对称加密 : 加密 / 解密 ,运算成本低, 速度快. 业务数据使用非对称加密,整体的效率就会大大折扣.
所以,使用非对称加密,只需要进行关键环节,比如:传输密钥. 这种一次性工作,成本比较可控.
中间人攻击
过程分析:
- 黑客自己也生成一对非对称密钥:公钥 pub2 , 私钥 pri 2
- 当客户端询问公钥的时候,服务器响应返回一个公钥pub1,经过黑客的设备就把pub1替换成了pub2
- 客户端就会基于pub2进行加密对称密钥,黑客就通过自己的pri2进行解密,拿到了对称密钥,于是又把对称密钥基于pub1进行加密,重新使用pub1就是为了瞒天过海,骗过服务器.
上诉过程存在问题就是:
- 客户端如何获取到公钥?
- 客户端如何确定这个公钥不是⿊客伪造的?
引入证书
之所以能进行中间人攻击,关键点在于客户端没有"分辨能力",客户端不知道当前这个公钥是不是黑客伪造的!!!所以,就需要引入都被大家信任的第三方"公正机构",就可以说明当前这个公钥不是伪造的,是可以信任的.
这个 证书 可以理解成是⼀个结构化的字符串, ⾥⾯包含了以下信息:
- 证书发布机构
- 证书有效期
- 公钥
- 证书所有者
- 数字签名
- ......
颁发证书的时候,公正机构就会针对证书的各个属性,计算出一个校验和,并且针对这个校验和进行加密 ,就得到了数字签名.
这个加密也是非对称加密,公正机构自己生成一对公钥和私钥 跟 服务器的不一样,公正机构就会自己持有私钥,而公钥往往就内置在我们的系统中,Windows系统、Linux系统......,就会自带公钥.
过程分析:
- 服务器向 公正机构提出申请,审核通过就会给服务器颁发一个"证书".
- 客户端请求建立连接(你的证书是是啥),服务器响应返回一个证书(包含服务器公钥).
- 客户端就得到了一个证书,通过系统内置的公钥对证书进行解密,就拿到了公钥,就需要验证这个公钥是否是服务器最初的公钥,这个过程被称为"证书的校验".
- 证书的校验:核心机制就是"数字签名" => 被加密后的校验和,通过系统内置的公钥进行解密,得到⼀个 hash 值(称为数据摘要), 设为 hash1. 然后计算整个证书的 hash 值, 设为 hash2. 对⽐ hash1 和 hash2 是否相等. 如果相等, 则说明证书是没有被篡改过的,公钥是可信的!!
在上诉机制下,黑客就无法对证书里的内容进行篡改了,即使篡改,也是很容易被发现的.
当黑客收到证书之后,如果直接修改里面的公钥,替换成自己的,客户端在进行证书校验的时候,就会发现校验和不一样!!客户端就认为被篡改过了,就会弹出一些对话框的形式来警告用户,存在安全风险!!!(比如你访问一些"奇奇怪怪"的网站,就很有可能会遇到这种情况~)
总结
完整流程
https加密:
- 对称加密,加密业务数据
- 非对称加密,加密对称密钥
- 中间人攻击
- 引入证书,校验服务器公钥