Kürzlich habe ich mit dem HTTP-Proxy in verdreht gespielt. Nach viel Versuch und Irrtum denke ich, dass ich endlich etwas arbeite. Was ich jedoch wissen möchte, ist, wie, wenn es möglich ist, erweitere ich diesen Proxy, um auch mit HTTPS-Seiten umgehen zu können? Hier ist, was ich bisher habe:Konvertieren von HTTP-Proxy zu HTTPS-Proxy in Twisted
from twisted.internet import reactor
from twisted.web import http
from twisted.web.proxy import Proxy, ProxyRequest, ProxyClientFactory, ProxyClient
class HTTPProxyClient(ProxyClient):
def handleHeader(self, key, value):
print "%s : %s" % (key, value)
ProxyClient.handleHeader(self, key, value)
def handleResponsePart(self, buffer):
print buffer
ProxyClient.handleResponsePart(self, buffer)
class HTTPProxyFactory(ProxyClientFactory):
protocol = HTTPProxyClient
class HTTPProxyRequest(ProxyRequest):
protocols = {'http' : HTTPProxyFactory}
def process(self):
print self.method
for k,v in self.requestHeaders.getAllRawHeaders():
print "%s : %s" % (k,v)
print "\n \n"
ProxyRequest.process(self)
class HTTPProxy(Proxy):
requestFactory = HTTPProxyRequest
factory = http.HTTPFactory()
factory.protocol = HTTPProxy
reactor.listenSSL(8001, factory)
reactor.run()
Da dieser Code demonstriert, zum Wohle Beispiel für jetzt bin ich nur Druck aus, was durch die Verbindung geht. Ist es möglich, HTTPS mit den gleichen Klassen zu behandeln? Wenn nicht, wie sollte ich eine solche Sache umsetzen?
Wie möchten Sie das Problem der Serverzertifikatsvertrauensstellung behandeln? – MattH
MattH, ich arbeite mit einem anderen Programmierer für dieses Projekt zusammen und er hat bereits herausgefunden, wie man das SSL-Zertifikat in Twsited bekommt. Anscheinend können Sie laufen: reactor.listenSL (Hafen, Fabrik, CERT) und Sie können HTTPS Verbindungen hören. Obwohl, wenn Sie wissen über das Thema sind, würde ich definitiv jede Eingabe zu schätzen wissen! – themaestro
Wie Marcus Adams darauf hinweist. Sie haben das Problem der Zertifikatsvertrauensstellung. Wenn ein Webbrowser für die Verwendung eines Proxy für HTTPS konfiguriert ist, sendet er einen "connect host: port" und erwartet, dass er an den Server weitergeleitet wird. Der beteiligte Proxy sieht nur den verschlüsselten SSL-Verkehr, den er zwischen Client und Server vermittelt. Wenn Sie sich auf magische Weise als Server für den Client ausgeben möchten, müssen Sie den Client dazu bringen, Ihrem Zertifikat zu vertrauen, um auf die Website zugreifen zu können, die der Client besuchen möchte. – MattH