在代理中响应HTTP CONNECT

时间:2014-05-26 21:53:33

标签: ssl proxy

我目前正在实施代理。 这是一个特殊的代理,它只回复以前记录的请求 (它有一个请求/响应数据库,并在收到请求后返回匹配, 此数据库是使用Fiddler生成的。实际上它是离线的。

这适用于没有SSL的网站,但对于SSL网站,则存在CONNET HTTP消息

CONNECT myserver:9443 HTTP/1.1
Proxy-Connection: keep-alive
User-Agent: Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.0 Safari/534.34
Host: myserver

我不知道接到这个请求后我应该回复什么?

由于

1 个答案:

答案 0 :(得分:1)

(也许this question可能会引起人们的兴趣。)

普通的HTTPS代理将处理CONNECT请求,与myserver:9443建立TCP连接,如果此连接成功建立,则向客户端返回200状态代码。在此之后,它只是在客户端和目标服务器之间转发所有内容,而无需查看它。

由于您正在尝试实现MITM代理(也是脱机),因此您必须通过将流量重定向到客户端和从客户端迁移到伪HTTPS服务器来模拟与实际服务器的连接。

您可以通过实现假套接字类并通过ssl.wrap_socket包装它来实现此目的。 (据推测,由于您的应用程序已经在使用普通的HTTP脱机工作,您已经完成了一些使用离线数据模拟读取和写入伪套接字的工作。)

您可能还有动态生成证书。通常,您的代理服务器可以拥有自己的CA,并将其CA证书导入客户端的信任锚。使用该CA,在将任何SSL / TLS数据从客户端发送到伪服务器之前,生成使用该CA签名的证书,对所请求的主机名有效(可以从CONNECT获取),并配置伪服务器。如果没有这一步,客户应该抱怨无效的证书。