【问题标题】:HTTPS proxy like Charles像 Charles 这样的 HTTPS 代理
【发布时间】:2019-10-23 13:14:42
【问题描述】:

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

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

【问题讨论】:

    标签: node.js https proxy charles-proxy


    【解决方案1】:
    1. Charles 或其他代理如何处理这些 HTTPS 内容?

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

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

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

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

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

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

    希望对你有帮助。

    【讨论】:

    • 感谢您的详细解释!如果我不打算拦截来自本地系统的请求,而只拦截来自 iOS 设备的请求,是否需要覆盖 HTTP 代理?
    • 如果您只捕获来自 iOS 设备的流量,则无需在 mac 中覆盖 HTTP 代理。但是,请确保您在 mac 中打开正确的端口(例如:9090),并将 iPhone 中的 Wifi 代理配置到此端口和 IP。
    【解决方案2】:

    使用 Charles Proxy 查看您手机的请求非常简单。

    这是一个简单的视频,介绍了如何设置它。 https://www.youtube.com/watch?v=AW2vTBRfOrU

    【讨论】:

    • 你不会在这里找到答案。
    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 2014-03-11
    • 2022-08-09
    相关资源
    最近更新 更多