概念:HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层. HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况.
运营商劫持:
对称加密:通过同一个 "密钥" , 把明文加密成密文, 并且也能把密文解密成明文;
加密后,即使数据被截获,没有密钥,黑客就不知道内容是啥了
但是,由于服务器对应着多个客户端,而且每个客户端的密钥不相同,(相同密钥容易扩散,等于未加密),由此服务器的维护成本非常高;
故而需要在连接的时候双方协商确定这次的密钥是啥,协商的同时也需要加密协商,不能明文传输,但是要想对密钥进行对称加密, 就仍然需要先协商确定一个 "密钥的密钥". 这就成了 "先有鸡还是先有蛋" 的问题了. 此时密钥的传输再用对称加密就行不通了.
非对称加密:非对称加密要用到两个密钥, 一个叫做 "公钥", 一个叫做 "私钥".
公钥和私钥是配对的. 最大的缺点就是运算速度非常慢,比对称加密要慢很多.
对于公钥和私钥谈谈自己的理解:
公钥和私钥都是由服务器生成,是一对的;服务器的公钥大家都知道,但是数据经过公钥加密后,不能利用公钥解密,只能用服务器生成的私钥解密,故而就算加密好的数据被黑客拿到也没什么用;
客户端通过公钥将对称密钥进行加密,传输给服务器,服务器通过私钥解密得到对称密钥,建立连接后,下面通过对称密钥进行对称加密传输;(非对称加密慢)
中间人攻击:就是在客户端和服务器传输对称密钥时,黑客介入了,相对于客户端,黑客充当假的服务器,对于服务器,黑客充当假的客户端;这就需要客户端在传输对称密钥时判断服务器的公钥是否正确,是否是黑客伪造的;
证书:在客户端和服务器刚一建立连接的时候, 服务器给客户端返回一个 证书. 这个证书包含了刚才的公钥, 也包含了网站的身份信息.
服务器(网站)在建立初期,需要到专门的认证机构去申请证书,而公钥就包含在证书里;
客户端向服务器请求公钥的同时,是将整个证书都请求过来;
客户端得到证书后,整数中都会带有一个特定的字段,叫证书的签名,通过签名可以进行校验;
签名本质是被加密过的字符串;
认证机构也有一组公钥私钥;
客户端用认证机构的公钥对签名进行解密,得到hash1,然后使用同样的hsah算法针对字段算得hash2,看hash1和2是否相同;
https中三组密钥: