gpt4 book ai didi

ruby - 如何在 Ruby 中编写一个简单的 HTTPS 代理服务器?

转载 作者:数据小太阳 更新时间:2023-10-29 07:06:14 25 4
gpt4 key购买 nike

我看过几个用 Ruby 编写 HTTP 代理的例子,例如this gist by Torsten Becker ,但我如何扩展它来处理 HTTPS,又名“中间人”SSL 代理?

我正在寻找一个简单的源代码框架,我可以扩展它以满足我自己的日志记录和测试需求。

更新

我已经在使用 Charles, a nifty HTTPS proxy app类似于 Fiddler,它本质上是我想要的,只是它被打包在一个应用程序中。我想自己写一个,因为我对过滤和展示有特定的需求。

更新二

四处浏览后,我对术语的理解有所好转。我不是在寻找完整的“中间人”SSL 代理。相反,它将在我的机器上本地运行,因此我可以接受它提供的任何 SSL 证书。但是,我需要查看我的请求数据包的解密内容和响应的解密内容。

最佳答案

仅作为背景信息,普通的 HTTP 代理通过 CONNECT 方法处理 HTTPS 请求:它读取主机名和端口,在此端口上建立到此目标服务器的 TCP 连接,返回 200 OK 然后仅将该 TCP 连接隧道传输到初始客户端(在该 TCP 连接之上交换 SSL/TLS 的事实几乎无关紧要)。

如果WEBrick::HTTPProxyServer,这就是do_CONNECT 方法的内容.

如果您想要一个 MITM 代理,即如果您希望能够查看 SSL/TLS 流量内部,您当然可以使用 WEBrick::HTTPProxyServer,但您需要更改 完全连接:

  • 首先,您的代理服务器需要嵌入一个微型 CA,能够即时生成证书(否则,如果您愿意绕过浏览器中的警告消息,您可以使用自签名证书).然后,您将该 CA 证书导入浏览器。
  • 当您收到 CONNECT 请求时,您需要生成一个对该主机名有效的证书(最好使用该主机名的主题替代名称,或在主题 DN 的通用名称中),并将套接字升级为 SSL/TLS 服务器套接字(使用该证书)。如果浏览器接受信任该证书,您在此 SSL/TLS 套接字上获得的是纯文本流量。
  • 然后您必须处理请求(获取请求行、 header 和实体)并通过普通的 HTTPS 客户端库使用它。您也许能够将该流量发送到 WEBrick::HTTPProxyServer 的第二个实例,但必须对其进行调整以发出传出 HTTPS 请求,而不是普通的 HTTP 请求。

关于ruby - 如何在 Ruby 中编写一个简单的 HTTPS 代理服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12187509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com