为什么要有https
我们知道 http是明文传输数据 这样很容易被中间人窃取和篡改数据 为了保护http通信的数据安全 引入https
两种加密方式
在说到https的工作原理之前 首先需要知道两种不同的加密方式
对称加密
对称加密的原理其实很简单 就是通信双方保存同样的一份秘钥,通信内容只能用双发保存的秘钥解开
此时遇到的问题有两个
- 密钥泄露问题
- 密钥保存问题
泄露比较好理解 那保存问题是什么呢, 当连接数比较多 1w个连接就需要1w对密钥 难以管理
非对称加密
非对称加密就是客户端和服务端各自保存一对自己的公钥和私钥 服务端的消息用公钥加密之后只能用私钥解密 反过来也一样 那么以小明追求小丽为 消息传递的背景 请求过程如下
就算中途小红拦截到了到公钥 也无法解密
非对称加密的问题:
- 加/解密的速度远慢远低于对称加密
提升加密/解密效率
于是又提出一种混合加密方式 结合了对称和非对称加密的优点进行了一个平衡
过程如下
这样混合加密为什么能够提升速度呢 由于客户端(小明) 生成的randkey 的长度比较小 那么非对称加密解密到randkey
的效率也比较高 对于传送的信息 也就是情书内容是比较长的 这里就采用randkey
进行对称加密解密方式进行传输
中间人攻击
现在已经采用了TLS 混合加密了 但是这种方法也不是天衣无缝的 在案例中 中间人小红可以伪造一套公钥和私钥 在客户端(小明)向服务端(小丽)请求公钥时 将自己的公钥返回给小明 客户端无法辨认中间人的身份 传送了randkey 小红通过自己的私钥解密到randkey 这样小红就伪装成了服务端 与客户端通信 同理中间人也可以伪装成客户端向服务端请求数据
过程如下
CA证书
可以看到 上面提到的攻击方式其实本质上是客户端无法确认服务端的权威真实性 所以可以引入第三方机构 来为小丽颁发证书以及公钥和私钥,这里的证书是需要服务端进行数字签名的 同时客户端需要保存CA机构的根证书这个根证书一般已经内置在了客户端的系统中
如此一来客户端就可以通过自己的根证书去判断/校验自己请求到的公钥的合法性/真实性 即使中间人小丽也申请了一套CA证书的公钥/私钥 但是证书上面的签名确是小丽的签名 也是无法伪造的
总结
https 是基于http 在中间加了一层安全层的校验 SSL/TLS