加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 23:13:55 所属栏目:百科 来源:网络整理
导读:我已经看过几个在 Ruby中编写HTTP代理的例子,例如 this gist by Torsten Becker,但我如何扩展它来处理HTTPS,又称为“中间人”SSL代理? 我正在寻找一个简单的源代码框架,我可以扩展它以满足我自己的日志记录和测试需求. 更新 我已经使用了类似于Fiddler的Cha
我已经看过几个在 Ruby中编写HTTP代理的例子,例如 this gist by Torsten Becker,但我如何扩展它来处理HTTPS,又称为“中间人”SSL代理?

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

更新

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

更新II

四处乱逛,我理解术语好一点.我不是在完整的“中间人”SSL代理之后.相反,它将在我的机器上本地运行,因此我可以尊重它提供的任何SSL证书.但是,我需要查看我的请求的数据包的解密内容和响应的解密内容.

解决方法

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

这就是WEBrick::HTTPProxyServer的do_CONNECT方法.

如果你想要一个MITM代理,即如果你想能够查看SSL / TLS流量,你当然可以使用WEBrick :: HTTPProxyServer,但你需要完全改变do_CONNECT:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读