扭曲的反向代理SSL后端

时间:2014-11-20 16:20:27

标签: python twisted twisted.web twisted.internet

我很擅长扭曲,并试图利用twisted.web.proxy.ReverseProxyResource创建一个反向代理。最终,我希望客户端使用SSL连接到它,然后我将验证请求,并将其仅传递给SSL后端服务器。 我开始使用以下(非常)基本代码,但很难将其连接到SSL后端,并且发现缺少文档。有人能给我一些好的指针,或者理想的代码示例吗?

在下面的代码中,它显然不会工作,因为它期望打到一个普通的HTTP服务器,我将如何' ssl'此?

一如既往,任何帮助都非常,非常,非常感谢。

由于

亚历

from twisted.internet import reactor
from twisted.web import proxy, server
from twisted.web.resource import Resource

class Simple(Resource):
    isLeaf = False
    def getChild(self, name, request):
        print "getChild called with name:'%s'" % name
        #host = request.getAllHeaders()['host']
        host = "127.0.0.1"  #yes there is an SSL host listening here
        return proxy.ReverseProxyResource(host, 443, "/"+name)

simple = Simple()
site = server.Site(simple)
reactor.listenTCP(8000, site)
reactor.run()

1 个答案:

答案 0 :(得分:0)

ReverseProxyResource不支持TLS。当您编写ReverseProxyResource(host, 443, "/"+name)时,您正在创建一个资源,该资源将在端口443上与host建立正常的TCP连接.TCP连接尝试将成功,但TLS握手肯定会失败 - 因为客户赢了'甚至尝试一个。

这是当前ReverseProxyResource的限制:它不支持您想要的功能。这个功能有可能相当容易实现。自从ReverseProxyResource实现以来,Twisted引入了“端点”的概念,这使得编写与传输无关的代码变得更加容易。

ReverseProxyResource可以更新为“端点”(保留与当前API的向后兼容性,但Twisted要求)。这并不会使实现复杂化(实际上可能会简化它),并允许您代理存在端点实现的任何类型的传输(有一个用于TLS,还有更多种类)。