Scert/doc/Scert整改合并优化清单.md

23 KiB
Raw Blame History

Scert 整改、合并与优化清单

适用项目:D:\Desktop\Scert
产品基准:Certimate + Certd
产品范围:Web 管理页面 + Windows/Linux 服务端
明确排除:Wails 桌面版
整改日期:2026 年 9 月 27 日

进度同步:2026 年 9 月 27 日。任务状态与《Scert整改任务执行清单.md》及四份分级任务规格保持一致;本文件的需求和验收标准不因状态更新而缩减。详细变更、验证命令、证据和剩余缺口见执行清单与对应专项记录,[~] 仅表示已有实现或正在整改,不表示整项完成。

当前专项:P0-05 自有事件备份、事件可见权限、恢复调度安全、编码及到期保护已完成本批 Windows 双版本隔离回归,分别通过 139、155 个叶子用例;详见支持矩阵第十三节。下一步推进视图;完整表清单、其他编码/SQL 模式、其余数据库/平台及生产门禁仍待完成,P0-05 保持 [~],全部 44 项范围不变。


一、整改目标

将 Scert 整改为一个具备以下能力的 Web 化 SSL 证书运维平台:

  1. 证书申请、导入、续期、部署、回滚统一管理。
  2. 支持 ACME、Let’s Encrypt、DNS-01、泛域名和 SAN 证书。
  3. 支持 DNS 账户、CNAME 委派和 DNS 验证记录管理。
  4. 支持多服务器、多部署目标和远程证书部署。
  5. 支持任务调度、失败重试、任务日志和执行历史。
  6. 支持通知、审计、监控、备份和恢复。
  7. 支持用户、角色、项目和资源级权限隔离。
  8. 支持 Windows Service 和 Linux systemd 部署。
  9. 所有敏感凭据、SSH 主机身份和证书私钥均具备安全保护。
  10. 所有生产能力都有独立的实机验收证据。

二、范围确认清单

编号 项目 状态 处理方式
S-001 Web 管理页面 [x] 已确定 保留并完善
S-002 Windows 服务端 [x] 已确定 保留并进行实机验收
S-003 Linux 服务端 [x] 已确定 保留并进行 systemd 验收
S-004 Wails 桌面版 [ ] 未开始 从正式目标中移除,暂不开发
S-005 CLI 工具 [ ] 未开始 作为可选运维工具保留
S-006 Certimate 能力 [x] 已确定 重点吸收证书自动化、DNS 和部署能力
S-007 Certd 能力 [x] 已确定 重点吸收 Web 控制台、任务、通知、审计和监控能力

三、状态标记

[ ] 未开始
[~] 进行中
[x] 已完成,等待复审
[✓] 复审通过
[!] 暂缓或存在阻塞

说明:

  • 自动化测试通过只能标记为 [x]。
  • 真实远程部署、DNS、HTTPS、备份恢复通过后,才能标记为 [✓]。
  • 构建成功、接口返回 HTTP 200、单元测试通过,不等同于生产验收通过。

四、P0:基础整改和阻塞项

P0-01 明确产品范围

状态: [x] 已完成,等待复审

整改内容

  • 从正式开发目标中移除 Wails 桌面版。
  • 将桌面窗口、桌面托盘、桌面端自动更新、桌面端配置管理和桌面端 UI 测试标记为范围外。
  • 保留 CLI,但明确 CLI 只用于初始化、运维诊断、数据库迁移、备份恢复、服务安装和卸载。

验收标准

  • 任务清单中不再将桌面版作为正式交付目标。
  • Web 和服务端成为唯一正式交付范围。
  • 发布文档、测试文档和安装文档范围一致。

P0-02 整理项目任务清单

状态: [x] 已完成,等待复审

将现有任务拆分为:需求确认、代码实现、自动化测试、隔离环境测试、生产部署测试、最终验收。

每项任务至少增加:

任务编号
任务名称
优先级
当前状态
问题说明
涉及文件
依赖任务
整改内容
验证命令
实机验收步骤
验收证据
复审结果

