Ha jol ertem amit irtal akkor 2 https proxyra van szuksegem. Igy a configom erre valtozott: # HTTP Proxy class HTTPProxy(HttpProxy): def config(self): HttpProxy.config(self) # HTTPS Proxy - Listener class HTTPSListener(PsslProxy): def config(self): PsslProxy.config(self); self.copy_to_server = TRUE; self.copy_to_client = TRUE; self.client_need_ssl = TRUE; self.server_need_ssl = FALSE; self.shutdown_soft = TRUE; self.client_verify_type = SSL_VERIFY_NONE; self.server_verify_type = SSL_VERIFY_NONE; self.client_cert = "/etc/zorp/certs/test.crt"; self.client_key = "/etc/zorp/keys/test.key"; # HTTPS Proxy - Worker class HTTPSWorker(PsslProxy): def config(self): PsslProxy.config(self); self.copy_to_server = TRUE; self.copy_to_client = TRUE; self.client_need_ssl = FALSE; self.server_need_ssl = TRUE; self.shutdown_soft = TRUE; self.client_verify_type = SSL_VERIFY_NONE; self.server_verify_type = SSL_VERIFY_NONE; self.client_cert = "/etc/zorp/certs/test.crt"; self.client_key = "/etc/zorp/keys/test.key"; # Instance definition def reverse_http(): Service( "http", HTTPProxy, router=InbandRouter(forge_addr=TRUE), resolver=DNSResolver() ) Service( "https", HTTPSListener, router=InbandRouter(forge_addr=TRUE), chainer=SideStackChainer( HTTPProxy, SideStackChainer(HTTPSWorker) ) ) Listener(SockAddrInet('10.3.6.253', 1200), "http") Listener(SockAddrInet('10.3.6.253', 1201), "https") Igy szeretnem: SSL Client -> HTTPSListener -> HTTPProxy -> HTTPSWorker -> SSL Server Mostmar eljut a keres az SSL Server-hez, csak ahogy nezem a 80-as portja jon be a 443 helyett. Tenyleg? Honnan tudja a Zorp, hogy melyik portra csatlakozzon (ok ha az url-ben nincs megadva akkor default 80, 443). Meg lehet ezt kulon adni? Gondolom itt nem az lesz a baj, hogy kulon meg kene adnom. Felek meg mindig hibas a config.
Melléstackelés esetén (SideStackChainer) az SSL proxy kimenete fog bekerűlni a mögötte lévő Proxyba. Vagyis Ha a self.server_need_ssl TRUE, akkor az SSL proxy titkosítja a tartlamat (legalábbis megpróbálja :) ) és azt kapja meg a Http Proxy. Ez egyiküknek sem jó. Éppen ezért, ha a szerver oldalon titkosított kapcsolatot szeretnél, akkor SSL szendvicset kell csinálnod. Ráadásul ilyenkor nem stack-elünk az SSL-be semmit, tehát nem kell e self.stack_proxy, mert így szegény Http proxy kétszer is fog találkozni az adattal.
Vagyis SSL --- Http --- SSL formában.
Es az első SSL-nél a szerver oldal ne legyen titkosított, a másodiknál a kliens oldal.
Ja és a chainer definíció: chainer=SideStackChainer(ReverseHostHttpProxy, SideStackChainer(RightSSLProxy))