tlsproxy
========

`tlsproxy` is a TLS proxy written with GnuTLS. It is mostly designed as an
example of how to use asynchronous (non-blocking) I/O with GnuTLS. More
accurately, it was designed so I could learn how to do it. I think I've
got it right.

To that end, it's been divided up as follows:

* `crypto.c` does all the crypto, and `tlssession_mainloop()` does the hard work.
* `buffer.c` provides ring buffer support.
* `tlsproxy.c` deals with command line options and connecting sockets.

It can be used in two modes:

* Client mode (default). Listens on an unencrypted port, connects to
  an encrypted port.
* Server mode (run with `-s`). Listens on an encrypted port, connects to
  an unencrypted port.

Usage
=====

```
tlsproxy

Usage:
     tlsproxy [OPTIONS]

A TLS client or server proxy

Options:
     -c, --connect ADDRESS     Connect to ADDRESS
     -l, --listen ADDRESS      Listen on ADDRESS
     -K, --key FILE            Use FILE as private key
     -C, --cert FILE           Use FILE as public key
     -A, --cacert FILE         Use FILE as public CA cert file
     -H, --hostname HOSTNAME   Use HOSTNAME to validate the CN of the peer
                               rather than hostname extracted from -C option
     -s, --server              Run the listen port encrypted rather than the
                               connect port
     -i, --insecure            Do not validate certificates
     -n, --nofork              Do not fork off (aids debugging); specify twice
                               to stop forking on accept as well
     -d, --debug               Turn on debugging
     -h, --help                Show this usage message
```

License
=======

MIT