相关文档:

doc/Scert开发任务清单.md
doc/全面审查测试与优化记录.md
doc/发布加固与实机验收记录.md
doc/生产部署与运维说明.md

P0-03 整理源码、构建产物和部署产物

状态: [x] 已完成,等待复审

建立明确目录边界:

backend/                  后端源码
frontend/                 前端源码
deploy/                   部署脚本
doc/                      项目文档
tests/                    测试代码
scripts/                  开发辅助脚本
release/                  发布包
artifacts/                测试证据

以下内容不得进入正式源码提交:

.runtime/
.deploy-stage/
dist/
*.exe
*.tar.gz
临时补丁文件
浏览器运行缓存
数据库文件
真实证书私钥
真实凭据
远程部署临时文件

验收标准

  • 源码、测试产物、部署产物和生产证据分离。
  • .gitignore 覆盖构建、运行、数据库和敏感文件。
  • 不删除现有文件,只进行归类、忽略或迁移。

P0-04 统一开发和构建版本

状态: [~] 进行中

统一记录并固定以下版本:

Go 版本
Node.js 版本
npm 版本
Vue 版本
数据库驱动版本
Go 依赖版本
操作系统版本
编译目标

验证命令:

go test ./...
go vet ./...
npm.cmd test
npm.cmd run build

P0-05 确认数据库正式支持矩阵

状态: [~] 进行中

项目当前涉及 SQLite、MySQL、PostgreSQL,需要明确正式支持范围。

建议定位:

数据库 定位
SQLite 单机、开发、轻量部署
MySQL 正式生产支持,需确认版本
PostgreSQL 正式生产支持,需确认版本

整改内容

  • 统一三种数据库的迁移脚本。
  • 检查字段类型、索引、默认值和事务行为。
  • 验证 MySQL 5.7/8.0 兼容性。
  • 验证 PostgreSQL 版本兼容性。
  • 验证 SQLite 并发和锁行为。
  • 为每种数据库提供初始化、升级、回滚和备份恢复流程。

重点目录:

backend/internal/database/
backend/internal/database/migrations/mysql/
backend/internal/database/migrations/postgres/
backend/internal/database/migrations/sqlite/

P0-06 建立统一领域模型

状态: [~] 进行中

建议统一核心实体:

users                    用户
roles                    角色
projects                 项目
domains                  域名
certificates             证书
certificate_versions     证书版本
certificate_orders       证书申请订单
dns_accounts             DNS 账户
dns_delegations          CNAME 委派
servers                  服务器
deployment_targets       部署目标
deployment_records       部署记录
tasks                    任务
task_attempts            任务执行记录
renewal_policies         续期策略
notification_channels    通知渠道
notification_records     通知记录
audit_logs               审计日志
backup_records           备份记录

验收标准

  • 证书、任务、部署、通知和审计不再各自孤立。
  • 所有核心资源可以关联到项目。
  • 所有异步操作可以关联到任务和任务执行记录。
  • 所有危险操作可以关联到审计日志。

P0-07 增加项目级权限和资源隔离

状态: [~] 进行中

建议角色:

项目管理员
证书管理员
部署管理员
DNS 管理员
审计查看者
只读用户
系统管理员

每个资源至少增加:

project_id
owner_id
created_by
updated_by

必须防止:

  • 用户查看其他项目证书。
  • 用户查看其他项目服务器。
  • 用户操作其他项目部署目标。
  • 用户读取其他项目 DNS 凭据。
  • 普通用户查看完整私钥。
  • 普通用户删除或回滚其他项目资源。

P0-08 完善凭据和主密钥生命周期

状态: [~] 进行中

统一管理 DNS API 凭据、SSH 私钥、SMTP 凭据、HTTP 通知密钥、数据库密码、ACME 账户信息和证书私钥。

增加以下能力:

凭据创建
凭据验证
凭据禁用
凭据轮换
凭据删除
凭据引用检查
主密钥变更
主密钥备份
主密钥恢复

