HTTPS 代理,如 Charles

Ale*_*loz 1 https proxy node.js charles-proxy

我想在 node.js 中实现代理服务器,这有点类似于 Charles 代理 - 它应该拦截来自我的移动应用程序的 HTTPS 请求,破译它们,根据正文内容将其中一些请求路由到原始后端,并使用一些静态文件模拟其他请求。

  1. Charles 或其他代理如何处理 HTTPS 内容?
  2. 我需要在移动设备上使用自签名根证书吗?
  3. 有什么图书馆可以帮助我吗?

小智 6

  1. Charles 或其他代理如何处理 HTTPS 内容?

从技术上讲,Charles Proxy 或Proxyman.io(我现在使用的)将执行以下步骤:

  • 生成根证书并安装到钥匙串并信任它。这个步骤一次就可以了。
  • 打开本地服务器(8888 或 9090)。
  • 将系统中的 HTTP 代理覆盖到此端口。因此,所有流量都将通过该端口。您可以使用networksetupCLI 轻松实现 macOS 上的 Privileged Helper 工具,以获得高性能和安全性。
  • 一旦捕获第一个套接字:如果是 HTTP 请求,则获取第一行消息。前任:
GET https://api.producthunt.com/v1/posts HTTP/1.1
Run Code Online (Sandbox Code Playgroud)
  • 然后打开此 URL 的转发套接字。
  • 如果是 HTTPS,请确保进行 SSL 握手,然后获取第一行消息。
  • 最后,获取其余消息并解析为正确的消息(来自 NodeJS 的HTTPCParser将是潜在的候选者)
  • 从客户端和目标服务器转发和返回数据。
  • 如果需要的话可以进行操纵操作,因为你是真正的中间人。
  1. 我需要自签名根认证移动设备吗?

是的,您必须在第一步中将根证书安装到您的 iOS 设备上。对于标头/响应详细信息。从那些Charles或Proxyman中检查chls.pro/ssl或proxy.man/ssl,并查看内容。

您可以使用ADVTrustStore在 iOS 模拟器上执行此操作

  1. 有什么图书馆可以帮助我吗?

你可以查一下那些著名的开源软件,看看它是如何工作的 - mitmproxy - zapproxy - http toolkit

希望这可以帮到你。