我很擅长扭曲,并试图利用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()
答案 0 :(得分:0)
ReverseProxyResource
不支持TLS。当您编写ReverseProxyResource(host, 443, "/"+name)
时,您正在创建一个资源,该资源将在端口443上与host
建立正常的TCP连接.TCP连接尝试将成功,但TLS握手肯定会失败 - 因为客户赢了'甚至尝试一个。
这是当前ReverseProxyResource
的限制:它不支持您想要的功能。这个功能有可能相当容易实现。自从ReverseProxyResource
实现以来,Twisted引入了“端点”的概念,这使得编写与传输无关的代码变得更加容易。
ReverseProxyResource
可以更新为“端点”(保留与当前API的向后兼容性,但Twisted要求)。这并不会使实现复杂化(实际上可能会简化它),并允许您代理存在端点实现的任何类型的传输(有一个用于TLS,还有更多种类)。