HTTP 传输的弊端
- 如上图,Http进行数据传输的时候是明文传输,导致任何人都有可能截获信息,篡改信息
- 如果此时黑客冒充服务器,或者黑客窃取信息,则其可以返回任意信息给客户端,而且不被客户端察觉,所以我们经常会听到"劫持"这个词
改进HTTP传输-对称加密传输
- 改进版本之后,Client和Service端在进行通信的时候,用对称加密,Client与Servic端分别保存密钥A,通信加密,解密都用A
- 问题点:
- 对称加密一般约定加密算法与密钥A,每个客户端不一样,因此维护困难,一般都维护在Service或者Client某一端,由Service 或者Client生成密钥A后传递给另外一端口, 这样密钥A在传输过程存在泄漏可能
改进HTTP传输-非对称加密
- 以上Client 保存公钥,公开的,所有人可见,Service保存私钥。
- Client发信息用公钥加密发给Service用私钥解密
- Service 发信息用私钥加密发给Client用公钥解密
- 问题:
- 公钥公开的,黑客也能能通过公钥解密获取到的所有Service端发送到Client的信息,造成信息泄漏
改进HTTP传输-对称加密和非对称加密结合使用
-
Client持有公钥,Service 持有私钥,第三步开始Client 生成一个对称密钥A,用公钥加密A得到加密后的字符B
-
Client将B 以及 用A加密后的密文 一起 发送给Service ,Service 用 私钥解密 B 得到A,利用A解密密文的到原文
-
同样Service用A加密要传输的数据得到密文传输给Client用A解密得原文
-
优点:
- 密文安全性,公钥即使泄漏,但是密文是 A加密的,公钥无法解密
- 密钥安全性,A传输过程用公钥加密的,即使被截获,没有私钥也无法解密得不到对称密钥
- 对称加密的优势:对称加密如果能保证秘钥不被黑客获取,那么他是安全的,并且对称加密的速度具有很大优势,用在蜜文加密上
- 非对称加密优势:非对称加密请求发起时候尽管使用的是公钥加密,但是因为必须使用私钥解密的特点,因此能够保证消息体在向服务器用在对称密钥加密上
-
风险点:
- 第一步 公钥获取的时候被截获,公钥不是Service给的,是黑客给的,之后所有请求都是黑客伪造的,Client得到的公钥 和黑客的私钥是匹配的,完犊子
改进HTTP传输- 对称加密+非对称加密+SSL证书(HTTPS实现)
-
首先说明证书作用:如上图,2步骤时候服务器发送了一个SSL证书给客户端,SSL证书中包含的具体内容有:
- 证书发布机构CA
- 证书有效期
- 公钥
- 证书所有者
- 签名
-
客户端在接受服务器发来的SSL证书会对证书进行校验,以浏览器为例说明如下:
- 首先浏览器读取证书中的证书所有者,有效期信息进行校验
- 浏览器开始查找操作系统中已内置的收信人的证书发布机构CA,与服务器发来的证书中的颁发者CA对比,用于校验证书是否为合法机构颁发
- 如果找不到,浏览器报错,说明服务器发来的证书是不可信的。
- 如果找到,浏览器会从操作系统中取出颁发者CA的公钥,然后对服务器发来的证书里面的签名进行解密
- 浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值与证书中签名做对比
- 对比结果一致,则证明服务器发来的证书核发,没有被冒充。
- 此时浏览器就可以读取证书中公钥,用于后续加密了。
-
通过SSL证书,完成了公钥的安全获取,安全性由第三方保证。接下来就是走上一个步骤中说明的:对称加密和非对称加密结合使用过程
-
总的来说,HTTPS实现如下图
- 红色钥匙--私钥
- 绿色钥匙--公钥
- 黄色钥匙--对称密钥
- Client发起请求(443接口)
- Service 返回公钥SSL证书
- Client解析SSL得到公钥
- Client生成对称密钥,并且用得到的公钥给对对称密钥加密传给Service
- Service端的到加密后对称密钥,用私钥解密
- C/S双方用对称密钥
- 加密明文并发送
- 解密密文的到明文