Attualmente sto programmazione un server proxy utilizzando httplib, e quando tenta di connettersi a HTTPS siti web (come ad esempio Facebook e Google) il mio cliente mi manda "Connect" le richieste che assomigliano a questo:Come rispondere a una richiesta di metodo "CONNECT" in un server proxy utilizzando socket in python?
CONNECT www.google.co.il:443 HTTP/1.1\r\n
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0\r\n
Proxy-Connection: keep-alive\r\n
Connection: keep-alive\r\n
Host: www.google.co.il:443\r\n
\r\n
I ha preso un proxy di lavoro da internet e metterlo su, poi annusò la rete su Wireshark, e la risposta a questa richiesta dovrebbe apparire in questo modo:
HTTP/1.1 200 Connection established\n
Proxy-agent: Python Proxy/0.1.0 Draft 1\n
\n
ho notato che il client invia la richiesta al proxy stesso, quindi ho deciso di utilizzare socket e di inviare la risposta al client in questo modo:
if getmethod(clientreq) is "CONNECT":
text="HTTP/1.1 200 Connection established\nProxy-Agent: THE BB Proxy\n\n"
client.send(text)
ho davvero sperato che la gestione tali richieste "CONNECT" sarebbe la soluzione e che il mio server sarà finalmente prendersi cura di richieste HTTPS, ma non lo fa, e i pacchetti di risposta che ho inviare al client don' t appare anche su wireshark.
Quindi le mie domande sono: 1. Che cosa fa realmente il metodo "CONNECT"? 2. Di che altro ho bisogno se non gestendo richieste di metodo "CONNECT" per comunicare con un server HTTPS?
Per l'uso corretto di CONNECT vedere [RFC2817] (https://www.ietf.org/rfc/rfc2817.txt) –
Per la versione tl; dr, 'CONNECT' stabilisce essenzialmente un tunnel tra il client e l'origine server. Sarà necessario utilizzare il multiplexing I/O (ad esempio usando il modulo 'select', o qualcosa come Twisted) per implementarlo correttamente. –
ho fatto lo stesso e ho scoperto che si stava effettivamente tentando l'handshake SSL; ma nel mio caso l'handshake si è fermata a metà strada dopo il saluto del cliente, il server ciao e il certificato del server (scambiando la chiave del server) ... il clinet ha inviato la richiesta di cambio chiave client e modifica cifratura ma sorprendentemente non ha raggiunto il proxy o il proxy mangiato questo messaggio e io sono bloccato lì. se avessi proceduto ulteriormente e implementato il proxy HTTPS, ti dispiacerebbe condividere le tue esperienze su come hai superato il problema che hai menzionato nel post? grazie, Samba – Saasira