01了解网关
API 网关可以通过实现一些中间件来解决一些问题,这些中间件的功能你就不用再到每个service中实现了。你也是知道的,不同的团队使用不同的方式来实现了不同的微服务。
02识别网关
打开抓包工具,请求目标站点,查看接口结构。
当你看到请求头中有Authorization以及x-date的时候,基本上就可以说是用kong网关做的接口。
仔细观察Authorization 的值,如果是hmac id="appid", algorithm="hmac-sha1", headers="date content-md5", signature="Base64(HMAC-SHA1(signing string)) 那基本上可以确认就是网关的模式
03逆向网关接口
逆向之前,先根据文档,查看加密的规则,基本的规则是header的某些字段,请求方法,请求头的Accept,content_type,请求body的md5字符串以及请求路径和query参数。
接下来就是获取appid和appkey的问题。web端或者小程序端,加密都是由前端实现的,也就是说要么是hardcode在某个地方,要么就是接口获取的。
接着抓包,或者全局搜索关键字(是什么,取决于程序员的取名),一般都是apiappkey什么的。找到之后,直接开始编写代码就好!
到这里,基本上通用网关的逆向算是结束了。很简单!
04经验分享
- 1.HMAC signature cannot be verified, a valid date or x-date header is required for HMAC Authentication
这个错误主要2种情况都跟日期有关
1)服务器时间跟客户端发出去的x-date的间隔时间超过之前定义的clock skew秒数(通过docker容器安装的容易产生这个问题)
2)请确认是GMT时间格式
3)把date改成x-date
- 2.HMAC signature does not match,这个就是签名算法有问题了
- js代码写好了,python调用js的时候,无法调用成功,就算是加密内容完全一致,也无法调用
- 不要想着去扣js,直接用crypto插件
- 还是要细心,微调!