#tls #tokio #openbsd #libressl #tls-connection

tokio-libtls

Tokio对LibreSSL的libtls的绑定

6个版本 (稳定)

1.2.0 2020年4月9日
1.1.2 2019年12月20日
1.1.0-alpha1 2019年11月11日

#743 in 异步

每月下载量:49

ISC许可协议

145KB
2K SLoC

Rust对LibreSSL's libtls的绑定。

Crates.IO docs.rs Actions Build Status License

文档变更日志

LibreSSL项目提供了一组免费TLS和加密堆栈,该项目是从OpenSSL中分叉出来的,始于2014年。目标是提供一个现代化的代码库,改进安全性,并应用最佳的开发流程。

LibreSSL提供与OpenSSL's libssllibcrypto库兼容的C API。它还提供了一个新的TLS库libtls,设计用于简化编写无懈可击的应用程序。

这个Rust crate的工作区只为libtls提供语言绑定,因为其他LibreSSL API可以使用现有的rust-openssl crate。支持LibreSSL版本2.9.0至3.1.0(或更高版本)。TLSv1.3需要LibreSSL 3.1.0或更高版本。

以下crate包含在内

最低Rust版本

使用 tokio-libtls 进行异步 I/O 需要 Rust 1.39 或更高版本才能使用 async-await。此包不提供任何向下兼容性,但在较旧的 Rust 版本上可以使用版本 1.0.0

示例

请参阅 示例目录,其中包含配置、建立和连接同步和异步 TLS 连接的各种示例。以下选定的示例使用 Tokiotokio-libtls 包创建一个非阻塞的异步 TLS 连接。

use std::io;
use tokio::io::{AsyncReadExt, AsyncWriteExt};
use tokio_libtls::prelude::*;

async fn async_https_connect(servername: &str) -> io::Result<()> {
    let addr = &(servername.to_owned() + ":443");

    let request = format!(
        "GET / HTTP/1.1\r\n\
         Host: {}\r\n\
         Connection: close\r\n\r\n",
        servername
    );

    let config = Builder::new().build()?;
    let mut tls = connect(addr, &config, None).await?;
    tls.write_all(request.as_bytes()).await?;

    let mut buf = vec![0u8; 1024];
    tls.read_exact(&mut buf).await?;

    let ok = b"HTTP/1.1 200 OK\r\n";
    assert_eq!(&buf[..ok.len()], ok);

    Ok(())
}

#[tokio::main]
async fn main() {
    async_https_connect("www.example.com").await.unwrap();
}

根据 OpenBSD-ISC 风格的许可证授权,有关详细信息,请参阅 LICENSE

依赖关系

~11MB
~117K SLoC