安全要求

  • 页面不能返回完整敏感凭据。
  • 日志中不得打印私钥、Token、密码。
  • 删除凭据前必须检查引用关系。
  • 主密钥丢失时必须明确不可恢复或恢复流程。
  • 证书私钥必须进入受保护存储。

P0-09 强化 SSH 主机身份验证

状态: [~] 进行中

  • 保存 SSH 主机指纹。
  • 首次连接要求确认指纹。
  • 指纹变化时阻断部署。
  • 支持人工更新可信指纹。
  • 禁止跳过主机校验。
  • 部署失败时记录主机、端口、用户和指纹摘要,但不得记录私钥。

必须阻断:

首次连接未确认指纹
远端主机指纹变化
目标主机与保存指纹不匹配
部署凭据失效

P0-10 统一任务、部署和回滚事务模型

状态: [~] 进行中

所有长耗时操作统一进入任务中心:

证书申请
证书续期
DNS 验证
证书部署
批量部署
远程备份
证书回滚
证书恢复

任务状态统一为:

待执行
执行中
成功
失败
取消中
已取消
等待重试
部分成功

每个任务需要包含任务 ID、任务类型、创建人、所属项目、开始时间、结束时间、当前步骤、执行日志、错误原因、重试次数和关联资源。

P0-11 建立生产验收门禁

状态: [!] 暂缓或存在阻塞

生产验收必须拆分为:

  1. 本地单元测试。
  2. 隔离环境测试。
  3. 数据库兼容测试。
  4. 真实 DNS 测试。
  5. 真实 ACME Staging 测试。
  6. 真实 ACME Production 测试。
  7. 真实远程 SSH/SFTP 测试。
  8. 真实 HTTPS/SNI 测试。
  9. Windows Service 测试。
  10. Linux systemd 测试。
  11. 备份恢复测试。
  12. 升级回滚测试。

不能使用以下方式代替生产验收:

-k
--insecure
强制 IP TLS
跳过 SSH 主机身份验证
仅使用 HTTP 200
仅使用构建成功
仅使用单元测试通过

P0-12 完成备份和恢复方案

状态: [~] 进行中

需要备份

数据库
证书元数据
证书版本
证书私钥
DNS 账户配置
服务器配置
任务配置
通知配置
主密钥配置

需要支持

手动备份
自动备份
备份列表
备份校验
备份下载
备份恢复
恢复前确认
恢复失败回滚
恢复审计

五、P1:Certimate + Certd 核心产品能力

P1-01 建设统一证书中心

状态: [~] 进行中

页面建议:

frontend/src/views/Certificates/
├── Certificates.vue
├── Certificates.js
├── Certificates.css
├── CertificateDetail.vue
├── CertificateDetail.js
├── CertificateDetail.css
└── components/

功能要求

  • 证书列表。
  • 按域名、项目、状态、到期时间筛选。
  • 显示证书状态和剩余有效期。
  • 查看证书链和 SAN 域名。
  • 查看签发机构。
  • 查看证书版本。
  • 手动续期。
  • 手动部署。
  • 回滚版本。
  • 导入已有证书。
  • 删除无引用证书。

P1-02 完善证书详情和版本管理

状态: [~] 进行中

证书详情至少包含:

证书名称
主域名
SAN 域名
所属项目
签发机构
签发时间
到期时间
剩余天数
证书状态
申请方式
DNS 验证方式
当前版本
历史版本
部署状态
关联任务
关联服务器

证书状态建议:

待申请
申请中
有效
即将到期
已过期
申请失败
部署失败
已吊销
已禁用

P1-03 完善 ACME 和 DNS 管理

状态: [~] 进行中

支持:

  • Let’s Encrypt Production。
  • Let’s Encrypt Staging。
  • DNS-01。
  • HTTP-01。
  • 单域名。
  • 泛域名。
  • SAN 证书。
  • 多 DNS Provider。
  • DNS 账户验证。
  • DNS 账户禁用和轮换。
  • CNAME 委派。
  • TXT 记录添加、读取和清理。

