mike820324 / microProxy

A http/https interceptor written in pure python.
MIT License
17 stars 3 forks source link

[TlsLayer]: source stream close failed when tls handshaking failed #234

Closed chhsiao90 closed 7 years ago

chhsiao90 commented 7 years ago

I found that when TLS handshake for source stream failed, the proxy server will print the stacktrace, then try close a detached IOStream. That will turn into print two exception stacktrace.

I think the second one exception should not be displayed.

Traceback (most recent call last):
  File "/Users/han-pc/.pyenv/versions/2.7.12/envs/mp/lib/python2.7/site-packages/microproxy/proxy.py", line 27, in handle_stream
    self.server_state, initial_layer, initial_context)
  File "/Users/han-pc/.pyenv/versions/2.7.12/envs/mp/lib/python2.7/site-packages/tornado/gen.py", line 1008, in run
    value = future.result()
  File "/Users/han-pc/.pyenv/versions/2.7.12/envs/mp/lib/python2.7/site-packages/tornado/concurrent.py", line 232, in result
    raise_exc_info(self._exc_info)
  File "/Users/han-pc/.pyenv/versions/2.7.12/envs/mp/lib/python2.7/site-packages/tornado/gen.py", line 1014, in run
    yielded = self.gen.throw(*exc_info)
  File "/Users/han-pc/.pyenv/versions/2.7.12/envs/mp/lib/python2.7/site-packages/microproxy/layer/manager.py", line 38, in run_layers
    _handle_layer_error(error, current_context)
  File "/Users/han-pc/.pyenv/versions/2.7.12/envs/mp/lib/python2.7/site-packages/microproxy/layer/manager.py", line 34, in run_layers
    current_context = yield current_layer.process_and_return_context()
  File "/Users/han-pc/.pyenv/versions/2.7.12/envs/mp/lib/python2.7/site-packages/tornado/gen.py", line 1008, in run
    value = future.result()
  File "/Users/han-pc/.pyenv/versions/2.7.12/envs/mp/lib/python2.7/site-packages/tornado/concurrent.py", line 232, in result
    raise_exc_info(self._exc_info)
  File "/Users/han-pc/.pyenv/versions/2.7.12/envs/mp/lib/python2.7/site-packages/tornado/gen.py", line 1014, in run
    yielded = self.gen.throw(*exc_info)
  File "/Users/han-pc/.pyenv/versions/2.7.12/envs/mp/lib/python2.7/site-packages/microproxy/layer/application/tls.py", line 118, in process_and_return_context
    hostname, select_alpn)
  File "/Users/han-pc/.pyenv/versions/2.7.12/envs/mp/lib/python2.7/site-packages/tornado/gen.py", line 1008, in run
    value = future.result()
  File "/Users/han-pc/.pyenv/versions/2.7.12/envs/mp/lib/python2.7/site-packages/tornado/concurrent.py", line 232, in result
    raise_exc_info(self._exc_info)
  File "/Users/han-pc/.pyenv/versions/2.7.12/envs/mp/lib/python2.7/site-packages/tornado/gen.py", line 1014, in run
    yielded = self.gen.throw(*exc_info)
  File "/Users/han-pc/.pyenv/versions/2.7.12/envs/mp/lib/python2.7/site-packages/microproxy/layer/application/tls.py", line 87, in start_src_tls
    type(e).__name__, str(e)))
TlsError: Tls Handshaking Failed on source with: (Error) [('SSL routines', 'ssl3_read_bytes', 'tlsv1 alert unknown ca')]
2016-11-24 21:23:09,171 - tornado.application            - ERROR    - Exception in callback <functools.partial object at 0x102645ba8>
Traceback (most recent call last):
  File "/Users/han-pc/.pyenv/versions/2.7.12/envs/mp/lib/python2.7/site-packages/tornado/ioloop.py", line 600, in _run_callback
    ret = callback()
  File "/Users/han-pc/.pyenv/versions/2.7.12/envs/mp/lib/python2.7/site-packages/tornado/stack_context.py", line 275, in null_wrapper
    return fn(*args, **kwargs)
  File "/Users/han-pc/.pyenv/versions/2.7.12/envs/mp/lib/python2.7/site-packages/microproxy/tornado_ext/tcpserver.py", line 27, in <lambda>
    self.io_loop.add_future(future, lambda f: f.result())
  File "/Users/han-pc/.pyenv/versions/2.7.12/envs/mp/lib/python2.7/site-packages/tornado/concurrent.py", line 232, in result
    raise_exc_info(self._exc_info)
  File "/Users/han-pc/.pyenv/versions/2.7.12/envs/mp/lib/python2.7/site-packages/tornado/gen.py", line 1014, in run
    yielded = self.gen.throw(*exc_info)
  File "/Users/han-pc/.pyenv/versions/2.7.12/envs/mp/lib/python2.7/site-packages/microproxy/proxy.py", line 31, in handle_stream
    stream.close()
  File "/Users/han-pc/.pyenv/versions/2.7.12/envs/mp/lib/python2.7/site-packages/tornado/iostream.py", line 436, in close
    self.close_fd()
  File "/Users/han-pc/.pyenv/versions/2.7.12/envs/mp/lib/python2.7/site-packages/tornado/iostream.py", line 1002, in close_fd
    self.socket.close()