14个版本
0.4.0 | 2023年12月31日 |
---|---|
0.3.7 | 2023年11月9日 |
0.3.6 | 2023年6月3日 |
0.3.5 | 2023年3月18日 |
0.1.1 | 2022年11月11日 |
#830 in 网络编程
每月102次下载
用于 9 个crate(7 直接使用)
125KB
2.5K SLoC
⚙️Blaze SSL Async
这是一个最小化的SSLv3协议实现。它仅支持TLS_RSA_WITH_RC4_128_SHA
和TLS_RSA_WITH_RC4_128_MD5
加密。它不实现SSLv3的所有功能
此实现用于Pocket Relay,用于与使用EA自研SSLv3实现的Mass Effect 3进行本地处理,因此不能使用任何其他较新的协议。
📌 重要说明
这不是一个安全的SSL实现。这是为遗留游戏和其他软件设计的,在这些软件中无法使用更安全的协议。
如果您正在寻找具有安全重点的SSL实现,请检查https://github.com/rustls/rustls或https://github.com/sfackler/rust-native-tls
此实现专门为Pocket Relay设计,用于与Mass Effect 3一起使用。
它不支持以下功能
- 会话恢复
- 客户端证书认证
- 服务器证书验证(信任所有服务器证书)
- 服务器密钥交换
- 从警告警报中恢复(所有警告都视为致命)
- SSL压缩模式
📄 使用方法
将依赖项添加到您的cargo依赖项中
blaze-ssl-async = "^0.3"
Crate功能
默认功能是["blaze-cert"]
功能 | 描述 |
---|---|
blaze-cert | 包含一个内置的默认BlazeServerContext,该Context使用用于绕过旧EA ProtoSSL实现验证的证书 |
连接到服务器
以下示例是作为客户端连接到服务器的示例
// BlazeStream is a wrapper over tokio TcpStream
use blaze_ssl_async::BlazeStream;
// Tokio read write extensions used for read_exact and write_all
use tokio::io::{AsyncReadExt, AsyncWriteExt};
#[tokio::main]
async fn main() -> std::io::Result<()> {
// BlazeStream::connect takes in any value that implements ToSocketAddrs
// some common implementations are "HOST:PORT" and ("HOST", PORT)
let mut stream = BlazeStream::connect(("159.153.64.175", 42127)).await?;
// TODO... Read from the stream as you would a normal TcpStream
let mut buf = [0u8; 12];
stream.read_exact(&mut buf).await?;
// Write the bytes back
stream.write_all(&buf).await?;
// You **MUST** flush BlazeSSL streams or else the data will never
// be sent to the client (Attempt to read will automatically flush)
stream.flush().await?;
Ok(())
}
绑定服务器
以下示例是创建接受客户端的服务器的示例
// BlazeListener is wrapper over tokios TcpListener
use blaze_ssl_async::{BlazeListener, BlazeServerContext};
// Tokio read write extensions used for read_exact and write_all
use tokio::io::{AsyncReadExt, AsyncWriteExt};
use std::sync::Arc;
#[tokio::main]
async fn main() -> std::io::Result<()> {
let context: Arc<BlazeServerContext> = Default::default();
// Bind a listener accepts the same address values as the tokio TcpListener
let listener = BlazeListener::bind(("0.0.0.0", 42127), context).await?;
// Accept new connections
loop {
// Accept the initial TcpStream without SSL
let accept = listener.accept().await?;
tokio::spawn(async move {
// Complete the SSL handshake process in a spawned task
let (stream, addr) = accept.finish_accept()
.await
.expect("Failed to finish accepting stream");
// Read and write to the stream the same as in the client example
});
}
}
📄 许可证
MIT许可证(MIT)
版权(c)2022 - 2023 Jacobtread
本许可证授权任何人免费获得此软件及其相关文档文件(以下简称“软件”)的副本,在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、许可和/或销售软件的副本,并允许向软件提供者授予此类权利,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或实质部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是基于合同、侵权或其他原因,无论起因于、源于或与软件或软件的使用或其他交易有关。
依赖关系
~6-15MB
~187K SLoC