全文约 1689 字,预计阅读时长: 5分钟
前言
浏览器的难度成本特别高,不亚于任何一款工业及软件。由于某年谷歌内核开源,才有了百花争鸣的局面,导致前端的标准有八成一样,剩下的两成自由发挥。有人的地方,便有市场,有市场便会有斗争。
HTTP的报文可以通过某些应用程序,以代理劫持浏览器的方式,进行HTTP请求抓取。无论是GET 方法还是 POST 方法传输的报文都是一览无遗。只有经过加密的数据,才能保证在理论上是安全的。
数据指纹
- 一个文本内容,用哈希算法提取出文本中的部分内容,将此文本发送给对方,用同样的算法,也能提取到相同的部分内容,这部分内容叫做摘要。
- 对摘要再进行特定的加密得到的数据,就叫做数据指纹。MD5对摘要再加密形成的指纹数据长度是确定的。
- 凡是对原始文本做任何修改,进行摘要形成指纹后,得到的指纹数据差别会非常大。
- 登录时,服务端数据库中的数据指纹和你的指纹数据进行对比;还有采取 “ 密码加盐 ”等方法。
对称加密 | 非对称加密
- 对称加密:加密和解密都用一个密钥。非对称加密:公钥加密,私钥解密;或者私钥加密,公钥解密。
- 异或运算,是一种简易的加密算法。
x ^ y = z;
z ^ y = x;
// x 是数据,y是密钥 z是加密之后的结果。
- 所有的密码学加密算法,是和CPU算力相关。如果向破解一个加密的数据,只要我们的算力足够,就大概率可以破解。何为安全?安全就是破解的成本 远大于 破解的收益,因为强大的算力是需要强大的成本的。
客户端与服务端进行通信时,对称加密意味着对方必须知道你的密钥。密钥也是数据,客户端在进行发送数据之前,必须先将密钥给对方。非对称加密中,一般公钥是公开的,私钥必须保存。
那么http选择什么种类的加密算法呢?不能使用对称加密,因为第一次的交换密钥就是一个大问题。可以使用两个公钥私钥算法解决,但需要 所有的 客户端和服务端提前内置公钥和私钥,这样只能用私钥解密,可以保证单向的数据安全。其中对称加密效率快一些,非对称加密效率特别低。因此需要将两者通过某种方法组合一下,便有了在密钥协商阶段:用非对称加密解密算法,加密通信阶段用对称加密解密算法。
密钥协商 | 加密通信
- 前期ssl握手期间,使用非对称加密,来交换对称加密的密钥;通信期间,采用对称加密保证数据安全。
中间人攻击
- 中间人在http发起请求后,截取服务端返回的明文公钥 A;因为此时的通信是裸奔状态。之后把原本服务端的公钥A换成自己的公钥 M 返回给客户端。
- 客户端以为自己获取到的服务端的公钥A,但其实是M。于是就将自己的对称密钥D,用公钥M加密,再发送给服务器;
- 此时唯有中间人的私钥m,才可以解开;截取请求以后,解密得到客户端的密钥D。中间人再将客户端密钥D,用A公钥加密;返回给服务端。
- 中间人,服务端都得到了客户端的对称密钥D,浑然不知。
安全证书
- 如何确认对方发来的公钥是合法的,没有被篡改?此时需要有权威的机构(CA机构)对网站、服务器进行合法认证,颁发数字证书。
- 用证书的目的是为了证明服务端发过来的公钥是合法的。
- 那么如何证明证书是合法的、而且没有被篡改过?证书与服务器公钥之间进行怎样的配合呢?
- 颁给服务端的证书的找摘要,用CA机构的私钥加密,用CA公钥解密获取摘要。只要对证书的内容有任何修改,指纹的变化就非常大,CA公钥解不开指纹。
- 客户端通过对比证书摘要 和 指纹揭秘之后的携带的摘要是否相等,来判定是否篡改过。
- 同时也证明了证书的合法性。
- 申请 与 颁发证书流程:
- 颁发证书过程:
- 客户端对服务端发送过来的证书进行认证:
- 证书返回给客户端的过程中,也是明文传送的。中间人如果修改了证书的数字指纹,客户端用且只用CA的公钥解密进行证书认证时,造成的现象是解不开。
- 中间人监听,攻击也是有成本的;如果拿不到对称密钥就对数据进行破坏,此时服务端便会发现并进行反追踪等等…
因此世界上的任何一份证书+指纹,没有任何一个人可以修改。因为没有CA的密钥,无法重新二次生成指纹。
- 操作系统、浏览器出厂时,内置了各种权威机构的根认证机构的各种证书(公钥)。OS、浏览器、CA认证机构利益不冲突,互相促进。
寄语
- 计算机世界的任何名词,都有相应的软、硬件提供底层支持,计算机的发展与现实世界中的商业竞争密不可分。
- 下一篇:UDP 与 TCP 协议