From aee480c3b2a0fb1f4b4a0138dde2f8106ea66f26 Mon Sep 17 00:00:00 2001 From: Abhinav Singh Date: Tue, 15 Oct 2019 18:15:12 -0700 Subject: [PATCH] Disable response parsing when TLS interception is enabled. See issue #127 --- proxy.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/proxy.py b/proxy.py index 39c9f80ee0..83f5278b69 100755 --- a/proxy.py +++ b/proxy.py @@ -418,7 +418,7 @@ def recv(self, buffer_size: int = DEFAULT_BUFFER_SIZE) -> Optional[bytes]: logger.debug( 'received %d bytes from %s' % (len(data), self.tag)) - # logger.debug(data) + # logger.info(data) return data def close(self) -> bool: @@ -442,7 +442,7 @@ def flush(self) -> int: if self.buffer_size() == 0: return 0 sent: int = self.send(self.buffer) - # logger.debug(self.buffer[:sent]) + # logger.info(self.buffer[:sent]) self.buffer = self.buffer[sent:] logger.debug('flushed %d bytes to %s' % (sent, self.tag)) return sent @@ -1491,7 +1491,7 @@ def read_from_descriptors(self, r: List[Union[int, _HasFileno]]) -> bool: try: raw = self.server.recv(self.config.server_recvbuf_size) except ssl.SSLWantReadError: # Try again later - logger.warning('SSLWantReadError encountered while reading from server, will retry ...') + # logger.warning('SSLWantReadError encountered while reading from server, will retry ...') return False except socket.error as e: if e.errno == errno.ECONNRESET: @@ -1512,8 +1512,11 @@ def read_from_descriptors(self, r: List[Union[int, _HasFileno]]) -> bool: # parse incoming response packet # only for non-https requests and when # tls interception is enabled - if self.request.method != httpMethods.CONNECT or \ - self.config.tls_interception_enabled(): + if self.request.method != httpMethods.CONNECT: + # See https://github.com/abhinavsingh/proxy.py/issues/127 for why + # currently response parsing is disabled when TLS interception is enabled. + # + # or self.config.tls_interception_enabled(): if self.response.state == httpParserStates.COMPLETE: if self.pipeline_response is None: self.pipeline_response = HttpParser(httpParserTypes.RESPONSE_PARSER) @@ -1681,7 +1684,7 @@ def wrap_client(self) -> None: keyfile=self.config.ca_signing_key_file, certfile=generated_cert) self.client.connection.setblocking(False) - logger.info( + logger.debug( 'TLS interception using %s', generated_cert) def on_request_complete(self) -> Union[socket.socket, bool]: @@ -2568,11 +2571,11 @@ def handle_readables(self, readables: List[Union[int, _HasFileno]]) -> bool: try: client_data = self.client.recv(self.config.client_recvbuf_size) except ssl.SSLWantReadError: # Try again later - logger.warning('SSLWantReadError encountered while reading from server, will retry ...') + logger.warning('SSLWantReadError encountered while reading from client, will retry ...') return False except socket.error as e: if e.errno == errno.ECONNRESET: - logger.warning('Connection reset by upstream: %r' % e) + logger.warning('%r' % e) else: logger.exception( 'Exception while receiving from %s connection %r with reason %r' %