回顾http协议:
http协议发送的请求或者响应里的2正文数据是不做任何加密的,数据是裸的(原数据是什么样,发送过去的护具就是怎么样),但是在客户端到服务器之间是要通过中间运营商,路由器等中间人的,这样造成了在传输过程中被有心之人抓包,造成数据的泄漏。
https协议就1针对了这种安全问题,在http协议的基础上增加了一层加密解密层(一个应用):https=http+加密解密
关于数据的加密和解密有以下几个名词:
明文:还为加密的数据或已经被解密的数据
秘钥:用于加密明文的数据
密文:被加密后的数据
那么https数据是如何进行加密的呢?
首先我们介绍几种数据加密的方法:
对称加密:双方的使用同一个秘钥对数据进行加密和解密:
这种方法如果保证了秘钥只有双方才知道的话,那么就能保证双方的通信是安全的
特点:加密速度快
非对称加密:
有公钥和私钥两个秘钥且是配对的。且公钥是公有的,私钥是私有的。
但是他的运算速度非常慢
数据摘要(数据指纹)
这其实并不是一种数据加密的方式,但是这项技术对数据安全,和数据管理有很大作用:
一个数据通过一种哈希算法后得到一个散列值,不同的数据用相同的哈希算法后的到的散列值几乎是不一样的,那怕这个数据只是做了细微的改动都会不一样
利用这项技术就可以确认自己的数据有没有被别人修改过。
两个应用场景:
1、当我们用户把密码上传到服务器的时候,可以先用一种haxi算法把密码设置为散列值,然后发送,这样保存到服务器数据库里的密码就算数据库泄露了,也可以保护我们的密码。且服务器的内部人员也都不会知道我们的密码原样。
这也相当于是一种加密。但这种算法是不可逆的,也就是不可以加密的。要想验证拿到的散列值是否正确,需要把数据在做一次相同的哈希算法。
2、网盘中的秒传
——原理,数据指纹可以对照两个文件是否相同
如果在我们向网盘中上传一个文件的时候,先把我们的文件的数据指纹传到网盘的服务器中,如果这个网盘服务器中已经有其他用户上传的文件和我们的文件是一模一样的,那么客户端就不用真的把这个文件慢慢的在上传到网盘中,而是直接为正上传的这个用户创建一个软连接,直接指向网盘相同的文件。这样就实现了我们的秒传:
那么我们的http到底是用那种加密解密方案来进行数据的加密解密的呢?
我们一个一个来验证:
1、如果只用对称加密
2、如果只一方使用非对称加密
3、双方都使用非对称加密
这种方式算是比较安全的了,现实中也确实有这样通信的客户端和服务器,但是别忘了非对称算法的速度是非慢的,而且这种方法也是有安全问题的()
(如果有计算机不停地枚举解密,任然可以解密出来)。——其他的加密也大都可以,但是安不安全并不是这样定义的,如果解密的成本比数据本身的价值高的话,这种加密方式就是安全的。
——这种加密既没有彻底解决安全问题,而且速度非常慢,所以还是不推荐
4、非对称和对称加密结合
师夷长技以制夷
对称加密的问题是,双方在约定秘钥的时候会泄露,但是速度快
非对称的问题是速度太慢,但是在通信的时候相对安全
所以:
但是这种方式任然是不安全的,如果在非对称加密的公钥传输的时候,中间人把公钥篡改为自己的共要后再发给客户端,客户端并不知道这是被改过的。客户端用这个公钥加密数据在发出去后,中间人再用自己的私钥解密,就拿到了数据,然后中国人在用服务器的公钥把数据加密后再发送给服务器,这样就成功骗过了服务器。
这种方法出问题的关键就在于,客户端并不知道自己收到的公钥是被篡改过的。
只要解决了这个问题,那么这个方案也就可行了。
——证书
服务器想要正常的为客户端(浏览器)提供服务的话,首先服务器要去CA机构申请一个证书,以后当客户端请求这个服务器的时候,服务器就不会直接只发一个裸的公钥给客户端,而是会把证书发给客户端
那么这种证书的方法是如何实现客户端不会被骗的呢?
那么就要从证书的结构谈起了;
所以https对数据的加密用的就是这种方案