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. 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

  1. 2.HMAC signature does not match,这个就是签名算法有问题了
  2. js代码写好了,python调用js的时候,无法调用成功,就算是加密内容完全一致,也无法调用
  3. 不要想着去扣js,直接用crypto插件
  4. 还是要细心,微调!