目录
HTTPS是什么
- 前面说了HTTP协议,其实HTTPS和他底层是一样的,只是HTTPS在HTTP协议的基础之上加了一个加密层,那么数据就不是明文传输的了,如果使用我们Fiddler这样的抓包工具,抓到了包也不知道我们传输的具体内容是什么了。
- 为啥要使用HTTPS呢,上面说了本质是对我们传输的数据进行加密,在讲解HTTP协议的时候,我们说了报头里面的一个字段Refer大部分用来记录跳转到广告页面的页面是哪一个,方便广告主统计是那个页面跳转的付给对方应有的报酬, 在互联网早期的时候我们大部分公司使用的都是HTTP协议来明文传输数据,这个时候我们要进行网络传输都要经过运营商的路由器/交换机,这个时候有一些运营商就让路由器解析到应用层拿到HTTP里面的内容把Refer字段进行修改成自己的页面跳转到广告页面,这个时候导致内容被恶意篡改了,那么付给原打广告公司的广告费就到了运营商的钱包里面了
如何解决明文传输导致的危险
- 解决明文传输的危险就是不再使用明文传输而是对我们传输的数据进行加密。这样我们黑客无法查看并且修改我们的数据,'
加密操作的几个概念
- 明文:要传输的真实数据,可以直接读取理解他的意思。
- 密文:把明文加密后的数据,无法直接读取并且理解意思。
- 密钥:加密和解密的关键工具。就如同我们的钥匙既能上锁,也可以解锁。
- 对称加密:加密和解密是用同一个密钥
- 非对称加密:加密和解密是不同的密钥。两个密钥是成对的,如:k1和k2
- k1可以用来加密,k2可以用来解密
- k2也可以用来加密,k1也可以用来解密
两个密钥:一个公开出去叫做公钥,一个不公开出去叫做:私钥。也就是如果一个只能用来加锁另一个只能解锁。
具体加密方式--对称加密
- 客户端/服务器先通过网络设备传输加密的密钥给对端,让他知道我们后面的加密密钥是用的什么,后续密文传输就可以通过密钥来解密。

- 这里看似是安全了后面可以直接用密文传输,但是如果我们黑客把网络设备(这里是路由器)入侵了,通过网络设备抓包到了我们传输的数据那么我们之前明文传输的密钥不就让黑客知道了吗,这个时候黑客也拿到了这个密钥,那么后续传输的密文都可以用这个密钥来解密,这不相当于是没有加密吗?

具体加密方式--非对称加密
- 对于上面对称加密方式如果我们黑客入侵了拿到了既能加密又能解密的密钥,黑客就可以为所欲为了,仔细想一想黑客能解密的关键就是这个密钥既可以加密又可以解密而且采用的是明文传输,那么现在非对称加密传输:我们的解密的密钥不再采用加密传输,我们客户端拿到的是公钥用来加密,我们服务器拿到的是私钥用来解密,客户端密文传输对称公钥给服务器告诉他用这个对称密钥进行加密传输,后面服务器说好的,并采用密文响应返回客户端解密的私钥,这个时候我们黑客入侵的网络设备就只知道是非对称加密的公钥是什么,但是不知道解密的私钥是什么,因为我们解密的私钥采用的是密文传输,那么黑客就没办法拿到后续对称密钥加密的密钥了
- 当客户端收到解密的私钥后,后续直接采用对称加密进行传输,反正黑客入侵的网络设备并不知道对称密钥是什么,只有客户端和服务器知道解密的对称密钥是啥。

只使用非对称加密进行传输是否可行?
可以但是并不建议,因为我们如果只使用非对称加密进行传输的话,因为我们非对称加密的加密解密成本(消耗的 CPU 资源)远远高于对称加密,所以大规模使用的话会非常消耗CPU资源。
- 但是非常遗憾的是这样看似安全的加密方式还是有缺陷,我们客户端从哪里获取公钥来加密传输,答案是服务器。那么要从服务器获取公钥,中间一定要靠黑客入侵的网络设备来当中间传输。黑客就有机可乘了。
- 因为我们客户端需要向服务器索要用来加密的公钥,这个时候一定会经过黑客入侵的网络设备,并且拿到的公钥也是由黑客入侵的网络设备返回的,这个时候客户端并不能判断黑客入侵的网络设备返回的公钥到底是不是服务器返回的。有没有被修改过。
- 这个时候黑客入侵的网络设备伪装成服务器给客户端pub2公钥,客户端也无法判断他到底是不是服务器的,就直接相信了,之后传输对称公钥就使用pub2公钥进行加密传输, 那么被黑客入侵的网络设备那里就要pri2可以解密pub2密文,这个时候就知道了我们后续传输使用的对称公钥。后续采用对称加密传输的时候就可以直接解密拿到明文数据了。对于这种攻击方式,叫做中间人攻击,服务器和客户端都无法识别对方的身份,直接无条件信任导致被欺骗


具体加密方式--引入证书
- 导致我们非对称加密失败的原因主要就是我们服务器和客户端无条件信任了被黑客入侵的网络设备传输的数据,找到了问题所在,我们就需要对现在的问题给出解决方案:对我们被黑客入侵的网络设备传输的公钥进行验证真假。就像我们验证一个人的身份需要出把身份证刷公安系统,验证身份证的真假
- 什么是证书: 证书就是一个结构化的字符串,由公证机构来颁发。
- 证书又是如何来验证数据的呢?通过计算证书的字段得出检验和,然后用我们公证机构的pri3私钥进行加密就得到了数字签名

- 这个时候我们客户端不再直接向服务器索要公钥,而是问证书,如果黑客依旧故技重施把证书的数据(比如公钥)修改了,>我们客户端哪里会用公证机构的pub3解密数字签名拿到校验和,采用同样的计算方式来把证书的字段算出一个校验和(来比对证书里面校验和,如果不一致,那么客户端拒绝传输后面的数据。

还有问题:
1.黑客是否可以把数字签名修改了来欺骗客户端呢,答案是不行的,因为黑客只有pub3只有解密数字签名,没有用来加密的pri3就不能生成数字签名(除非把公证机构黑了拿到pri3,但几乎不可能也没必要)
2.那么我们黑客是否可以再故技重施对公证机构申请一个证书,然后把公证机构的证书换掉,进行中间人攻击呢?还是不行的,证书中还需要包含服务器的域名,域名是唯一的,黑客申请的证书的域名,和原服务器的域名肯定是不同的。
客户端拿到证书之后,一看域名都不一样,直接就知道证书是假的了,都不用进行校验和验证了
当然,上述的过程,所谓的安全,也不是绝对的安全。上述的安全本质上都是基于非对称加密体系。非对称加密体系也不是无懈可击的,只不过破解这样的加密体系,需要的计算量非常大,超出了现有计算机的算力上限。
随着算力的提升,尤其是量子计算机崛起,我们的算力又会大幅度提升,对现有的密码学体系就会造成重大冲击