【问题标题】:Decrypting HTTPS traffic with a proxy使用代理解密 HTTPS 流量
【发布时间】:2021-03-15 23:26:21
【问题描述】:

我正在实现一个 Web 代理(用 C 语言),最终目标是实现一些简单的缓存和广告拦截。目前代理支持普通的HTTP站点,也支持HTTPS站点,通过HTTP CONNECT实现隧道。代理从 localhost 运行并使用我的浏览器配置非常好。

尽管如此,只要代理无法解密 HTTPS 流量,我就永远无法实现我想要的功能。我的问题的本质是:我需要采取哪些一般步骤才能解密此流量并实现我想要的?我一直在研究这个,似乎有大量关于现有代理的信息,例如Squid

目前,我的服务器使用 select() 并将所有客户端 ID 保存在 fd_set 中。当发出 CONNECT 请求时,它会与指定的主机建立 TCP 连接,并将客户端和主机的文件描述符放入 fd_set。它还将 fd 的元组放入一个列表中,只要从 select() 中准备好更多数据,就会扫描该列表,以查看数据是否来自现有隧道。然后盲目地读取和转发数据。由于 CONNECT 动词的性质要求打开一个简单的 TCP 套接字到所需的主机,然后在客户端和主机设置自己的 SSL 时“远离它”,我正在努力查看如何截取这些数据插座。我只是在询问如何使用代理作为 MITM 攻击者来读取和操作传入的数据的正确方向。

顺便说一句,这个项目仅供我自己使用,因此不需要安全或高级功能。我只需要它在一个浏览器上工作,如果证书欺骗是最好的方法,我很高兴收到来自浏览器的任何警告。

【问题讨论】:

  • 为什么你认为你需要实现自己的代理而不是仅仅使用 squid?
  • 这是我为自己的学习利益而做的一个项目。我同意,如果我只是想要一个功能正常的代理,我只会使用 Squid 或由有能力的人编写的东西。
  • 使用 libssl 解密 HTTPS 流量。
  • 一般情况下你不能这样做,因为 TLS/SSL 可以防止这种本质上的 MITM 攻击。如果您可以让您的 MITM 证书受到客户的信任,那么您可能会成功。

标签: c encryption https proxy openssl


【解决方案1】:

代理无法解密 HTTPS 流量

您正在尝试发起中间人攻击。 SSL 旨在防止这种情况。但是 - 有一个弱点 - 受信任的证书颁发机构列表。

我只是在询问如何使用代理作为 MITM 攻击者来读取和操作传入的数据的正确方向。

您可以从 Fiddler 获得灵感。 Fiddler 有自己的 CA 证书(证书颁发机构),一旦您将此 CA 证书添加为受信任的,Fiddler 就会为您即时使用的每个连接生成服务器证书。

它带有严肃的安全考虑,您的浏览器将信任任何网站。我什至见过在恶意软件中使用 Fiddler 核心,所以要小心

【讨论】:

    猜你喜欢
    • 2018-04-15
    • 2015-07-22
    • 2023-02-01
    • 2016-04-03
    • 1970-01-01
    • 2019-07-28
    • 2013-03-26
    • 1970-01-01
    • 2018-05-02
    相关资源
    最近更新 更多