页面建议:

frontend/src/views/DNSAccounts/
frontend/src/views/DNSDelegations/

P1-04 建设任务中心

状态: [~] 进行中

页面建议:

frontend/src/views/Tasks/
├── Tasks.vue
├── Tasks.js
├── Tasks.css
├── TaskDetail.vue
├── TaskDetail.js
├── TaskDetail.css
└── components/

功能要求:

  • 任务列表和任务详情。
  • 实时查看任务进度。
  • 查看任务日志和执行步骤。
  • 失败重试。
  • 取消任务。
  • 查看历史任务。
  • 按项目、类型、状态筛选。
  • 查看关联证书、服务器和部署记录。

P1-05 统一续期策略

状态: [~] 进行中

续期策略支持:

按剩余天数续期
按固定日期续期
按证书标签续期
按项目续期
按证书类型续期
续期失败自动重试
续期成功自动部署
续期后自动通知

必须防止:

  • 同一个证书重复申请。
  • 同一个证书并发续期。
  • 续期任务重复部署。
  • 失败后无限重试。
  • 续期成功但部署状态未更新。

P1-06 建设服务器和部署目标中心

状态: [~] 进行中

页面建议:

frontend/src/views/Servers/
├── Servers.vue
├── Servers.js
├── Servers.css
├── ServerDetail.vue
├── ServerDetail.js
├── ServerDetail.css
└── components/

功能要求:

  • 服务器列表。
  • SSH 连接测试。
  • 主机指纹管理。
  • 服务器标签。
  • 所属项目。
  • 服务器分组。
  • 部署路径配置。
  • reload 命令配置。
  • 部署后健康检查。
  • 服务器启用和禁用。

P1-07 建设多服务器部署策略

状态: [~] 进行中

支持:

单服务器部署
多服务器并行部署
多服务器串行部署
按标签批量部署
部署失败停止
部署失败继续
失败后自动回滚
部分成功状态
部署后 HTTPS 检查
部署前备份

部署事务建议:

准备阶段
连接验证
远程备份
上传临时文件
权限校验
原子替换
执行 reload
HTTPS 验证
标记成功
失败回滚

P1-08 建设通知中心

状态: [~] 进行中

页面建议:

frontend/src/views/Notifications/
├── Notifications.vue
├── Notifications.js
├── Notifications.css
├── NotificationChannel.vue
└── components/

支持 HTTP Webhook、SMTP 邮件,以及任务成功、任务失败、证书即将过期、证书已过期、部署失败、服务异常和备份失败通知。

要求:

  • 通知渠道可测试。
  • 通知失败可重试。
  • 通知内容不得包含私钥和敏感凭据。
  • 通知发送记录可审计。

P1-09 建设审计中心

状态: [~] 进行中

页面建议:

frontend/src/views/AuditLogs/
├── AuditLogs.vue
├── AuditLogs.js
└── AuditLogs.css

必须记录:

登录、退出、密码修改
用户创建、用户删除、角色变化
项目变化
证书申请、证书导入、证书删除、证书回滚
部署、回滚
凭据创建、修改、删除
服务器指纹变化
备份、恢复
系统设置修改

审计字段:

操作人
操作时间
操作类型
资源类型
资源 ID
项目 ID
客户端 IP
操作结果
失败原因
请求追踪 ID

P1-10 建设证书监控仪表盘

状态: [ ] 未开始

Dashboard 展示:

证书总数
有效证书
即将过期证书
已过期证书
申请失败证书
部署失败证书
今日任务数
失败任务数
服务器数量
异常服务器数量
最近审计事件
最近通知事件

到期时间建议:

超过 30 天:正常
7 至 30 天:提醒
1 至 7 天:警告
已过期:严重

P1-11 建设备份恢复页面

状态: [~] 进行中

页面建议:

frontend/src/views/Backups/
├── Backups.vue
├── Backups.js
├── Backups.css
└── RestoreDialog/

