HTTPS的工作过程
我们不去研究加密算法是怎么去实现的这个属于数学问题
1.引入对称加密
生产一个密钥,明文到密文,通过这个密钥进行.
密文到明文,也通过这个密钥来进行
比如
有一个数字 int a; 随便拿一个数字 int k; a ^ k = b; 网络上传输这个 b,收到 b ,拿着 b 再次进行异或b ^ k => a;(简单的对称加密)
此时客户端给服务器发送的是通过 key 进行对称加密的密文,黑客就算知道数据是啥,由于没有密钥,也就无法知道明文,然后服务器收到数据后,在对加密后的数据进行解密
HTTP协议来说,首行是不加密的,header 和 body 都是进行加密的
但是上述方案,不太可行
一个服务器要给很多的客户端提供服务,服务器和这些客户端的通信过程中,使用的密钥,是同一个,还是不同的呢?
答案很明显是不同的 每个通信的客户端,都需要有不同的密钥,不能都一样!
既然每个客户端的密钥是不同的,那就得有生成一个"随机的密钥"作为这次通信使用.可以是客户端负责生产,也可以是服务端生产,但是无论是谁生产,都需要去通知对方
客户端负责生成密钥,比如是 666 (真实的密钥是一段非常长的字符串)
上述的密钥传输,也经过了黑客的设备,黑客也就可以知道了
问题:需要告诉对方密钥是啥,但是密钥不能明文传输,比如如果在对密钥进行一次对称加密.
比如密钥是 key,使用另一个密钥 key2 针对 key 进行加密,把 key 密文传输给对端,但是如果不把 key2 告诉服务器,服务器也完成不了解密这个过程,拿不到 key,如果把 key2 传输给对方,这样黑客也就获取到了,成功完成套娃,脱裤子放屁,多此一举
2.引入非对称加密,
非对称加密右两个密钥,这两密钥其中一个可以公开出去,谁都可以获取,叫公钥,另一个不能公开自己持有,叫私钥
比如使用公钥加密,就使用私钥解密
使用私钥加密,就使用公钥解密
对称加密保护数据,本身是比较安全的,关键是 对称密钥 要能安全的传输给对方,引入的非对称加密的主要目的,就是传输对称密钥的
为啥不直接拿非对称加密传输数据呢?
非对称加密,加密的计算成本,远高于对称加密
公钥私钥,是服务器生产的一个密钥对.私钥服务器自己持有,公钥公开出去,所有人都可以截取到
客户端就可以使用公钥,对对称密钥进行加密了
当前的数据,到达黑客的设备,黑客是没有任何办法,黑客手里面只有公钥,无法进行解密
服务器拿着私钥进行解密,获取到对称密钥是 666
问题
黑客问什么不直接入侵服务器,这样不就拿到私钥了吗?
有可能,但是是存在门槛的(nb的黑客都在公安机关备过的,不入流的也黑不进去),入侵运营商的设备,大概率是比入侵一个企业的机房要更加容易一些的,直接入侵了,不需要监听任何数据了,直接拖数据库
3.中间人攻击
黑客是有办法解决刚才这一套方案的
客户端:客户端不知道公钥是不是对的,就只能选择相信,拿着 pub2 对对称密钥 666 进行加密
黑客入侵的设备:黑客自己生产了一对公钥密钥 pub2/pri2 ,此时的数据是通过 pub2 加密的所以黑客就可以拿到 pri2 对数据进行解密从而拿到 666,黑客手里拿到了服务器的 pub1 公钥 拿着 pub1 对 666 从新加密
服务器:服务器拿着 pri1 解密当然是解密成功了 服务器拿到了 666
4.引入证书,通过证书解决中间人攻击
证书解决的核心问题,就是让客户端,能够识别出当前公钥,是不是服务器本身创建的,还是黑客伪造的
引入第三方公正机构,通过公正机构的认证就可以认为密钥是不是可信的
证书中的结构化数据构成的字符串包含以下属性
1.证书的发布机构
2.证书的有效期
3.证书的所有者
4.证书对应服务器的地址/域名
5.公钥(服务器生成的 pub1/pri2)
6.数字签名(数字签名是验证证书有效的关键要素)
客户端需要验证证书的合法性(依靠数字签名)
数字签名的生产:(数字签名,就是加密后的校验和)
公证机构,生产证书之后,针对证书,算一个校验和
公证机构,拿着自己生成的非对称密钥对(pub3/pri3),使用其中的私钥 pri3 对校验和进行加密 得到了数字签名
数字签名的验证:
客户端拿到证书后,需要按照同样的校验和算法,对证书这些字段再进行一次校验和,得到 checksum1(客户端自己算的)
使用公证机构的 pub3 公钥对证书中的数字签名,进行解密,得到 checksum2(公证机构算的)
如果两者相等,说明证书没有被篡改过,证书中的公钥就是科学的(服务器原始生产的)
如果黑客篡改了证书中的 公钥,算出来的 ckecksum1 一定是不等于 checksum2的
如果不匹配,客户端/浏览器弹出的提示框!!!!
针对上述问题中
1)黑客能不能篡改公钥?
不能,一旦篡改公钥,ckecksum 对不上,客户端就可以识别出来
2)黑客能不能自己搞一个证书,整个替换掉服务器返回来的证书?
不能,证书包含了服务器的 地址/域名
3)黑客是否可以篡改公钥同时,也把数字签名改了
不能,数字签名是通过公证机构的私钥来进行加密的,这个私钥黑客拿不到
4)公证机构的公钥任何被客户端拿到?黑客是否可能伪渣公证机构的公钥呢?
不能的,公证机构的公钥不是通过网络获取的,而是内置在操作系统里面的(镜像操作系统是有危险的)