#tls #tcp #crypto #replace

caesar

替代Rust标准库中启用TLSv1.2的TCP监听器的直接替换品

2个不稳定版本

使用旧的Rust 2015

0.2.0 2016年3月25日
0.1.0 2016年3月9日

#62#ssl

22 每月下载次数

MIT 协议

13KB
156

Caesar

替代Rust标准库中启用TLSv1.2的TCP监听器的直接替换品。

注意:此库尚未经过测试。

简介

此库在Rust标准库的常规TCP监听器之上抽象,并提供了一个直接替换的接口,该接口在连接上添加了TLSv1.2和一些强大的加密套件。

它使用Steven Fackler的Rust绑定OpenSSL库来提供底层的TLS功能。如果您不信任OpenSSL(我也不信任),您可以将此包与LibreSSL编译(以下提供了说明)。

* 只需在常规类型前加上Tls(例如TlsTcpListener),并为新的错误类型编写错误处理代码。

编译

先决条件

  • OpenSSL/LibreSSL头文件

如何和在哪里安装这些头文件取决于您的平台。快速Google搜索应该可以解决这个问题。

构建

根据Rust OpenSSL绑定README,根据您的平台,有各种方法编译此包。然而,最通用的途径是手动使用环境变量配置您的构建(而且无论如何这是必需的,以编译针对LibreSSL)。只有三个

  • OPENSSL_LIB_DIR:使用此变量指定您选择的SSL库的lib目录的路径
  • OPENSSL_INCLUDE_DIR:使用此变量指定您选择的SSL库的include目录的路径
  • OPENSSL_STATIC:[可选]这是一个布尔变量,指定是否将SSL库静态链接

完整的命令可能看起来像这样

$ env OPENSSL_LIB_DIR="/usr/local/opt/libressl/lib" \
        OPENSSL_INCLUDE_DIR="/usr/local/opt/libressl/include" \
        OPENSSL_STATIC=true cargo build

用法

Caesar提供了一个CaesarError枚举类型,其中一个变体用于I/O错误,另一个用于SSL错误。您可以在库文档中找到详细信息。

extern crate caesar;

use caesar::{TlsTcpListener, TlsTcpStream};
use std::thread;

let key_path = "path_to_certs/key.pem";
let cert_path = "path_to_certs/cert.pem";

let listener = TlsTcpListener::bind("127.0.0.1:8080", key_path, cert_path).unwrap()

fn handle_client(stream: TlsTcpStream) {
    // ...
}

// accept connections and process them, spawning a new thread for each one
for stream in listener.incoming() {
    match stream {
        Ok(stream) => {
            thread::spawn(move || {
                // connection succeeded
                handle_client(stream)
            });
        }
        Err(e) => { /* connection failed */ }
    }
}

// close the socket server
drop(listener);

注意

此包是为了满足我编写Postage时的需求而编写的。因此,只从TcpListener接口移植了一组最小的功能。随着需求的出现,我可能会继续扩展此功能集;如果您需要的功能较早,而我还没有实现,您欢迎贡献。

待办事项

  • 编写测试
  • 编写适当的文档
  • 代码审查

许可

此代码根据MIT许可证授权。请参阅LICENSE

依赖项

~1.7–3MB
~68K SLoC