Я пытаюсь создать обратный прокси-сервер для фильтрации всех запросов, поступающих на локальный сервер.
сервер:
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 ... "на сервере) все страницы, возвращаемые прокси-сервером, пусты.