#ssl #ea #async #sslv3

blaze-ssl-async

SSLv3协议的遗留最小实现

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 网络编程

Download history 42/week @ 2024-03-11 8/week @ 2024-03-18 6/week @ 2024-03-25 78/week @ 2024-04-01 8/week @ 2024-04-08 9/week @ 2024-04-15 16/week @ 2024-04-22 3/week @ 2024-04-29 8/week @ 2024-05-06 12/week @ 2024-05-13 25/week @ 2024-05-20 12/week @ 2024-05-27 29/week @ 2024-06-03 26/week @ 2024-06-10 18/week @ 2024-06-17 28/week @ 2024-06-24

每月102次下载
用于 9 个crate(7 直接使用)

MIT 许可证

125KB
2.5K SLoC

⚙️Blaze SSL Async

License Cargo Version Cargo Downloads

这是一个最小化的SSLv3协议实现。它仅支持TLS_RSA_WITH_RC4_128_SHATLS_RSA_WITH_RC4_128_MD5加密。它不实现SSLv3的所有功能

此实现用于Pocket Relay,用于与使用EA自研SSLv3实现的Mass Effect 3进行本地处理,因此不能使用任何其他较新的协议。

📌 重要说明

这不是一个安全的SSL实现。这是为遗留游戏和其他软件设计的,在这些软件中无法使用更安全的协议。

如果您正在寻找具有安全重点的SSL实现,请检查https://github.com/rustls/rustlshttps://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