7 个版本 (稳定版)

1.2.0 2020年4月9日
1.1.2 2019年12月20日
1.1.0-alpha1 2019年11月11日
0.0.1 2016年5月7日

#2276 in 密码学


2 个 crate 中使用 (通过 libtls)

ISC 许可证

4MB
5.5K SLoC

C 2K SLoC // 0.2% comments Automake 1.5K SLoC // 0.1% comments Shell 1.5K SLoC // 0.1% comments M4 332 SLoC // 0.2% comments Batch 246 SLoC // 0.1% comments Rust 125 SLoC // 0.2% comments Pan 3 SLoC

包含 (模糊的 autoconf 代码, 5KB) libressl-portable/configure.ac, (模糊的 autoconf 代码, 2KB) configure.ac

Rust 对 LibreSSLlibtls 的绑定。

Crates.IO docs.rs Actions Build Status License

文档变更日志

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

LibreSSL 提供了与 OpenSSLlibssllibcrypto 库兼容的 C API。它还提供了 libtls,这是一个新的 TLS 库,旨在使编写防错应用程序更容易。

此 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。此 crate 不提供任何向后兼容性,但您可以在旧版 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

依赖项