HTTPS 通信原理

779 阅读4分钟
Http 协议明文通信是不安全的

Http 协议是明文通信,数据在通信链路上可能会被劫持或者篡改

既然数据存在被暴露的风险,我们想到的第一个方案可能就是对数据进行加密

对称加密

我们使用对称加密的方式来加密登录信息此时如果被劫持了的话,劫持者没有对称密匙,那么他就无法解密和篡改你的信息。但是由于对称密匙也是明文发布的,这个密匙如果也被劫持者劫持的话,那么劫持者还是可以窃取和篡改你传输的数据

出现这个问题的根源在于密匙暴露在了互联网中,当然这里可能有小伙伴想到就是将和服务端约定好固定的对称密匙,分别藏于客户端和服务端中这样就不必在互联网中传输,这样的形式存在几个问题就是,首先对称密匙藏于服务端这肯定是安全的,除非你服务器信息泄露,那么将对称密匙藏于藏于网页中代码中,别人可以很容易的查看到。如果藏于安卓或者 IOS 中,会存在一定的反编译成本但是密匙也是有可能也会泄露的,所以说这种方式并不靠谱

对称加密它的优点是它的加密解密速度快

非对称加密

考虑到对称加密用单个密匙加解密会存在暴露的风险,我们将密匙分为 2 个,保存在服务端私有的叫做私有密匙,发送给客户端的叫做公有密匙。

私有密匙只保存服务端是安全的,公有密匙明文暴露给所有客户端或者劫持者都能拿到

我们使用公钥进行加密,私钥进行解密,此时因为劫持者没有私钥,他就无法修改客户端传来的数据,也无法解密这个数据

这样确实是保证了客户端发送对服务端的数据的安全,但是服务端如果要返回给客户端数据呢?客户端可是没有私钥进行解密的,根据对称加密中的讲解我们知道把秘钥放在客户端是不安全的,所以这种方式也不可行

非对称加密比较安全,但是他的加解密复杂度相对较高比对称加密慢多了

混合加密

对称加密加解密效率高,非对称加密安全性强,我们综合二者来进行加密的方式就叫做混合加密

这样复杂的非对称加密只会在最开始解析一次,后面就使用效率高的对称加密。但是这还有一个问题就是,服务器下发的公钥是明文可能被任何人获取到的,比如这样

到这一步我们就会发现只需要保证客户端接收到的公钥确实是服务器下发的就能解决安全问题,由此我们引出了 HTTPS,HTTPS 就可以看做是一种混合加密但是他保证了公钥的安全

HTTPS

HTTPS 是一种加密的 HTTP 协议,它在 HTTP 传输协议 tcp 基础上增加了一层 SSL 层也叫作 TLS 层用于构建加密的传输信道

HTTPS 的认证方式有 2 中分别为单向认证和双向认证,我们这里来聊聊单向认证,双向认证其实就是反过来验证而已,比如单向认证是客户端需要去认证服务端是否真实,双向认证就是服务端也需要去认证客户端是否真实

操作系统和浏览器会内置一些权威机构颁发的证书和其公钥信息

如果服务端返回的证书被篡改

在客户端内置 CA 机构证书以及公钥,通过证书 hash 算法去 hash 公钥解密数据得到后的数据就会和从服务器得到证书的 hash 值不一致,也就是检查出了证书被篡改

不要随便安装根证书

服务器下发的证书是用于证明自己的身份的,比如我们的请求被中间人截胡了它返回的证书等信息给客户端,在客户端在内置的 CA 机构中无法找到,此时它的身份识别错误,但是如果我们不小心误安装了中间人颁发的根证书,那么它就可以识别和篡改我们发送的信息。

比如我们知道 Charles 可以通过安装其根证书来抓包 HTTPS 数据