簡體   English   中英

使用扭曲的python HTTPS服務器反向代理

[英]Reverse proxy with twisted python HTTPS server

我正在嘗試構建一個反向代理來過濾所有來到本地服務器的請求。

服務器:

import BaseHTTPServer, SimpleHTTPServer
import ssl
import os

def main():
    httpd = BaseHTTPServer.HTTPServer(('192.168.58.1', 4443), SimpleHTTPServer.SimpleHTTPRequestHandler)
    os.chdir('./content')
    # httpd.socket = ssl.wrap_socket(httpd.socket, certfile='../server.pem', server_side=True)
    httpd.serve_forever()

if __name__ == '__main__':
    main()

代理:

from twisted.web import proxy, server
from twisted.internet import ssl, reactor
import argparse
from OpenSSL import crypto

class BadURL():
    def render(self, request):
        return "Banned"

class HTTPSReverseProxyResource(proxy.ReverseProxyResource, object):

    def getChild(self, path, request):

        if "fmm" in path:
            return BadURL()
        child = super(HTTPSReverseProxyResource, self).getChild(path, request)
        return HTTPSReverseProxyResource(child.host, child.port, child.path,
                                     child.reactor)


if __name__ == '__main__':

    ap = argparse.ArgumentParser()
    ap.add_argument('-c', type=str)
    ap.add_argument('-k', type=str)
    ns = ap.parse_args()

    myProxy = HTTPSReverseProxyResource('192.168.58.1', 4443, '')

    site = server.Site(myProxy)

    if ns.c:
        with open(ns.c, 'rb') as fp:
            ssl_cert = fp.read()
        if ns.k:

            with open(ns.k, 'rb') as fp:
                ssl_key = fp.read()
            certificate = ssl.PrivateCertificate.load(
                    ssl_cert,
                    ssl.KeyPair.load(ssl_key, crypto.FILETYPE_PEM),
                    crypto.FILETYPE_PEM)
        else:
            certificate = ssl.PrivateCertificate.loadPEM(ssl_cert)
        reactor.listenSSL(8080, site, certificate.options())
    else:
        reactor.listenTCP(8080, site)
    reactor.run()

問題和我的問題是,當我使用HTTPS服務器(在服務器中取消注釋“httpd.socket = ssl.wrap_socket ...”行)時,代理返回的所有頁面都是空白的。

您沒有將proxyClientFactoryClass方法添加到您的反向代理類( Python-Twisted:反向代理到HTTPS API:無法連接 )。 嘗試這個:

class HTTPSReverseProxyResource(proxy.ReverseProxyResource, object):
    def proxyClientFactoryClass(self, *args, **kwargs):
        """
        Make all connections using HTTPS.
        """
        return TLSMemoryBIOFactory(
            ssl.optionsForClientTLS(self.host.decode("ascii")), True,
            super(HTTPSReverseProxyResource, self)
            .proxyClientFactoryClass(*args, **kwargs))

    def getChild(self, path, request):

        if "fmm" in path:
            return BadURL()
        child = super(HTTPSReverseProxyResource, self).getChild(path, request)
        return HTTPSReverseProxyResource(child.host, child.port, child.path,
                                     child.reactor)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM