feat: 支持 MySQL 公网 TLS CA 校验 (#86)

This commit is contained in:
chengma
2026-08-10 09:59:09 +08:00
parent 830ca58030
commit f0715ee273
10 changed files with 354 additions and 22 deletions
+13 -4
View File
@@ -174,13 +174,20 @@ database:
port: "3307"
name: autobuy
user: buy
tls_mode: disabled
tls_ca: certs/mysql84-ca.pem
password: "从安全渠道取得"
```
Admin 本地开发连接线上 MySQL 时默认仍通过 SSH 隧道,把 `port` 改为隧道的本地
端口。数据库客户端确需公网直连时,只能在项目负责人明确批准后采用固定 `/32`
来源白名单、来源限定账号、最小权限和强制 SSL,绝不能向全网开放。线上 systemd
部署继续使用环境变量:
来源白名单、来源限定账号、最小权限和强制 SSL,绝不能向全网开放。
- 同机或 SSH 隧道:`tls_mode: disabled`;
- 公网直连:`tls_mode: verify_ca`,`tls_ca` 指向服务器公开 CA。客户端要求 TLS 1.2+
并校验证书链,失败时不会回退明文。CA 证书可以公开,私钥绝不能复制到客户端。
线上 systemd 部署继续使用环境变量:
```text
CMAUTOBUY_DB_HOST=127.0.0.1
@@ -188,11 +195,13 @@ CMAUTOBUY_DB_PORT=3307
CMAUTOBUY_DB_NAME=<独立数据库名>
CMAUTOBUY_DB_USER=<最小权限账号>
CMAUTOBUY_DB_PASSWORD=<从安全渠道取得>
CMAUTOBUY_DB_TLS_MODE=disabled
CMAUTOBUY_DB_TLS_CA=<verify_ca 模式下的 CA 路径>
```
环境变量按字段覆盖 `config.yaml`,所以现有线上部署方式不受影响。生产环境文件和
本地 `config.yaml` 都不得进入仓库、日志或工单;线上 MySQL 只监听本机,本地开发
通过 SSH 隧道连接独立的 `_test` 数据库。
本地 `config.yaml` 都不得进入仓库、日志或工单;本地自动化测试仍通过 SSH 隧道
连接独立的 `_test` 数据库,不得对生产 `autobuy` 执行清理测试。
程序旁边的 `data/` 只保留日志、上传文件和迁移前的 SQLite 只读备份: