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

tokio-tls-helper

简化 TLS 使用的实用工具。大部分代码是从 tonic 中提取出来的。

4 个版本 (2 个重大更改)

0.3.0 2021年3月24日
0.2.0 2021年3月19日
0.1.1 2021年3月19日
0.1.0 2021年3月18日

2334开发工具

MIT 许可协议

24KB
473

Tokio TLS Helper

此代码是基于tonic修改和派生而来。它简化了为您的 tokio TCP 应用程序使用 TLS 的复杂性。

用法

服务器

// 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);
            }
        });
    }
});

客户端

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");

注意 TLS 是多种选择之一,用于保护您的 TCP 连接,您还可以考虑实现 snowNoise 协议

许可协议

tokio-tls-helper 在 MIT 许可协议下分发。

有关详细信息,请参阅LICENSE

版权所有 2021 Tyr Chen

依赖项

~12–27MB
~445K SLoC