mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2025-12-06 13:54:41 +08:00
* feat: remove admin mode * feat: bugfix * feat(crypto): 添加RSA-OAEP + AES-GCM混合加密服务 - 实现CryptoService加密服务,支持RSA-OAEP-2048 + AES-256-GCM混合加密 - 集成数据库层加密,自动加密存储敏感字段(API密钥、私钥等) - 支持环境变量DATA_ENCRYPTION_KEY配置数据加密密钥 - 适配SQLite数据库加密存储(从PostgreSQL移植) - 保持Hyperliquid代理钱包处理兼容性 - 更新.gitignore以正确处理crypto模块代码 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: tinkle-community <tinklefund@gmail.com> * feat(scripts): 添加加密环境一键设置脚本 - setup_encryption.sh: 一键生成RSA密钥对+数据加密密钥+JWT密钥 - generate_rsa_keys.sh: 专业的RSA-2048密钥对生成工具 - generate_data_key.sh: 生成AES-256数据加密密钥和JWT认证密钥 - ENCRYPTION_README.md: 详细的加密系统说明文档 - 支持自动检测现有密钥并只生成缺失的密钥 - 完善的权限管理和安全验证 - 兼容macOS和Linux的跨平台支持 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: tinkle-community <tinklefund@gmail.com> * feat(api): 添加加密API端点和Gin框架集成 - 新增CryptoHandler处理加密相关API请求 - 提供/api/crypto/public-key端点获取RSA公钥 - 提供/api/crypto/decrypt端点解密敏感数据 - 适配Gin框架的HTTP处理器格式 - 集成CryptoService到API服务器 - 支持前端加密数据传输和解密 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: tinkle-community <tinklefund@gmail.com> * feat(web): 添加前端加密服务和两阶段密钥输入组件 - CryptoService: Web Crypto API集成,支持RSA-OAEP加密 - TwoStageKeyModal: 安全的两阶段私钥输入组件,支持剪贴板混淆 - 完善国际化翻译支持加密相关UI文本 - 修复TypeScript类型错误和编译问题 - 支持前端敏感数据加密传输到后端 - 增强用户隐私保护和数据安全 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: tinkle-community <tinklefund@gmail.com> * feat(auth): 增强JWT认证安全性 - 优先使用环境变量JWT_SECRET而不是数据库配置 - 支持通过.env文件安全配置JWT认证密钥 - 保留数据库配置作为回退机制 - 改进JWT密钥来源日志显示 - 增强系统启动时的安全配置检查 - 支持运行时动态JWT密钥切换 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: tinkle-community <tinklefund@gmail.com> * feat(docker): 集成加密环境变量到Docker部署 - 添加DATA_ENCRYPTION_KEY环境变量传递到容器 - 添加JWT_SECRET环境变量支持 - 挂载secrets目录使容器可访问RSA密钥文件 - 确保容器内加密服务正常工作 - 解决容器启动失败和加密初始化问题 - 完善Docker Compose加密环境配置 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: tinkle-community <tinklefund@gmail.com> * feat(start): 集成自动加密环境检测和设置 - 增强check_encryption()函数检测JWT_SECRET和DATA_ENCRYPTION_KEY - 自动运行setup_encryption.sh当检测到缺失密钥时 - 改进加密状态显示,包含RSA+AES+JWT全套加密信息 - 优化用户体验,提供清晰的加密配置反馈 - 支持一键设置完整加密环境 - 确保容器启动前加密环境就绪 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: tinkle-community <tinklefund@gmail.com> * feat: format fix * fix(security): 修复前端模型和交易所配置敏感数据明文传输 - 在handleSaveModelConfig中对API密钥进行RSA-OAEP加密 - 在handleSaveExchangeConfig中对API密钥、Secret密钥和Aster私钥进行加密 - 只有非空敏感数据才进行加密处理 - 添加加密失败错误处理和用户友好提示 - 增加encryptionFailed翻译键的中英文支持 - 使用用户ID和会话ID作为加密上下文增强安全性 这修复了之前敏感数据在网络传输中以明文形式发送的安全漏洞。 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: tinkle-community <tinklefund@gmail.com> * fix(crypto): 修复后端加密服务集成和缺失的加密端点 - 添加Server结构体缺少的cryptoService字段 - 实现handleUpdateModelConfigsEncrypted处理器用于模型配置加密传输 - 修复handleUpdateExchangeConfigsEncrypted中的函数调用 - 在前端API中添加updateModelConfigsEncrypted方法 - 统一RSA密钥路径从secrets/rsa_key改为keys/rsa_private.key - 确保前端可以使用加密端点安全传输敏感数据 - 兼容原有加密通信模式和二段输入私钥功能 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: tinkle-community <tinklefund@gmail.com> --------- Co-authored-by: icy <icyoung520@gmail.com> Co-authored-by: tinkle-community <tinklefund@gmail.com>
149 lines
5.2 KiB
Bash
Executable File
149 lines
5.2 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# RSA密钥对生成脚本 - 用于Mars AI交易系统加密服务
|
||
# 生成用于混合加密的RSA-2048密钥对
|
||
|
||
set -e # 遇到错误立即退出
|
||
|
||
# 颜色定义
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# 配置
|
||
RSA_KEY_SIZE=2048
|
||
SECRETS_DIR="secrets"
|
||
PRIVATE_KEY_FILE="$SECRETS_DIR/rsa_key"
|
||
PUBLIC_KEY_FILE="$SECRETS_DIR/rsa_key.pub"
|
||
|
||
echo -e "${BLUE}╔══════════════════════════════════════════════════════════════════╗${NC}"
|
||
echo -e "${BLUE}║ Mars AI交易系统 RSA密钥生成器 ║${NC}"
|
||
echo -e "${BLUE}║ RSA-2048 混合加密密钥对 ║${NC}"
|
||
echo -e "${BLUE}╚══════════════════════════════════════════════════════════════════╝${NC}"
|
||
echo
|
||
|
||
# 检查是否安装了 OpenSSL
|
||
if ! command -v openssl &> /dev/null; then
|
||
echo -e "${RED}❌ 错误: 系统中未安装 OpenSSL${NC}"
|
||
echo -e "请安装 OpenSSL:"
|
||
echo -e " macOS: ${YELLOW}brew install openssl${NC}"
|
||
echo -e " Ubuntu/Debian: ${YELLOW}sudo apt-get install openssl${NC}"
|
||
echo -e " CentOS/RHEL: ${YELLOW}sudo yum install openssl${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
echo -e "${GREEN}✓ OpenSSL 已安装: $(openssl version)${NC}"
|
||
|
||
# 创建 secrets 目录
|
||
if [ ! -d "$SECRETS_DIR" ]; then
|
||
echo -e "${YELLOW}📁 创建 $SECRETS_DIR 目录...${NC}"
|
||
mkdir -p "$SECRETS_DIR"
|
||
chmod 700 "$SECRETS_DIR"
|
||
echo -e "${GREEN}✓ 目录创建成功${NC}"
|
||
else
|
||
echo -e "${GREEN}✓ $SECRETS_DIR 目录已存在${NC}"
|
||
fi
|
||
|
||
# 检查现有密钥
|
||
if [ -f "$PRIVATE_KEY_FILE" ] || [ -f "$PUBLIC_KEY_FILE" ]; then
|
||
echo
|
||
echo -e "${YELLOW}⚠️ 检测到现有的RSA密钥文件:${NC}"
|
||
[ -f "$PRIVATE_KEY_FILE" ] && echo -e " • $PRIVATE_KEY_FILE"
|
||
[ -f "$PUBLIC_KEY_FILE" ] && echo -e " • $PUBLIC_KEY_FILE"
|
||
echo
|
||
read -p "是否覆盖现有密钥? [y/N]: " -n 1 -r
|
||
echo
|
||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||
echo -e "${BLUE}ℹ️ 操作已取消${NC}"
|
||
exit 0
|
||
fi
|
||
echo -e "${YELLOW}🗑️ 删除现有密钥文件...${NC}"
|
||
rm -f "$PRIVATE_KEY_FILE" "$PUBLIC_KEY_FILE"
|
||
fi
|
||
|
||
echo
|
||
echo -e "${BLUE}🔐 开始生成 RSA-$RSA_KEY_SIZE 密钥对...${NC}"
|
||
|
||
# 生成私钥
|
||
echo -e "${YELLOW}📝 步骤 1/3: 生成 RSA 私钥 ($RSA_KEY_SIZE bits)...${NC}"
|
||
if openssl genrsa -out "$PRIVATE_KEY_FILE" $RSA_KEY_SIZE 2>/dev/null; then
|
||
echo -e "${GREEN}✓ 私钥生成成功${NC}"
|
||
else
|
||
echo -e "${RED}❌ 私钥生成失败${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# 设置私钥权限
|
||
chmod 600 "$PRIVATE_KEY_FILE"
|
||
echo -e "${GREEN}✓ 私钥权限设置为 600${NC}"
|
||
|
||
# 生成公钥
|
||
echo -e "${YELLOW}📝 步骤 2/3: 从私钥提取公钥...${NC}"
|
||
if openssl rsa -in "$PRIVATE_KEY_FILE" -pubout -out "$PUBLIC_KEY_FILE" 2>/dev/null; then
|
||
echo -e "${GREEN}✓ 公钥生成成功${NC}"
|
||
else
|
||
echo -e "${RED}❌ 公钥生成失败${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# 设置公钥权限
|
||
chmod 644 "$PUBLIC_KEY_FILE"
|
||
echo -e "${GREEN}✓ 公钥权限设置为 644${NC}"
|
||
|
||
# 验证密钥
|
||
echo -e "${YELLOW}📝 步骤 3/3: 验证密钥对...${NC}"
|
||
if openssl rsa -in "$PRIVATE_KEY_FILE" -check -noout 2>/dev/null; then
|
||
echo -e "${GREEN}✓ 私钥验证通过${NC}"
|
||
else
|
||
echo -e "${RED}❌ 私钥验证失败${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
if openssl rsa -in "$PUBLIC_KEY_FILE" -pubin -text -noout &>/dev/null; then
|
||
echo -e "${GREEN}✓ 公钥验证通过${NC}"
|
||
else
|
||
echo -e "${RED}❌ 公钥验证失败${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# 显示密钥信息
|
||
echo
|
||
echo -e "${GREEN}🎉 RSA密钥对生成成功!${NC}"
|
||
echo
|
||
echo -e "${BLUE}📋 密钥信息:${NC}"
|
||
echo -e " 私钥文件: ${YELLOW}$PRIVATE_KEY_FILE${NC}"
|
||
echo -e " 公钥文件: ${YELLOW}$PUBLIC_KEY_FILE${NC}"
|
||
echo -e " 密钥大小: ${YELLOW}$RSA_KEY_SIZE bits${NC}"
|
||
echo
|
||
|
||
# 显示文件大小
|
||
PRIVATE_SIZE=$(stat -f%z "$PRIVATE_KEY_FILE" 2>/dev/null || stat -c%s "$PRIVATE_KEY_FILE" 2>/dev/null || echo "未知")
|
||
PUBLIC_SIZE=$(stat -f%z "$PUBLIC_KEY_FILE" 2>/dev/null || stat -c%s "$PUBLIC_KEY_FILE" 2>/dev/null || echo "未知")
|
||
|
||
echo -e "${BLUE}📏 文件大小:${NC}"
|
||
echo -e " 私钥: ${YELLOW}$PRIVATE_SIZE bytes${NC}"
|
||
echo -e " 公钥: ${YELLOW}$PUBLIC_SIZE bytes${NC}"
|
||
|
||
# 显示公钥内容预览
|
||
echo
|
||
echo -e "${BLUE}🔍 公钥内容预览:${NC}"
|
||
head -n 5 "$PUBLIC_KEY_FILE" | sed 's/^/ /'
|
||
echo -e " ${YELLOW}...${NC}"
|
||
tail -n 2 "$PUBLIC_KEY_FILE" | sed 's/^/ /'
|
||
|
||
echo
|
||
echo -e "${GREEN}✅ RSA密钥对生成完成!${NC}"
|
||
echo
|
||
echo -e "${YELLOW}📋 使用说明:${NC}"
|
||
echo -e " 1. 私钥文件 ($PRIVATE_KEY_FILE) 用于服务器端解密"
|
||
echo -e " 2. 公钥文件 ($PUBLIC_KEY_FILE) 可以分发给客户端用于加密"
|
||
echo -e " 3. 确保私钥文件的安全性,不要泄露给第三方"
|
||
echo -e " 4. 在生产环境中,建议将私钥存储在安全的密钥管理服务中"
|
||
echo
|
||
echo -e "${RED}⚠️ 安全提醒:${NC}"
|
||
echo -e " • 私钥文件权限已设置为 600 (仅所有者可读写)"
|
||
echo -e " • 请定期备份密钥文件"
|
||
echo -e " • 建议在不同环境使用不同的密钥对"
|
||
echo |