Search code examples
pythonpython-2.7ssltorsocks

Proxy not working over SSL connection


I'm trying to use tor, socksipy and ssl to proxy a ssl connection. My client looks like this:

import socks, ssl
s = socks.socksocket()
s.setproxy(socks.PROXY_TYPE_SOCKS5,"127.0.0.1", 9050)
ssl_sock = ssl.wrap_socket(s, ssl_version=ssl.PROTOCOL_TLSv1)
ssl_sock.connect(('127.0.0.1', 443))

The server just accepts connections and prints getpeername.

The peer name is always 127.0.0.1. It doesn't even matter if I give it a non-valid proxy. The client won't complain, it will connect anyway.

How do I make it connect through the proxy?


Solution

  • I managed to figure it out so I will leave the answer here for future reference.

    The first problem was that I tried to connect to 127.0.0.1. As the request was proxied, the proxy would try to connect to 127.0.0.1, so it would try to connect to itself, not to me. I had to configure my router to forward requests on port 443 to my laptop and then I replaced 127.0.0.1 with my routers IP.

    After that was out of the way, I found out that socksipy doesn't play very well with ssl. I had to call connect on the socket before wrapping it, otherwise I'd get a handshake failure. The code became:

    import socks, ssl
    s = socks.socksocket()
    s.setproxy(socks.PROXY_TYPE_SOCKS5,"127.0.0.1", 9050)
    s.connect(('127.0.0.1', 443))
    ssl_sock = ssl.wrap_socket(s, ssl_version=ssl.PROTOCOL_TLSv1)
    

    After that, everything was working fine.