#tls #tokio #tonic #helper #applications #cert #identity

tokio-tls-helper

Utility tool to make TLS easy to use. Most of the code is extracted from tonic.

4 releases (2 breaking)

0.3.0 Mar 24, 2021
0.2.0 Mar 19, 2021
0.1.1 Mar 19, 2021
0.1.0 Mar 18, 2021

#2334 in Development tools

MIT license

24KB
473 lines

Tokio TLS Helper

This code is modified and derived from tonic. It reduces the complexity of using TLS for your tokio TCP applications.

Usage:

Server:

// you could also build your config with cert and identity separately. See tests.
let config: ServerTlsConfig = toml::from_str(config_file).unwrap();
let acceptor = config.tls_acceptor().unwrap();
let listener = TcpListener::bind(addr).await.unwrap();
tokio::spawn(async move {
    loop {
        let (stream, peer_addr) = listener.accept().await.unwrap();
        let stream = acceptor.accept(stream).await.unwrap();
        info!("server: Accepted client conn with TLS");

        let fut = async move {
            let (mut reader, mut writer) = split(stream);
            let n = copy(&mut reader, &mut writer).await?;
            writer.flush().await?;
            debug!("Echo: {} - {}", peer_addr, n);
        }

        tokio::spawn(async move {
            if let Err(err) = fut.await {
                error!("{:?}", err);
            }
        });
    }
});

Client:

let msg = b"Hello world\n";
let mut buf = [0; 12];

// you could also build your config with cert and identity separately. See tests.
let config: ClientTlsConfig = toml::from_str(config_file).unwrap();
let connector = config.tls_connector(Uri::from_static("localhost")).unwrap();

let stream = TcpStream::connect(addr).await.unwrap();
let mut stream = connector.connect(stream).await.unwrap();
info!("client: TLS conn established");

stream.write_all(msg).await.unwrap();

info!("client: send data");

let (mut reader, _writer) = split(stream);

reader.read_exact(buf).await.unwrap();

info!("client: read echoed data");

Note TLS is one of many choices to secure your TCP connections, you may also consider snow which implemented Noise protocol.

License

tokio-tls-helper is distributed under the terms of MIT.

See LICENSE for details.

Copyright 2021 Tyr Chen

Dependencies

~12–27MB
~445K SLoC