S2n QUIC(QUIC的实施)

2022-02-19 20:22:51

一个简单易用的API。请参见仅使用几个API调用构建的s2n quic echo服务器的示例

广泛的自动化测试,包括模糊测试、集成测试、单元测试、快照测试、效率测试、性能基准测试、互操作性测试等

与s2n tls、AWS和#39集成;它简单、小、快速、安全的TLS实现,以及生锈

还有更多,包括立方体拥塞控制器支持、数据包调整、通用分段卸载支持、路径MTU发现,以及与地址分离的唯一连接标识符

注意:在类unix系统上,s2n tls将用作默认的tls提供程序,并且需要安装C编译器。

下面实现了一个基本的echo服务器和客户端。客户端连接到服务器,并将其stdin通过管道传输到流上。服务器监听新的流,并将接收到的任何数据传回客户端。然后,客户端将所有流数据通过管道传输到标准输出。

//src/bin/server。rs使用s2n_quic::Server;使用std::error::error#[tokio::main]异步fn main()->;结果<;(),盒子<;动态误差>>;{let mut server=server::builder()。带有_tls(";/path/to/cert.pem";,";/path/to/key.pem";)。用io(";127.0.0.1:4433";)。开始()?;而让一些(mut连接)=服务器。接受()。wait{//为连接tokio::spawn(异步移动{while Ok(Some(mut stream))=connection.accept_directional_stream()。wait{//为流tokio::spawn(异步移动{//回显任何数据,同时让Ok(Some(data))=stream.receive()。wait{stream.send(data)等候expect(";流应该是开放的";)}}}}}}好(())}

//src/bin/client。rs使用s2n_quic::{client::Connect,client};使用std:{error::error,net::SocketAddr}#[tokio::main]异步fn main()->;结果<;(),盒子<;动态误差>>;{let client=client::builder()。开始()?;let addr:SocketAddr=";127.0.0.1:4433". parse()?;让connect=connect::new(addr)。带有服务器名(";localhost";);让mut connection=client。连接。等待?;//确保连接不存在';t连接处于非活动状态时超时。让你活着(对);//打开一个新的流,拆分接收端和发送端,让流=连接。打开\u双向\u流()。等候let(mut receive_stream,mut send_stream)=流。split();//生成一个任务,将服务器的响应复制到stdout-tokio::spawn(异步移动{let mut-stdout=tokio::io::stdout();let z=tokio::io::copy(&;mut-receive_-stream,&;mut-stdout)。wait;})从stdin复制数据并将其发送到服务器,让mut stdin=tokio::io::stdin();tokio::io::复制(&;mut stdin,&;mut send_stream)。等候好(())}

s2n quic将维持至少6个月的滚动MSRV(最低支持锈蚀版本)政策。目前的s2n quic版本不保证基于MSRV之前的生锈版本。

如果您在s2n quic中发现潜在的安全问题,我们要求您通过我们的漏洞报告页面通知AWS安全。请不要创建公共github问题。

如果您打包或分发s2n quic,或将s2n quic用作大型多用户服务的一部分,您可能有资格获得未来s2n quic发布的预先通知。请联系s2n [email protected].