Http 协议是明文通讯,数据在通讯链路上可能会被劫持或者篡改算法
既然数据存在被暴露的风险,咱们想到的第一个方案可能就是对数据进行加密浏览器
咱们使用对称加密的方式来加密登陆信息此时若是被劫持了的话,劫持者没有对称密匙,那么他就没法解密和篡改你的信息。可是因为对称密匙也是明文发布的,这个密匙若是也被劫持者劫持的话,那么劫持者仍是能够窃取和篡改你传输的数据 安全
对称加密它的优势是它的加密解密速度快服务器
考虑到对称加密用单个密匙加解密会存在暴露的风险,咱们将密匙分为 2 个,保存在服务端私有的叫作私有密匙,发送给客户端的叫作公有密匙。tcp
私有密匙只保存服务端是安全的,公有密匙明文暴露给全部客户端或者劫持者都能拿到加密
咱们使用公钥进行加密,私钥进行解密,此时由于劫持者没有私钥,他就没法修改客户端传来的数据,也没法解密这个数据 操作系统
这样确实是保证了客户端发送对服务端的数据的安全,可是服务端若是要返回给客户端数据呢?客户端但是没有私钥进行解密的,根据对称加密中的讲解咱们知道把秘钥放在客户端是不安全的,因此这种方式也不可行3d
非对称加密比较安全,可是他的加解密复杂度相对较高比对称加密慢多了cdn
对称加密加解密效率高,非对称加密安全性强,咱们综合两者来进行加密的方式就叫作混合加密 blog
这样复杂的非对称加密只会在最开始解析一次,后面就使用效率高的对称加密。可是这还有一个问题就是,服务器下发的公钥是明文可能被任何人获取到的,好比这样
到这一步咱们就会发现只须要保证客户端接收到的公钥确实是服务器下发的就能解决安全问题,由此咱们引出了 HTTPS,HTTPS 就能够看作是一种混合加密可是他保证了公钥的安全
HTTPS 是一种加密的 HTTP 协议,它在 HTTP 传输协议 tcp 基础上增长了一层 SSL 层也叫做 TLS 层用于构建加密的传输信道
HTTPS 的认证方式有 2 中分别为单向认证和双向认证,咱们这里来聊聊单向认证,双向认证其实就是反过来验证而已,好比单向认证是客户端须要去认证服务端是否真实,双向认证就是服务端也须要去认证客户端是否真实
操做系统和浏览器会内置一些权威机构颁发的证书和其公钥信息
在客户端内置 CA 机构证书以及公钥,经过证书 hash 算法去 hash 公钥解密数据获得后的数据就会和从服务器获得证书的 hash 值不一致,也就是检查出了证书被篡改
服务器下发的证书是用于证实本身的身份的,好比咱们的请求被中间人截胡了它返回的证书等信息给客户端,在客户端在内置的 CA 机构中没法找到,此时它的身份识别错误,可是若是咱们不当心误安装了中间人颁发的根证书,那么它就能够识别和篡改咱们发送的信息。
好比咱们知道 Charles 能够经过安装其根证书来抓包 HTTPS 数据