fix(security): 分离 JWT 与数据加密密钥并新增启动安全体检
.env 中 JWT_SECRET 仍逐字节等于 .env.example 的示例值,且 DATA_ENCRYPTION_KEY 未设置、按 config.go 的回退逻辑实际等于 JWT_SECRET。任何见过仓库的人都能伪造 管理员 JWT,并解密库中全部 API Client / 回调密钥密文。 - JWT_SECRET 与 DATA_ENCRYPTION_KEY 改为各自独立的强随机值 - 新增 Config.SecurityWarnings():示例密钥 / 未分离 / release 下开调试日志均告警 - 新增 cmd/reencrypt_secrets:默认只预演,-apply 才写库;幂等,坏数据不中断整轮 - 新增 docs/密钥轮换说明.md;.gitignore 忽略 .env.bak* - release 模式下关闭 OPEN_API_DEBUG
This commit is contained in:
@@ -4,7 +4,13 @@ FRONTEND_PORT=15173
|
||||
# Caddy 对外端口:生产部署需域名绑定 80/443;本机与其他站点共存时可覆盖
|
||||
# HTTP_PORT=80
|
||||
# HTTPS_PORT=443
|
||||
# JWT_SECRET 用于签发后台登录 Token;泄露 = 任何人都能伪造管理员身份。
|
||||
# 生成方式:openssl rand -hex 48
|
||||
JWT_SECRET=your_very_secure_jwt_secret_here_change_me_in_production
|
||||
# DATA_ENCRYPTION_KEY 用于加密落库的 API Client / 回调密钥,必须与 JWT_SECRET 独立,
|
||||
# 留空会回退到 JWT_SECRET(启动时会打印安全告警)。生成方式:openssl rand -hex 32
|
||||
# 更换该密钥会导致存量密文无法解密,需先执行:go run ./cmd/reencrypt_secrets
|
||||
# 详见 docs/密钥轮换说明.md
|
||||
DATA_ENCRYPTION_KEY=your_32_plus_char_data_encryption_key_change_me
|
||||
# 仅用于空数据库的首次启动;已有管理员账号时不会被覆盖。
|
||||
POSTGRES_USER=affiliate
|
||||
|
||||
Reference in New Issue
Block a user