高风险操作必须:

  • 二次确认。
  • 输入确认文字。
  • 显示影响范围。
  • 恢复前自动备份。
  • 恢复过程进入任务中心。
  • 恢复结果写入审计日志。
  • 恢复失败自动回滚。

P1-12 统一 API 契约和权限矩阵

状态: [~] 进行中

整理所有接口:

接口路径
请求方法
是否需要登录
允许角色
项目权限
资源权限
是否写审计日志
是否需要幂等键
是否可能返回敏感信息
错误码

重点文件:

backend/internal/httpapi/server.go
backend/internal/httpapi/middleware.go
backend/internal/httpapi/auth.go
backend/internal/httpapi/certificate_api.go
backend/internal/httpapi/task_api.go
backend/internal/httpapi/renewal_api.go
backend/internal/httpapi/users_api.go
backend/internal/httpapi/user_groups.go
backend/internal/httpapi/settings_api.go
backend/internal/httpapi/ssh_key.go

六、P2:Web 体验和运维优化

P2-01 统一 Web 页面结构

状态: [~] 进行中

建议目录:

frontend/src/views/
├── Dashboard/
├── Certificates/
├── Tasks/
├── DNSAccounts/
├── DNSDelegations/
├── Servers/
├── Notifications/
├── AuditLogs/
├── Backups/
├── UserManagement/
├── Settings/
├── SetupWizard/
└── Login/

每个页面建议拆分为页面 .vue、.js、.css 和 components/。

P2-02 统一中文显示和错误信息

状态: [~] 进行中

  • 不允许出现 HTML 实体编码。
  • 不允许出现英文状态值直接展示。
  • 不允许出现空白错误提示。
  • 不允许把后端堆栈直接展示给用户。
  • 所有危险操作使用中文确认提示。
  • 所有任务状态使用统一中文文案。

例如:

pending     待执行
running     执行中
success     成功
failed      失败
retrying    等待重试
cancelled   已取消

P2-03 所有长操作任务化

状态: [~] 进行中

以下操作不能长期阻塞 HTTP 请求:

证书申请
证书续期
DNS 验证
批量部署
远程备份
数据库恢复
批量删除
批量导入

统一返回 task_id,前端通过任务详情或轮询查看状态。

P2-04 增加幂等和重复操作保护

状态: [~] 进行中

增加:

幂等键
操作锁
任务去重
证书申请锁
部署锁
恢复锁
重复提交检测

重点防止重复申请、重复部署、刷新页面重复提交、定时任务重复续期和多实例并发处理同一证书。

P2-05 完善日志、指标和追踪

状态: [~] 进行中

日志增加请求 ID、任务 ID、用户 ID、项目 ID,并对敏感字段脱敏。

建议指标:

证书申请成功率
证书续期成功率
部署成功率
任务失败率
任务执行耗时
DNS 验证耗时
远程连接失败次数
通知失败次数
数据库错误次数

P2-06 完善接口和前端测试

状态: [~] 进行中

后端验证:

go test ./...
go vet ./...

前端验证:

npm.cmd test
npm.cmd run build

补充权限、越权、证书流程、重复提交、部署回滚、数据库迁移、凭据脱敏、登录、初始化向导、任务查询、部署确认、错误重试和权限显示测试。

P2-07 完善升级、降级和卸载流程

状态: [~] 进行中

需要提供:

升级前备份
数据库迁移
配置迁移
静态文件升级
服务重启
升级失败回滚
版本检查
卸载确认
卸载保留数据
卸载删除数据

P2-08 完成 Windows Service 实机验收

状态: [!] 暂缓或存在阻塞

验证安装、启动、停止、重启、开机启动、异常恢复、日志目录、配置目录、数据目录、卸载和升级。

相关文件:

deploy/install-windows.ps1

P2-09 完成 Linux systemd 实机验收

状态: [!] 暂缓或存在阻塞

验证安装、启动、停止、重启、开机启动、异常恢复、运行用户、日志输出、配置目录、数据目录、升级和卸载。

