fea*_*ool 6 ruby ssl https proxy
我已经看过几个在Ruby中编写HTTP代理的例子,例如Torsten Becker的这个要点,但我如何扩展它以处理HTTPS,又称为"中间人"SSL代理?
我正在寻找一个简单的源代码框架,我可以扩展它以满足我自己的日志记录和测试需求.
我已经使用了Charles,一个类似于Fiddler 的漂亮的HTTPS代理应用程序,它本质上是我想要的,除了它在一个应用程序中打包.我想写自己的,因为我有过滤和演示的特定需求.
四处乱逛,我理解术语好一点.我不是在完整的"中间人"SSL代理之后.相反,它将在我的机器上本地运行,因此我可以尊重它提供的任何SSL证书.但是,我需要查看我的请求的数据包的解密内容和响应的解密内容.
仅用于背景信息,普通HTTP代理通过以下CONNECT方法处理HTTPS请求:它读取主机名和端口,在此端口上建立到此目标服务器的TCP连接,返回200 OK然后仅将TCP连接隧道连接到初始客户端(事实上,在TCP连接之上交换SSL/TLS几乎没有相关性.
这是do_CONNECT方法if WEBrick::HTTPProxyServer.
如果你想要一个MITM代理,即如果你想能够查看SSL/TLS流量,你当然可以使用WEBrick::HTTPProxyServer,但你需要改变do_CONNECT completely:
CONNECT请求时,您需要生成一个对该主机名有效的证书(最好使用该主机名的Suject Alt.Name,或者在主题DN的公共名称中),并将套接字升级为SSL/TLS服务器套接字(使用该证书).如果浏览器接受信任该证书,那么您在此SSL/TLS套接字上获得的是纯文本流量.WEBrick::HTTPProxyServer,但必须进行调整以发出传出的HTTPS请求而不是普通的HTTP请求.那博客是没办法写代理的。这非常简单:您只需接受一个连接,读取一行告诉您要连接的内容,尝试上游连接,如果失败,则发送适当的响应并关闭套接字,否则只需开始同时在两个方向复制字节,直到EOS 是双向发生的。HTTPS 的唯一区别是您必须使用 SSL 而不是纯文本。
| 归档时间: |
|
| 查看次数: |
6512 次 |
| 最近记录: |