SNI代理与TCP多路复用器
项目描述
SniTun
基于TCP多路复用器的SNI代理上的端到端加密
连接流程
[ CLIENT ] --AUTH/CONFIG--> [ SESSION MASTER ] (Trusted connection)
[ CLIENT ] <--FERNET-TOKEN- [ SESSION MASTER ]
[ CLIENT ] --------FERNET-TOKEN---------------------> [ SNITUN ] (Unsecure connection)
[ CLIENT ] <-------CHALLENGE-RESPONSE-(AES/CBC)-----> [ SNITUN ]
<---> <------------------------------>
[ ENDPOINT ] <---> [ CLIENT ] <---------MULTIPLEXER---(AES/CBC)--------> [ SNITUN ] <------EXTERNAL-CONECTIONS-----> [ DEVICE ]
| <---> <------------------------------> |
| |
| <--------------------------------------------------END-TO-END-SSL------------------------------------------------->|
(Trusted connection)
Fernet令牌
会话主创建一个Fernet令牌,从客户端配置(AES/白名单)中提取,并附加主机名和一个UTC时间戳,直到令牌有效。
{
"valid": 1923841,
"hostname": "myname.ui.nabu.casa",
"aes_key": "hexstring",
"aes_iv": "hexstring"
}
SniTun服务器必须能够解密此令牌以验证客户端的真实性。然后SniTun启动挑战/响应处理来验证AES密钥并确保它是请求Fernet令牌的同一客户端。
注意:SniTun服务器不执行任何用户身份验证!
挑战/响应
Snitun服务器从随机的40位值创建一个SHA256哈希。这个值被加密并发送到客户端,客户端解密这个值,然后使用这个值和另一个SHA256哈希发送加密数据回Snitun。如果验证成功,客户端进入多路复用模式。
多路复用协议
使用AES/CBC加密头部。有效负载应为SSL。ID对于每个TCP连接都是变化的,并且对于每个连接都是唯一的。大小是数据有效负载的大小。
额外信息可能包括新消息的调用者IP地址。否则,它是随机位。
|________________________________________________________|
|-----------------HEADER---------------------------------|______________________________________________|
|------ID-----|--FLAG--|--SIZE--|---------EXTRA ---------|--------------------DATA----------------------|
| 16 bytes | 1 byte | 4 bytes| 11 bytes | variable |
|--------------------------------------------------------|----------------------------------------------|
消息标志/类型
0x01
:新 | 额外数据包括第一个字节为ASCII值4或6,后跟调用者IP字节。0x02
:数据0x04
:关闭0x05
:ping | 额外数据是对ping的响应“ping”或“pong”。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。
源分发
snitun-0.39.1.tar.gz (33.1 kB 查看哈希值)
构建分发
snitun-0.39.1-py3-none-any.whl (39.1 kB 查看哈希值)