23 KiB
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 证书运维平台:
- 证书申请、导入、续期、部署、回滚统一管理。
- 支持 ACME、Let’s Encrypt、DNS-01、泛域名和 SAN 证书。
- 支持 DNS 账户、CNAME 委派和 DNS 验证记录管理。
- 支持多服务器、多部署目标和远程证书部署。
- 支持任务调度、失败重试、任务日志和执行历史。
- 支持通知、审计、监控、备份和恢复。
- 支持用户、角色、项目和资源级权限隔离。
- 支持 Windows Service 和 Linux systemd 部署。
- 所有敏感凭据、SSH 主机身份和证书私钥均具备安全保护。
- 所有生产能力都有独立的实机验收证据。
二、范围确认清单
| 编号 | 项目 | 状态 | 处理方式 |
|---|---|---|---|
| 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 建立生产验收门禁
状态: [!] 暂缓或存在阻塞
生产验收必须拆分为:
- 本地单元测试。
- 隔离环境测试。
- 数据库兼容测试。
- 真实 DNS 测试。
- 真实 ACME Staging 测试。
- 真实 ACME Production 测试。
- 真实远程 SSH/SFTP 测试。
- 真实 HTTPS/SNI 测试。
- Windows Service 测试。
- Linux systemd 测试。
- 备份恢复测试。
- 升级回滚测试。
不能使用以下方式代替生产验收:
-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 流程通过
[ ] 所有危险操作写入审计日志
[ ] 所有敏感信息不会出现在日志和页面中
[ ] 自动化测试通过
[ ] 生产验收证据完整
十、执行约束
- 未经授权不删除现有文件。
- 不将真实密钥、证书私钥、Token 和密码提交到 Git。
- 不使用
-k、--insecure、强制 IP TLS 或跳过 SSH 主机身份验证。 - 每次修改前先检查当前分支、工作区和未提交变更。
- 每完成一个任务,补充验证命令和验收证据。
- 代码标识符使用英文,界面、注释、文档和用户提示使用中文。
- 每次测试区分本地、隔离环境、测试环境和生产验收结果。