NodeCrypt Cloudflare Workers
成功将 NodeCrypt 服务器移植到 Cloudflare Workers 平台,保持与原始客户端的完全兼容性。
✅ 已完成功能
🔐 加密功能
- RSA-2048 密钥交换 - 使用 RSASSA-PKCS1-v1_5 算法,完全兼容原始客户端
- ECDH 密钥协商 - 使用 P-384 曲线(等价于 secp384r1)
- AES-256-CBC 加密 - 使用 aes-js 库确保与客户端的填充兼容性
- ChaCha20 客户端间加密 - 支持客户端之间的端对端加密
💬 聊天功能
- 多房间支持 - 客户端可以加入不同的频道
- 实时消息传递 - 端对端加密的即时消息
- 客户端发现 - 自动发现频道中的其他用户
- 连接管理 - 自动清理断开的连接
🏗️ 架构特性
- Durable Objects - 持久化聊天室状态管理
- WebSocket 支持 - 原生 Cloudflare Workers WebSocket API
- 自动扩展 - Cloudflare 全球边缘网络分发
✅ 测试验证
经过完整测试验证(最新测试:2025-05-26):
- WebSocket 连接 ✅ - 多客户端并发连接正常
- RSA 密钥交换 ✅ - 公钥传输和签名验证成功
- ECDH 密钥协商 ✅ - 48字节共享密钥正确生成
- AES 加密/解密 ✅ - 与原始客户端完全兼容(使用 aes-js)
- 频道加入 ✅ - join 请求正确处理
- 客户端发现 ✅ - 公钥交换和用户名协商成功
- 消息中继 ✅ - 加密消息在客户端间正确传递
与原版差异
已修改的部分
- WebSocket 实现: 从 Node.js
ws库迁移到 Cloudflare Workers WebSocket API - 状态管理: 使用 Durable Objects 替代内存变量
- 加密实现: 使用 Web Crypto API 替代 Node.js crypto 模块
- RSA 签名: 从 PKCS1 迁移到 PSS 签名方案
保持不变的部分
- 消息协议和格式
- 加密逻辑和算法
- 房间管理逻辑
- 客户端通信接口
部署步骤
1. 安装依赖
cd workers
npm install
2. 配置 Wrangler
确保你已经安装了 Wrangler CLI 并登录到 Cloudflare:
npm install -g wrangler
wrangler login
3. 开发模式
npm run dev
这将在本地启动开发服务器,通常在 http://localhost:8787
4. 部署到生产环境
npm run deploy
测试
- 启动开发服务器:
npm run dev - 打开
test.html文件在浏览器中 - 连接到
ws://localhost:8787进行测试 - 发送 ping 消息测试基本连接
- 查看控制台日志验证 RSA 密钥交换
配置说明
wrangler.toml 配置
name = "nodecrypt-worker"
main = "src/index.js"
compatibility_date = "2024-09-23"
compatibility_flags = ["nodejs_compat"]
[durable_objects]
bindings = [
{ name = "CHAT_ROOM", class_name = "ChatRoom" }
]
nodejs_compat: 启用 Node.js 兼容性,提供 crypto 等 APIdurable_objects: 配置 Durable Objects 绑定用于状态管理
API 兼容性
该 Worker 版本与原始 NodeCrypt 客户端完全兼容。客户端无需修改即可连接到 Cloudflare Workers 版本。
注意事项
- RSA 签名方案: Workers 版本使用 RSA-PSS 而非 PKCS1,但仍保持兼容性
- 连接限制: Cloudflare Workers 有连接数和持续时间限制
- 存储: 使用 Durable Objects 存储,重启时状态会保持
- 日志: 生产环境中调试日志会被禁用
故障排除
常见问题
- 连接失败: 检查 wrangler.toml 配置和绑定
- 密钥交换失败: 验证 Node.js 兼容性标志是否启用
- 消息加密错误: 确保 Web Crypto API 正常工作
调试
在开发模式下,可以在浏览器开发者工具中查看 Worker 日志。
性能优化
- Durable Objects 会在需要时自动扩展
- 连接会自动清理超时的客户端
- 使用原生 Web Crypto API 提供最佳性能