获取并保存设备通过HTTPS请求的指定数据
获取并保存设备通过 HTTPS 请求的指定数据
1. 生成一个可用的证书
生成证书看似不复杂,也有大量工具和例子帮助,但生成过程需要注意的细节很多,如果配置不当,可能会导致证书无法使用。
在本需求下,由于需要解析设备的 HTTPS 请求,而不是为设备提供某个 URL 的服务,所以需要一个 CA 证书,不仅仅是一个域名证书。
默认情况下,自生成证书不受信任,难以维护,但作为个人调试使用,在可信任的网络环境下是便捷的选择。
特别针对 iOS 系统,不符合要求的证书可以正常安装,但无法被系统信任(在设置-通用-关于本机-证书信任设置中无法找到),导致无法正常使用。
在仅有的尝试中,多次遇到了这个问题,由于各方面限制,同时对个人使用影响不大,就没有深入研究,但给出测试过程中可用的方案。
借助外部工具
通过一些外部工具,如 Azure Application Gateway 提供的工具 ,
只需要给出证书名称就可以下载到一整套证书,包括 CA 证书、域名证书、私钥等。使用
openssl
生成证书
1 | openssl ecparam -out contoso.key -name prime256v1 -genkey |
2. 实现或者使用一个 HTTP 代理
在 AI 的加持下,实现一个 HTTP 代理并不是一件麻烦事,在过程中大概需要有以下流程:
- 处理、分析请求,对数据进行分流,如果不是对所有数据都感兴趣,只是希望获取某些数据,在这里可以按条件进行过滤
- 如果是 HTTPS 请求,并且需要对其进行解密,则需要和目标服务器进行 TLS 握手,建立连接,同时使用 CA 证书完成和客户端的 TLS 握手
- 转发、处理数据,在客户端和目标服务器之间建立数据传输,在传输过程中,可以对数据进行处理,如保存、修改等
这里实现的功能和 Filter 功能几乎相同,但可以更加灵活多种形式地处理数据。
3. 实现
利用现有的第三方库 github.com/elazarl/goproxy
,快速实现一个 HTTP 代理。
1 | package main |
将证书在目标设备上安装并信任,设置代理(对于不支持代理的设备,可通过第三方软件建立虚拟 VPN 通道来转发数据或通过路由器进行数据转发),即可获取到设备的 HTTPS 请求数据,并将所有图片保存到本地。
4. 结语
这里只是一个简单的实现,会对正常网络连接造成较大影响,如果需要在复杂网络环境下使用会遇到更多的问题,仅适合作为测试、学习或简单需求下使用。
同时,还可能存在其他一些问题,例如设备明明看到了某图片,但实际没有被保存,这也可能存在多种情况,例如:
- 设备在请求图片时,没有通过支持的 HTTP 方法进行请求,例如直接使用 TCP、WebSocket 连接等;
- 设备在传输过程中,对其进行了额外的加密;
- 设备上的软件内置了服务器证书,而不信任系统证书,导致无法解析连接数据;
这些情况较为少见,但每一种处理起来都不简单,甚至设计逆向分析的操作,往往也伴随着一定的法律风险,需要谨慎对待
P.S 本文的封面图某天被迫打工的过程中意外发现的,阳光正好,刚浇过水的花能暂时忘记烦人的事情,希望你也能喜欢。