什么是HTTP协议?
HTTP协议全称Hyper Text Transfer Protocol,翻译过来就是超文本传输协议,位于TCP/IP四层模型当中的应用层。
HTTP协议通过 请求 >>> 响应的方式,在客户端和服务器之间进行通信
HTTP协议有一个致命的缺点,不够安全。
HTTP协议的信息传输是以明文的方式直接传输,不做任何加密,很容易被中间人获取数据,之后篡改数据。
解决方法可以通过对称加密和非对称加密对信息进行加密。
对称加密
对称加密是 客户端和服务端定义好加密方式和随机生成一个秘钥,客户端获取秘钥对信息进行加密,服务端获取信息通过秘钥解密
但是也存在一种问题是:对称加密需要在客户端和服务器第一次请求定义好加密方式和秘钥,存在不安全性。
非对称加密
非对称加密,为秘钥的传输做多一层额外的保护
非对称加密的一组秘钥中,包含一个公钥和一个秘钥,明文既可以用公钥加密,用私钥解密,也可以用私钥加密,用公钥解密。
加密方式:
服务端生成一个公钥Key1发送给客户端,客户端接收到公钥Key1,再生成一个用于对称加密的秘钥Key2,并且用公钥Key1对Key2进行加密。之后把生成的key发送给服务端。
服务端通过非对称加密的私钥,解开公钥Key1的加密,获得Key2的内容,之后就可以通过Key2进行对称加密的通信。
客户端加密图片是:
但是,即使加密方式是这样,黑客还是能够破解。
就是,在服务端生成公钥key1发送给客户端的时候,拦截key1,并且自己定义一个公钥key3,将公钥key3发送给客户端,客户端并且不知道公钥key1被替换了,这时客户端就使用公钥key3进行加密,将自己生成的key2加密到key3中,发送给服务端。
再次被黑客拦截,并且用自己私钥解开key3的加密,获取到key2,之后再用当时服务器发来的key1进行加密,发送给服务器。
黑客知道了key1和key2,就又可以篡改数据。
证书
这时候。我们可以引入第三方,证书来做处理。
服务端生成key1发送给证书机构,向证书颁发机构申请证书。
证书颁发机构也有属于自己的一对公钥私钥,机构利用自己的私钥来加密key1,并且通过服务端网址等信息生成一个证书签名,证书签名同样通过机构的私钥加密,制作完成之后,发送给服务端
当客户端请求通信服务端的时候,服务端不再返回key1,而且返回证书给客户端
客户端需要校验证书的真伪,浏览器和操作系统已经推出所有权威机构的名称和公钥,所以客户端只需要知道哪个机构的证书,就可以找到对应的机构公钥,解密出证书签名。
之后客户端根据同样签名方式,生成证书签名,如果签名一致,就说明证书有效。
验证成功之后,客户端就可以通过证书,解密出key1
之后还是生成客户端的key2,通过key1加密key2发送给服务端。
服务端用自己的key1解密,获取到key2,就可以开始用key2进行对称加密了。
很绕,但是你可以把证书理解为一个中间人,第一次的时候,客户端和服务端都要遵循这个中间人定义的规则来。而客户端需要校验这个中间人是不是真的有效。
说到底,非对称加密和证书加密这种,其实都是在第一次校验的时候,加密,之后当客户端和服务端验证正确之后,就通过对称加密进行通信。
而https是在http的基础上增加了SSL安全层,刚才的对称加密和非对称加密就是在SSL安全层完成的。(仅仅只是笔记。勿喷)
参考网址:https://blog.csdn.net/forezp/article/details/89666603