2个不稳定版本
使用旧的Rust 2015
0.2.0 | 2016年3月25日 |
---|---|
0.1.0 | 2016年3月9日 |
#62 在 #ssl
22 每月下载次数
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