相关文件:

deploy/install-linux.sh
deploy/systemd/

P2-10 完善安全基线

状态: [~] 进行中

检查:

  • 默认账户是否必须修改密码。
  • 默认密码是否禁止继续使用。
  • 登录失败是否限流。
  • 会话是否支持失效。
  • Cookie 是否设置安全属性。
  • 是否防止 CSRF。
  • 是否防止越权。
  • 是否防止路径穿越。
  • 是否防止命令注入。
  • 是否限制上传文件类型和大小。
  • 是否隐藏服务器敏感版本信息。
  • 是否禁止日志输出私钥和密码。

七、P3:后续增强功能

以下内容不影响第一阶段交付,可在核心版本稳定后开发。

编号 功能 状态
P3-01 多租户支持 [ ] 未开始
P3-02 API Token 管理 [ ] 未开始
P3-03 Webhook 事件订阅 [ ] 未开始
P3-04 更多 DNS Provider 插件 [ ] 未开始
P3-05 证书标签和批量操作 [ ] 未开始
P3-06 多实例高可用 [ ] 未开始
P3-07 分布式任务队列 [ ] 未开始
P3-08 Prometheus 指标接口 [ ] 未开始
P3-09 OpenAPI 自动生成 [ ] 未开始
P3-10 移动端适配 [ ] 未开始

八、推荐整改顺序

第一阶段:基础和安全

P0-01 产品范围
P0-02 任务清单
P0-03 工作区整理
P0-04 版本统一
P0-05 数据库支持矩阵
P0-06 领域模型
P0-07 权限隔离
P0-08 凭据生命周期
P0-09 SSH 指纹
P0-10 任务事务模型

第二阶段:核心业务

P1-01 证书中心
P1-02 证书详情
P1-03 DNS 管理
P1-04 任务中心
P1-05 续期策略
P1-06 服务器中心
P1-07 多服务器部署
P1-08 通知中心
P1-09 审计中心

第三阶段:运维和验收

P1-10 监控仪表盘
P1-11 备份恢复
P1-12 API 权限矩阵
P2-03 长操作任务化
P2-04 幂等保护
P2-05 可观测性
P2-07 升级回滚
P2-08 Windows Service 验收
P2-09 Linux systemd 验收
P0-11 生产验收门禁

九、第一版完成标准

以下条件全部满足,才能认为 Scert 第一版整改完成:

[ ] Web 页面覆盖证书、任务、服务器、DNS、通知、审计和备份
[ ] Wails 桌面版不再作为正式交付目标
[ ] 证书申请、续期、部署、回滚均进入任务中心
[ ] 证书、任务、部署和审计可以相互关联
[ ] 资源具备项目级权限隔离
[ ] DNS、SSH、SMTP 等凭据安全存储
[ ] SSH 主机指纹得到验证
[ ] 证书部署失败可以回滚
[ ] 任务支持失败重试和重复提交保护
[ ] 数据库迁移在正式支持数据库上通过
[ ] 备份和恢复在隔离环境通过
[ ] Windows Service 实机通过
[ ] Linux systemd 实机通过
[ ] HTTPS、SNI 和证书链验证通过
[ ] 真实 DNS 和 ACME 流程通过
[ ] 所有危险操作写入审计日志
[ ] 所有敏感信息不会出现在日志和页面中
[ ] 自动化测试通过
[ ] 生产验收证据完整

十、执行约束

  1. 未经授权不删除现有文件。
  2. 不将真实密钥、证书私钥、Token 和密码提交到 Git。
  3. 不使用 -k、--insecure、强制 IP TLS 或跳过 SSH 主机身份验证。
  4. 每次修改前先检查当前分支、工作区和未提交变更。
  5. 每完成一个任务,补充验证命令和验收证据。
  6. 代码标识符使用英文,界面、注释、文档和用户提示使用中文。
  7. 每次测试区分本地、隔离环境、测试环境和生产验收结果。