抓包工具能获取 https 数据,所以 https 并不安全?
抓包工具能获取 HTTPS 数据,所以 HTTPS 并不安全?
《L03 Laravel 教程 - 实战构架 API 服务器》 的课程中并没有提及关于签名相关的内容。
那么问题来了:
- 一般的接口都需要有数据加密,做签名啊,不然怎么保证接口安全,中间人攻击怎么办?
- 即便用了 https ,数据也是可以被抓包和篡改的,你看我用 Charles 就抓了很多知名平台的 https 的包,我还能随意篡改数据。
所以推导过程就变成了 :
Https 可以被抓包工具抓包 =》抓包后就可以读取数据并篡改 =》所以 Https 并不安全,可以被中间人攻击 =》数据必须增加签名才算安全
首先课程中设计的接口用于单页应用的 Web 端,小程序,手机应用,桌面应用等等,目的是完成一套通用的接口,那么针对上面的问题,我们可以讨论一下。
HTTPS 简单介绍
通信安全,肯定需要用 https,那么 https 咋工作的,简单整理一下:
- 服务器将自己的证书发送给客户端;
- 客户端通过层层 CA 验证证书是真的,从证书里面拿出来服务器的公钥;
- 客户端通过服务器公钥将一个随机数发送给服务器;
- 服务器通过自己的私钥解密得到随机数,这样客户端和服务器都能通过这个随机出算出一个对称秘钥;
- 之后双方通过对称秘钥加密数据进行通信。
简单的过程是这样,通过非对称加密的方式来传输一个对称加密的秘钥,最终通过对称秘钥进行数据加密,这样能保证传输的效率。
这里关键的一步就是服务器发送过来的证书,是通过一个信任的 CA 签名的,所以值得信任。
关于抓包
那么为什么数据可以被抓包呢,比如我么能使用的 Charles,这里很容易混淆第三方中间人和用户本身,可以参考一下知乎的讨论 www.zhihu.com/question/65464646 。
我们使用抓包工具的第一步就是在你自己设备中信任 Charles 的 CA 证书,在自己的设备中添加了一个 CA,请求的时候,Charles 通过自己的 CA 签名了一个自己的公钥,发送给客户端,客户端就误以为是服务器了,这样之后的流程都会先走到 Charles 然后才会走到目标服务器。
Charles 扮演了一个中间人的角色,而且这个中间人是我们自己设置的。用户本身主动添加中间人,跟中间人攻击完全是两码事,一个正常用户,设备中 CA 无异常,中间人根本参与不进来,即便从网络传输过程中获取了 https 的数据包,也无法解密,获取不了数据,更不要谈篡改了。
客户端签名
很多人会想到,应该在客户端请求之前,对请求的数据进行一次签名,防止一些非法的人随意访问到服务器接口。
首先客户端可以有很多,Web ,小程序,APP,这些个客户端都是可以获取到本地的,利用各种反编译的工具分析客户端的代码,你用什么方式做的签名,我照着做一遍就行了,只要你有接口,我就有一定有办法调用,只是一些时间成本的问题。
所以你会在 Github 上看到各种网易云音乐客户端,微信客户端,知乎日报客户端……
所以如果你是出于防止接口被随意调用,那么只能防备一些小白用户,我个人还是感觉意义不大。
最后
HTTPS 当然也是安全的,不然大家费劲的推广 HTTPS 是为了啥?
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: