209 KiB
Scert 整改、合并与优化清单
2026年10月2日13:30 恢复安全整改进度
- P0-10 子项:恢复前完整核验锁集合、备份摘要及当前目标身份;存在但无归属的锁拒绝自动处理,已验证阶段允许部分解锁后重入。
- 恢复服务器身份在 SSH 认证前核验;提交恢复先核验全部备份再清理,避免检查失败时已经修改部分现场。
- 原代码的八个负向和两个重入场景均复现失败;修复后部署、仓储、应用三包原生 Linux 回归及 go vet 通过,新增恢复用例重复二十次通过。真实回环密码 SSH/SFTP 覆盖文件内容及权限保护,不扩大为业务服务器恢复验收。
- [!] 竞争检测未通过执行门槛:启用 CGO 后缺少 gcc;没有安装工具链或将普通重复测试冒充竞争检测。
- [~] 待核查带事务日志的上传碰撞路径归属;本批尚未正式构建部署,P0-10 保持进行中,总体生产验收未通过。
2026年10月2日12:54 最新进度入口
- Linux 非回环监听风险已完成代码收口、六包原生回归、负向发行程序验证和双机配套部署;两台当前均仅监听 127.0.0.1:8443。
- 正式候选源码提交 1150c39,发行路径检查、归档及包内校验通过;启动通知真实生效,第二台严格 HTTPS 首页及 readyz 正常。
- 双向跨机 IPv4 端口探测没有连接到对方的 8443、3306、33060;未新增公网端口、未改 Nginx、未影响第一台邮件服务主进程。
- [!] 停机升级窗口仍观察到 7 次 502,不能将 Type=notify 等同于无中断升级;T4 不标整体验收通过。
- [!] 总体生产验收仍未通过;P0-10、系统通知实发、三数据库清库首次 Web 流程及统一复审继续待办。详细证据见同日 Linux 测试记录。
2026年10月2日12:42 最新进度入口
- 已补齐 Linux 独立启动时的回环监听限制;实际非回环 IP、通配地址及域名均被启动入口拒绝。
- 六个关联包原生 Linux 回归及 go vet 通过,新增监听正负向用例重复 20 次通过。
- [~] 正式候选包重新构建与双机升级待执行,不把源码回归或旧实例健康当作新版部署完成。
- [!] 总体仍未通过生产验收;P0-10、系统通知、三数据库清库 Web 流程和最终复审继续保留。
2026年10月2日12:19 最新进度入口
以下为当前状态,下方同日早期记录保留作为过程证据。
- Linux 启动通知开发及四包原生回归通过,关键生命周期用例重复 20 次、go vet 和 systemd unit 配置检查通过;等待配套部署复审。
- 本轮还修复旧 CLI 单元测试误用正式安装路径的问题。首次运行由 nobody 权限拒绝写入,未通过提升权限规避;修复为临时目录后四包全部通过。
- 12:18 旧线上候选仍健康且仅回环监听,未改 Nginx、未开放外部端口,未对业务清库。
- 新候选正式构建、部署和真实重启窗口尚待执行;本轮源码与单元回归不构成零 502 或生产验收通过证据。
- [!] 当前仍不放行生产验收;P0-10、系统通知授权实发和三数据库首次完整 Web 流程等门禁不变。
2026年10月2日启动状态整改补充
- 增加仅通过本机 Unix socket 的 Linux 启动通知,无新增 TCP 端口;正式服务和初始化监听阶段分别报告状态。
- 静态服务配置与动态安装模板同步启用 Type=notify,并补充通知失败、取消、状态字段注入及初始化就绪隔离的测试。
- [~] Linux 实际运行回归进行中;线上仍为原候选,未将源码修改当作已部署。
- 重启期间严格 HTTPS 采样与故障窗口复审。监听通知不代表业务 readyz、代理切换、证书轮换或零中断已经通过。
- [!] 总体验收尚未放行;下文既有 P0-10、邮件入口与数据库完整流程待办继续有效。
2026年10月2日实机证据校正与当前任务入口
11:50 邮件入口独立复核
- [!] 从第二台查询 web.solit.cn,本机解析器、公共 DNS 及 solit.cn 两台权威 DNS 均返回 NXDOMAIN;严格 HTTPS 请求以解析失败退出。此时无法从该入口取得系统通知授权参数,需确认当前有效 Smail 地址或修复其 DNS。不得猜测目标 IP、修改其他业务域名或绕过 TLS 校验。
- 同时复核第二台 Scert 与 Nginx 为 active,本机 Nginx 严格 TLS readyz 返回 ready;邮件入口失败与 Scert 管理入口可用性分开记录。
本节为最新进度入口,历史记录保留;本轮为保留数据的只读诊断,不计作清库后的首次生产流程。
- 第二台现有正式域名证书包含 odacm.cn,有效期至 2026年12月24日。北京时间 10:18:39 至 10:19:00,20 次严格 TLS 请求均返回 ready,Nginx 日志均为 HTTP 200。此前第二台证书未完成的状态已过期;本项等待复审,不代表续期轮换通过。
- 第二台 Scert、MySQL 仅回环监听。从第一台探测第二台 80/443 成功,8443/3306/33060 超时;本地 Windows 代理网络的 TCP 连接结果不作为公网开放证据。
- 第一台角色校正:Nginx 未见 odacm.cn 管理站点或 8443 上游;返回默认 salg.cn 证书不能证明 Scert 签发失败。暂按证书部署目标验收,不为消除错误探测而擅自增加管理站点。
- [~] 启动窗口整改:第二台 10:09:05 的 502 为上游连接被拒绝。运行态采样成功不代表重启窗口已解决。
- [!] Smail 实发:Scert 页面显示 SMTP 未启用、连接和专用凭据未配置。已核对 Smail 代码,必须取得账号授权及独立凭据,不用登录密码代替,不从 Web 域名猜测邮件主域名。
- [~] P0-10 负向矩阵及历史 recovery_required 可信恢复证据核查。
- 三数据库清库后的完整 Web 初始化、实际邮件投递、密码重置和新密码登录。
- 最新候选包清库首次流程、缓存清理及最终生产门禁复审。
- [!] Windows 不在本轮范围;总体验收仍为 P0-03 完成、等待复审,生产验收未放行。
2026年10月2日 SSH 密码认证边界最终收口
本节只记录非敏感安全结果。根据“SSH 私钥、公钥和密钥登录不允许出现”的要求,生产功能只保留密码认证;HTTPS 证书私钥仅用于证书部署和 TLS 服务,不属于服务器登录凭据。
- SSH 客户端连接在认证前再次硬性校验密码认证,不能通过其他认证方式或回退路径建立连接。
- 禁用兼容服务、重载连接逻辑和 CLI 帮助文字均明确为密码认证;没有新增密钥生成、上传、授权文件写入或密钥登录入口。
- 服务器页面不再把主机指纹描述为登录密钥;证书导入明确标注为 HTTPS 证书私钥,避免与 SSH 登录凭据混淆。
- 未删除历史数据库迁移、禁用兼容文件或证书私钥功能;历史结构只用于升级兼容,生产代码不会读取或使用其作为 SSH 登录凭据。
- [~] 待完成:候选包重新构建部署、三数据库清库后的 Web 流程、Smail 系统账户发信、密码重置闭环及第二台正式域名证书验收。
当前总体验收仍为 P0-03:完成,等待复审,本安全子项不能单独作为生产验收通过依据。
2026年10月1日 SSH 私钥登录安全边界收口
本次仅记录代码、构建和测试结果,不记录服务器口令、RAM 密钥、数据库密码、令牌或其他认证信息。根据“安全风险太大,不允许 SSH 私钥登录”的要求:
- 后端生产服务器配置统一使用 SSH 密码认证,拒绝私钥引用、非密码认证和私钥登录回退。
- 前端服务器配置仅提交 SSH 密码及主机指纹,不再请求或提交 SSH 私钥接口和
private_key_ref。 - 前端生产页面不再挂载 SSH 私钥管理弹窗,不显示私钥录入、文件读取、私钥口令、公钥部署命令或密钥生成引导;历史文件保留但不作为入口。
- TLS 证书私钥导入和远程证书私钥路径未删除,仍仅用于证书业务部署,不用于 SSH 登录。
- 前端 241 项测试、Vite 生产构建、后端
go test ./...和go vet ./...全部通过。 - 本项提交
df99136已推送,等待复审;总体生产验收仍未通过。 - [~] Linux amd64 正式包、清库后的完整 Web 流程和实机生产复验继续按 P0-10、T2-T6 门禁推进。
2026年10月1日前端私钥安全边界整改
本节只记录非敏感代码证据,不记录服务器口令、RAM 密钥、数据库密码、令牌或其他认证信息。根据安全要求,生产前端不再提供任何 SSH 私钥管理能力:
- 已移除私钥导航、私钥管理板块、私钥录入和文件读取控件、私钥口令字段、密钥生成与安装命令展示及复制操作。
- 已移除前端
/api/v1/ssh-keys请求和服务器private_key_ref提交;编辑历史服务器配置时强制使用密码认证。 SSHKeyModal历史文件未删除,仅保持未挂载状态,不能从生产页面访问。- 前端 241 项测试全部通过,Vite 生产构建通过。
- 本项完成,等待复审;总体生产验收仍未通过,P0-10、系统账户发信、密码重置和三数据库 Web 流程等门禁继续按看板推进。
- [~] 后端历史私钥兼容接口和数据结构暂不删除,避免破坏历史配置,后续单独制定迁移方案。
2026年10月1日公网入口安全加固复核
本次仅记录非敏感现场证据,不记录服务器口令、RAM 密钥、数据库密码、令牌或其他认证信息。为落实“只通过 Nginx 80/443,不允许高风险直连管理端口”,双机已完成防火墙与入口复核:
- [✓] 第一台移除公网
8443、9998、9999放行规则;Scert 管理服务保持127.0.0.1:8443回环监听,外部只能经 Nginx80/443访问。 - [✓] 第二台在现有宽范围放行规则之前增加
8443、9998、9999拒绝规则,防止范围规则重新暴露 Scert 直连入口;没有删除其他服务或其数据。 - [✓] 双机
3306、33060仍为回环监听;双机nginx -t通过,Scert、存储通道、MySQL 和 Nginx 健康状态未因规则加固异常。 - [✓] 外部复核确认管理 HTTPS 正常,Scert 直连端口
8443、9998、9999无法建立 HTTPS 会话;odacm.cn当前 HTTPS 返回 200。 - [✓] 未关闭 TLS 校验、未创建辅助验收脚本、未清理历史事务或数据库;邮件服务端口按系统账户发信职责保留,和 Scert 管理入口分离。
- [~] 公网入口风险子项已完成待复审;总体仍保持 P0-03:完成,等待复审,不得据此宣布生产验收通过。
2026年10月1日历史恢复事务现场核查
本次只读核查第一台正式 SQLite 数据库及托管证书目录,不修改数据库状态、不删除锁、不补造恢复证据。
- [✓] 数据库仍保留两条
recovery_required事务,状态和阶段均未改变;没有新增待处理事务。 - [✓] 两条记录的恢复证据均为空对象;记录声明的锁路径当前不存在,证书文件和权限仍在,目录没有临时文件或备份文件残留。
- [!] 由于没有可信锁 owner、恢复前摘要和执行顺序证据,不能证明已完成安全回滚;继续由产品保守地保留人工核查状态,不修改终态。
- [✓] 已清理第一台已结束测试 transient unit 与无有效请求的一次性重置激活器的 systemd failed 标记,journal 仍保留;未删除任何文件。
- [~] 历史恢复证据仍是 P0-10 的阻塞项,不能扩大公网入口加固结果为总体生产验收通过。
2026年10月1日加速任务清单(Linux上线前门禁)
本节是当前执行入口,按“先整改、再构建、后清库验收”的顺序推进。任务记录不包含服务器口令、RAM 密钥、数据库密码、令牌或其他认证信息;Windows 环境明确不在本轮范围。
需求清单
- 保持公网只开放 Nginx 80/443,8443、3306、33060 等内部端口只能回环监听。
- 完成 P0-10 负向恢复矩阵:配置校验失败、reload 失败、HTTPS 校验失败、进程中断、锁归属不匹配、文件摘要不匹配、多服务器部分失败及重试幂等。
- 对历史
recovery_required事务只使用可信证据核查,不删除锁、不修改终态、不补造证据。 - 完成 SQLite、MySQL、PostgreSQL 三数据库的生产 Web 流程,不以单独 CLI 或迁移测试替代完整流程。
- 完成清库后的首次初始化、Smail 系统账户发信、验证码密码重置、改密后重新登录闭环。
- 构建干净 Linux 候选包,部署双机并复核服务、TLS、任务状态、文件权限和端口范围。
当前任务列表
- [✓] T0:双机 Linux 基础部署、严格 TLS、Nginx 80/443 入口及内部端口回环复核。
- [✓] T1:MySQL 5.7.44 隔离实例和正式发行程序 CLI 实库测试。
- [~] T2:P0-10 剩余负向恢复矩阵与历史事务证据核查;不得人工释放未知归属锁。
- [~] T3:三数据库完整 Web 生产流程及跨数据库任务状态复核。
- [~] T4:最终清库后首次初始化、系统通知发信、验证码重置和新密码登录闭环。
- T5:干净候选包重新部署、清理浏览器缓存并执行最终生产门禁复审。
- [!] T6:Windows 环境不在本轮执行;公网平台或备案限制不能用本机结果替代。
当前验收口径
总体状态仍为 P0-03 完成,待复审。T0、T1 的局部证据不能替代 T2 至 T5;未完成所有 Linux 门禁前,不标记生产验收通过。
2026年10月1日进度更新(MySQL 5.7 实机复核)
本次仅补充非敏感验收记录,不记录服务器口令、RAM 密钥、数据库密码、令牌或其他认证信息。总体生产验收仍未放行,当前继续按 P0-03 待复审状态推进。
- 第二台 Linux 实机 MySQL 5.7.44 隔离实例全套测试通过,退出码为 0;覆盖迁移、DDL 中断恢复、业务数据保留、严格 TLS、错误主机名、强制安全传输、重启持久化、连接池断线与恢复、迁移重试及历史范围迁移。
- 第一台 Linux 实机正式发行程序 CLI 的 MySQL 5.7 实库测试全部通过,退出码为 0;覆盖官方客户端及
mysqldump互操作、表、视图、触发器、例程、事件、权限、目录可见性、快照和恢复规划等场景。 - MySQL 5.7.44 官方测试包校验值已记录:
798ff0a14cdc1ab259f8a3b6a7f683403e9bbaa85957d82e5370f82b27ba6805;测试实例由非 root 用户运行,仅回环监听并启用严格 TLS,未修改线上 MySQL 8.0 或 Smail 服务。 - 连接池专项首次失败已定位为测试夹具固定等待 15 秒导致的误报;MySQL 5.7 正常关闭实际约 17 秒,已将隔离实例正常关闭等待上限调整为 30 秒,提交
a139e6b已推送;修复后专项及完整数据库套件均通过。 - 双机内部数据库端口仍仅回环监听,公网仅保留 Nginx 80/443;本轮没有开放额外外部端口、没有创建辅助验收脚本、没有清理或改写历史恢复证据。
- [~] 继续推进:P0-10 其余负向窗口、锁归属及摘要不匹配实机验证,历史
recovery_required事务的可信恢复证据,完整三数据库 Web 流程,以及最终清库后的首次生产初始化和业务验收。 - [!] 仍未完成:Smail 系统账户真实发信、验证码密码重置与改密后重新登录闭环、第一台公网平台限制复核;总体生产验收不得标记为通过。
当前有效整改进度(2026年10月1日22:50,公开查询账户枚举修复)
本节更新22:31所记账户枚举阻塞;只关闭该具体漏洞,不扩大为密码重置全流程或总体生产验收通过。
- [✓] 公开密码重置查询不再枚举身份:正式路由改用独立通用提示处理器,只验证输入格式,不查询账户、不返回账户存在性或角色;响应禁止缓存,不创建会话、不发信、不改密码。
- [✓] 测试闭环:新增七类标识一致响应及输入边界回归,旧实现实际失败、修复后通过;后端全量测试、静态检查、构建及重置专项竞态测试通过,前端242项通过。
- [✓] 实机复核:干净源码51ab0a6构建正式Linux包,密码SSH双机安装通过;公网无登录请求的五类标识响应正文完全相同,页面只显示通用提示;第一台本机四类标识严格TLS响应摘要相同。
- [✓] 安全收尾:双机程序哈希一致、服务正常,内部端口仅回环,六次跨机公网探测均超时;管理上游保持严格TLS,临时重置入口404,第一台邮件服务未重启;任务数量和历史待恢复事务未改。
- [~] 原清单继续:P0-10剩余负向窗口、历史恢复证据处置、完整数据库Web流程等仍需推进。
- [!] 系统通知SMTP与真实密码重置闭环、第一台公网平台限制、MySQL5.7及最终清库首次生产验收仍未完成;总体生产验收不放行。
当前有效安全复核(2026年10月1日22:31)
- [!] 新增上线阻塞:公开密码重置查询仍泄露账户是否为超级管理员。使用不携带登录凭据的请求实测,已知账户返回 super_admin,未知账户返回 unknown;此前仅移除维护命令和重置入口,不等于消除账户枚举风险。此项尚未修复,不得标为安全验收通过。
- 整改要求:合法账户标识不论是否存在,均返回相同状态码和通用提示;不得披露账户类型、存在性、维护命令、重置地址或会话凭据,并补充一致响应回归及正式候选实机复核。
- [✓] 只读复核:双机内部端口仅回环监听;管理入口健康;Nginx 上游 TLS 校验开启;未开启的临时重置地址返回 404;最终部署两条事务均为 committed。
- [!] 本轮未清库、未触发密码变更或发信、未开放端口,属于现有候选只读安全复核,不替代首次生产验收。总体生产验收继续不放行。
当前有效进度(2026年10月1日22:22,不同证书中断恢复与多目标部分失败)
本节覆盖下方同项待验证状态;仍按原清单推进 Linux,不处理 Windows。本轮保留数据连续负向回归,不计作最终清库首次验收。需求确认:实际运行证书必须恢复,有限次核验不降低 TLS 校验,证据不足继续保留锁。
- [✓] P0-10 中断恢复缺口闭环:不同证书真实 SIGKILL 复现了启动恢复只核验一次、重载尚未生效即误判指纹不符的问题。修复版复用正式部署的有限次、可取消严格 HTTPS 核验;持续不符、校验错误、取消或超时仍失败关闭。
- 修复与发行:提交
00aeedc已推送,新增恢复核验回归,后端全量测试、静态检查、构建及前端 241 项通过;干净源码正式 Linux 包已通过密码 SSH 和正式安装器部署双机,程序哈希一致。 - [✓] 不同证书进程中断:修复版中,两台均实际切换到另一张证书后终止第二台主进程,systemd 自动重启;双机自动恢复中断前文件和实际 TLS,事务自动回滚且无本次残锁。旧候选复现留下的本次两事务也由产品启动恢复处理,未手工改库或删锁。
- [✓] 原任务重试与幂等:原任务
3517c6d2-095a-419c-a2bc-268bb3c3eab8的两次中断失败记录保留,第三次尝试双机成功;成功后重复重试返回 409。 - [✓] 不同证书多目标部分失败:第二台已提供新证书、第一台配置校验失败后,两台恢复原证书;两个事务均自动回滚。接口如实返回导入成功、部署失败,不误报整体成功。
- [✓] 收尾:两台已恢复标准 Nginx 校验和重载命令,最新证书通过正式部署接口成功部署;文件、公钥对应摘要、实际 TLS、严格 HTTPS、无本次残锁均复核。内部端口仅回环监听,六次跨机公网探测均超时,第一台邮件服务正常。
- [~] P0-10 仍非全部完成:其余负向窗口、锁归属或摘要不匹配实机、两条历史缺证据事务继续推进;不能把以上子场景通过扩大为全项通过。
- [!] 系统通知 SMTP 及真实投递闭环、第一台测试域名公网平台限制、MySQL 5.7 与完整三库 Web 等剩余门禁及最终清库首次验收仍未完成。已完成的数据库迁移、独立正式 CLI 备份恢复和 Linux 原生构建证据继续有效。
- [!] 总体生产验收未放行。完整任务、事务、时间及产物哈希见《Linux生产流程测试记录》最新章节。
当前有效进度(2026年10月1日21:43,不同证书重载失败自动恢复)
本节覆盖下方同项待验证状态;本轮是保留数据的 Linux 升级及负向回归,不是最终清库首次验收。需求沿用原清单,不修改历史事务来制造成功,不创建辅助验收脚本。
- [✓] 已复现并修复运行证书恢复缺口:旧候选重载实际生效后返回失败,只恢复文件,Nginx 仍提供新证书;新候选把该失败目标纳入完整事务恢复,重新校验、重载旧配置并验证实际 HTTPS 指纹后才释放锁。
- [✓] 新旧证书不同的双机实证:正式功能仅申请一个新证书;修复后重新部署这个证书,两台先实际提供新证书,再自动恢复旧证书。文件摘要、私钥对应的公钥摘要、实际 TLS 指纹及严格 HTTPS 均通过;无本次残锁。Scert 主进程 PID 不变、自动重启计数为零。
- [✓] 原任务重试:恢复标准 Nginx 重载命令后,原部署任务第二次尝试成功,两台实际提供新证书;第一次失败记录保留,第二次事务均已提交,成功后再次重试返回 409。
- 代码及发行:修复提交
2e6d992已推送;新增五个回归场景、后端全量测试、静态检查、构建、前端 241 项通过。正式 Linux amd64 候选由干净源码构建,已通过密码 SSH 和正式安装器部署到双机,程序哈希一致。 - [✓] 安全边界复核:内部 8443、3306、33060 仅回环监听,双机互探公网对应端口六次均超时;管理入口保持 Nginx 80/443 及严格上游证书校验,第一台既有邮件服务正常。
- [~] P0-10 仍继续:上述结论仅覆盖本次重载失败窗口,不覆盖所有负向窗口、不同证书进程崩溃、多目标部分失败及历史证据缺失事务。
- [!] 原阻塞仍保留:系统通知 SMTP 参数与真实发信闭环、第一台测试域名公网平台拦截、两条历史恢复事务、剩余数据库支持与完整 Web 流程、最终清库首次验收。已完成的 MySQL 8.0 迁移和独立正式 CLI 备份恢复、Linux 原生构建不再重复标记为未做;Windows 不在本轮范围。
- [!] 整体生产验收未放行;完整任务及哈希证据见《Linux生产流程测试记录》最新章节。
当前有效进度(2026年10月1日21:12,双机密码重置接口安全复核)
本节覆盖下方较早的候选版本与待部署状态。需求沿用原清单;按用户最新要求,本轮只推进 Linux 上线,不处理 Windows,不把 Windows 未验收当成本轮上线阻塞。
- 安全接口整改:发现公开查询仍返回本机命令处理标识,已改为通用联系管理员标识;登录后的状态接口同步收敛。不是仅隐藏页面文字。
- 自动化门禁:前端 241 项测试、后端全量测试、静态检查、构建通过;公开查询回归扩大到整个响应,仍检查不返回重置入口、令牌和会话 Cookie。
- 正式构建:源码提交
9c58c5b,工作区干净;正式 Linux amd64 候选构建及路径检查通过,已推送修复。 - 双机安装:同一候选已通过密码 SSH、严格主机身份校验、归档和包内校验、正式安装器部署;两台主程序哈希一致,主服务、目录 socket、Nginx 均运行。
- 页面与接口复核:第二台在新建隔离浏览器上下文中重新查询超级管理员,仅显示通用维护说明,无命令、入口名称或代码块;线上接口不返回本机命令标识、重置链接、令牌或 Cookie。第一台通过校验证书的回环连接验证同一接口与就绪检查。
- 端口边界:双机内部服务仅绑定回环 8443、3306、33060,两服务器互相探测这些公网端口全部超时;第二台 Nginx 上游证书验证保持开启。第一台既有邮件业务保持运行,未修改其业务端口。
- [!] Smail:两服务器系统解析器查询邮件管理域名均返回 NXDOMAIN;尚无可用系统通知 SMTP 参数,真实投递、验证码重置及新密码登录闭环未通过。不猜测主机、凭据,不降低 TLS 校验。
- [~] 剩余 Linux 门禁:部署负向恢复与历史事务核查、数据库支持矩阵、备份恢复、清库首次初始化及完整业务回归继续推进。本轮保留业务数据的安全升级不计作清库验收。
- [!] 总体结论:本次页面及接口信息暴露项已完成实机复核,等待复审;整体生产部署验收仍未放行,不给出缺乏逐项证据的完成百分比。
当前有效进度(2026年10月1日,密码重置页面安全信息收敛)
- 已移除公开密码重置页面中的 Linux、Windows、本机管理命令和
Scert-admin入口名称,避免未认证页面暴露可执行维护信息。 - 超级管理员查询接口改为返回通用的服务器本机安全维护说明;不返回重置入口、会话令牌、验证码或命令文本。
- 前端 241 项测试、后端全量测试、
go vet ./...、go build ./...、生产前端构建及git diff --check通过。 - 修复已提交为
f8db6ce,文档更新前检查点为df2ff7b;已推送远程仓库。 - [~] 仍需将最新候选包重新部署到 Linux 实机,清理浏览器缓存后复测密码重置页面,并继续完成 Smail SMTP、超级管理员重置闭环、负向恢复和最终生产门禁。
- [!] 当前结论:本次安全信息泄露项已完成整改,整体生产部署验收仍未通过。
当前有效进度(2026年10月1日,可信恢复证据候选已完成双服务器基础回归)
本节为最新状态,优先于下方历史快照。提交 0e48dc9 已推送远程仓库;正式 Linux amd64 候选包已构建,SHA-256 为 9b6748b6f25446adcc454fb9ecf88a31cbf70554bcbfcae3451670f9a81e4afe。候选包已使用密码 SSH 安装到 45.136.13.241,并完成正式页面登录、一个域名绑定两台服务器的连续两次部署回归;两次均返回两台推送成功、配置校验及 reload 成功、站点 HTTPS 校验通过。服务重启后保持 active,管理入口 HTTPS 返回 200。
- 本地质量门禁:
go test ./...、go vet ./...、go build ./...、部署/应用/仓库三个包的竞态测试及git diff --check均通过。 45.136.13.241候选安装、服务健康检查、正式页面登录及双服务器正常部署回归完成。- 新增恢复证据持久化、锁归属校验、文件摘要校验、目标证书指纹校验及重启恢复保护,代码已提交并推送。
- [~] P0-10 仍需实机模拟进程中断、锁归属不匹配、文件摘要不匹配、负向 HTTPS 恢复、部分目标失败及重试幂等。
- [~] 两条历史
recovery_required事务缺少可信证据,保留现场等待人工核查;不得删除锁或修改数据库状态伪造验收通过。 8.137.23.95独立生产回归、三数据库矩阵、Windows 服务、清库首次初始化、Smail SMTP、超级管理员密码重置、备份恢复、公网 DNS/ACME 和最终生产门禁。- [!] 当前结论:核心修复和 Linux 双服务器基础部署已通过,完整生产部署验收尚未通过。
当前有效进度(2026年10月1日,回滚事务终态整改)
候选构建收尾:源码 8899f7a 的干净克隆已通过正式 Linux 构建,清单二十三项大小及校验和、实际归档二十二个文件内容和五个执行入口权限均通过。尚未部署;本条更新下方本批早期的候选未构建状态,不改变生产未放行结论。
本批验证:后端全量测试、静态检查、构建以及部署、应用、仓库三个包的竞态测试均退出零;外部实库条件跳过项不计入验收。正式候选构建与实机复测尚未完成。
本节优先于下方历史快照。原始四十四项范围和生产门禁不缩减;不再使用没有逐项统计依据的完成百分比。
- P0-10 子项:复现并修复恢复核验成功后事务仍记为需要恢复的问题。原判断提前捕获所有失败结果,导致已回滚分支不可达;现在仅在文件恢复、服务重载、站点恢复核验与锁释放全部成功时记录已回滚,原部署任务仍为失败。
- 增加双目标已恢复、恢复核验失败、文件恢复失败、锁释放失败及部分目标连接失败的日志终态回归;不把隔离测试当作实机验收。
- [~] 当前修复尚未部署;旧失败任务及需要恢复的事务保持原样,禁止直接修改数据库或删除锁伪造验收通过。
- [~] P0-10 整项仍缺进程崩溃后的可信恢复、历史现场接管、多目标负向实机及重试幂等证据。
- 口径纠正:运维连接继续使用密码;产品按用户后续要求自动部署公钥并使用托管密钥,不因数据库认证方式为私钥就判为缺陷。
- P0-03 已有源码与产物边界局部复审记录,不再以该项表示全部上线阻塞;不扩大历史局部复审范围。
- 三数据库完整矩阵、双平台服务、备份恢复、清库首次流程、系统 SMTP 与密码重置及最终生产门禁继续待验收。
本轮整改进度(2026-09-30,最新候选已完成双服务器基础部署)
需求确认:继续按明日上线目标推进,但不缩减生产门禁;系统通知使用 Smail notify: SMTP 账号时,只允许通过 SMTP 发信,不使用普通 HTTP 发信接口,不记录真实凭据。
- 新增 Smail 系统通知账号识别,统一生成固定的
notification+system@邮件域名发件身份。 - 证书任务通知检测到
notify:系统账号时只走 SMTP,不再执行 HTTP 通道,避免重复发送或普通接口伪造系统发件地址。 - 超级管理员验证码检测到
notify:系统账号时只发送到绑定邮箱并只走 SMTP;SMTP 未启用时明确返回配置错误。 - 增加系统通知只走 SMTP、HTTP-only 拒绝和系统发件身份保持不变的回归测试;后端全量测试、
go vet、go build和git diff --check通过。 - 本轮代码已提交并推送,提交为
07229ad;正式 Linux amd64 候选包已构建,并完成归档及包内校验。 - 已使用密码 SSH 将候选包正式安装到
8.137.23.95和45.136.13.241;两台服务器的 Scert、存储 socket、Nginx 和管理入口基础健康检查通过。 - [~] Smail 真实 SMTP 验证码、超级管理员密码重置和清库后的首次生产初始化仍需按完整生产流程复测。
- [~] 一个域名多服务器、一个服务器多域名的完整生产推送及双服务器证据仍需补齐。
- [~] P0-10 后置 HTTPS 失败自动恢复、进程崩溃事务接管、多目标部分失败和重试幂等仍需负向实机证据。
- [!] 三数据库矩阵、Windows 服务、公网 DNS/HTTPS/SNI/ACME、备份恢复和最终生产门禁仍未完成。
- [!] 总体验收继续保持 P0-03:完成,等待复审,本轮不标记
[✓]。
当前验收总览(2026-09-30 17:39 UTC,恢复标准 Nginx 重载命令后正式页面复测)
- 已通过正式服务器配置页面将临时测试用的重载命令
/usr/bin/true恢复为标准 Nginx 参数nginx、-s、reload,并保存成功。 - 通过正式页面重新部署
scert-multi-20260930.apmmk.cn,页面显示“1 台推送成功,站点 HTTPS 校验通过”;服务器结果显示证书部署、配置校验并 reload 成功。 - 当前线上配置已恢复为标准服务重载命令,本轮复测未留下临时命令或辅助验收脚本;Git 工作区保持干净。
- [~] P0-10 仍需后置 HTTPS 校验失败自动恢复、进程崩溃事务自动接管、多目标部分失败和真实重试幂等的负向实机证据。
- [!] 第二台真实服务器、一个域名多服务器、三数据库矩阵、双平台服务、备份恢复及最终清库首次流程仍未通过,完整生产验收继续未放行。
当前验收总览(2026-09-30 16:55 UTC,陈旧部署锁清理后正式页面复测)
- 已通过 SSH 核查确认目标域名目录中的三个
.scert-lock均为空目录、创建时间早于本次任务,且没有活动 Scert、SSH 或 SFTP 部署进程;仅使用rmdir清理这三个明确的陈旧锁目录,未删除证书、私钥、Nginx 配置或业务数据。 - 从正式页面重新部署
scert-multi-20260930.apmmk.cn成功,页面显示“1 台推送成功,站点 HTTPS 校验通过”,该域名状态由“错误”恢复为“正常”。 - 远端
Scert、Scert-storage.socket、nginx均为 active,公网/readyz返回 200;两个测试域名 HTTPS 均返回 200,目标证书与公网证书 SHA-256 指纹分别一致:scert-20260930.apmmk.cn为5DE99CD681FB8A84745CE4ED6091D76A7B86616421B3048D3C42844B8A4460ED,scert-multi-20260930.apmmk.cn为43063C0726D34362B254CE28B66D7EB637E00B165F68EC0D07FCED0DF2C64AD2。 - 页面运行概览显示进行中任务为 0,最新部署任务为“已完成”;两个目标托管目录均无
.scert-lock、.scert-backup-*或.scert-tmp-*残留。证据目录中的中断测试锁仍按原样保留,未误删。 - [~] 本轮证明陈旧锁人工核查与清理后的正常恢复路径通过;不等同于后置 HTTPS 失败自动恢复或进程崩溃事务自动接管通过,P0-10 仍需负向实机证据。
- [!] 第二台真实服务器、一个域名多服务器、三数据库矩阵、双平台服务、备份恢复及最终清库首次流程仍未通过,整体生产验收继续未放行。
当前验收总览(2026-09-30 23:55,SSH 公钥自动部署与密钥回连复测)
- 通过正式服务器编辑流程将现有目标切换为“SSH 密码”保存;Scert 使用密码连接远端、部署托管公钥,并自动验证密钥登录,页面状态更新为“已部署并验证”。
- 托管私钥指纹为
SHA256:iDWSQY7LgGdy6aYb47C0TMvZfktJxrfjVSGYLFrqhoc;远端/root/.ssh/authorized_keys查询到相同指纹,文件权限为目录 700、授权文件 600。 - 自动切换回托管私钥后,再次从正式页面部署第二域名成功,证明后续证书部署使用密钥认证仍可完成文件推送、配置校验、reload 和 HTTPS 校验。
- [~] SSH 密码到公钥的单服务器闭环已通过;仍需在第二台真实服务器上复测,不能以一台服务器的密钥回连结果代替多服务器验收。
- [!] 后置 HTTPS 失败自动恢复、进程崩溃事务接管、三数据库、双平台、备份恢复和清库首次流程仍未通过,整体生产验收不变。
当前验收总览(2026-09-30 23:42,3cc8fb6 正式候选双域名部署复测)
3cc8fb6已通过规范源码构建并使用正式安装器部署到 45.136.13.241;服务版本、包校验和及线上运行状态已核对,未创建辅助验收脚本。- 通过正式页面重新登录超级管理员并部署
scert-multi-20260930.apmmk.cn,页面显示“1 台推送成功,站点 HTTPS 校验通过”;服务器结果显示证书推送、配置校验和 reload 成功。 - 远端
Scert.service、Scert-storage.socket、nginx均为 active,/readyz返回 200;两个测试域名 HTTPS 均返回 200,目标证书与公网证书 SHA-256 指纹一致,目标目录无残留.scert-lock。 - [~] 本轮只证明当前正式候选的正常部署路径;后置 HTTPS 校验失败后的自动恢复、进程崩溃事务自动接管仍需负向实机证据,不能将正常部署结果扩大为完整生产验收通过。
- [!] 今天不能完成完整生产放行:第二台真实服务器、一个域名多服务器、三数据库矩阵、Linux 原生构建、Windows 服务、备份恢复及最终清库首次流程仍无完整证据;整体生产验收继续未通过。
当前验收总览(2026-09-30 22:56)
- [✓] P0-03 源码与产物边界局部复审通过,不扩大为其他门禁通过。
6efc890已正式部署,锁冲突诊断页面与任务结果接口实测通过;测试现场已恢复,两域名正常 HTTPS,正常重新部署任务 179bb071-486d-4356-8ba2-e15ce1164eb5 成功。- [~] P0-10:开始整改站点 HTTPS 校验前过早清理事务旧文件与释放锁的问题;目标为失败自动恢复文件、配置重载及部署前可信站点身份核验。
- [!] 崩溃事务自动恢复、多服务器、数据库矩阵、双平台、备份恢复和最终首次流程仍未通过;整体生产验收未完成。
下方带时间章节均为历史记录,涉及候选版本和阻塞位置时以本节为准。
当前验收总览(2026-09-30 22:35,中断恢复边界已实测)
- [✓] P0-03 局部复审结论保持,不把后续事务门禁重新挂到源码目录任务下。
- 主进程在真实部署的远端配置校验阶段被强制终止,systemd 自动重启;任务、尝试和恢复审计一致为失败,没有永久执行中或误报成功。
- 已实证遗留三个部署锁阻止直接重试;人工核查新旧文件一致并隔离保留事务现场后,正式产品接口重新部署成功,两域名正常 HTTPS。此为人工恢复,不是自动事务恢复。
- 新增固定阶段中文诊断及错误码,任务查询兼容历史错误脱敏;中断提示改为先核查关联资源、远端文件、锁及服务状态。22:41 后端全量、静态检查、四包竞态及前端 240 项均通过。
- [~] P0-10 继续进行:诊断代码尚未正式构建部署;进程崩溃后的远端自动恢复、后置 HTTPS 失败的运行态恢复均未完成。
- [!] P0-04、P0-11、P0-12 等完整范围不变;第二台真实服务器、数据库矩阵、双平台服务与最终清库首次流程没有新增通过证据。不承诺当晚生产放行。
以下较早章节保留历史时间,不代表当前阻塞位置。
当前验收总览(2026-09-30 22:18,以本节为准)
下方带时间的进度为历史证据,不代表当前阻塞位置。P0-03 已按源码与产物边界范围复审通过,不再使用历史“仍停在 P0-03”作为当前结论。完整整改及生产验收仍未完成,不承诺当晚放行。
- [✓] P0-03 源码与产物边界局部复审保持通过;不扩大为其他 P0 项目通过。
- 最新运行候选已更新为 91e1123:规范干净源码构建,归档和远端主程序校验一致,正式安装器升级,主服务、目录 socket、管理页面登录正常。
- 新版 DNS 权限检查连续四次全部完成写入、读取和清理,记录名均为三十六位小写十六进制后缀;正式页面再次申请生产证书成功取得新证书。
- 同域旧有效证书负向实机验证完成:目标文件为新指纹,公网仍为旧指纹、Nginx worker 未变;任务和尝试均失败,页面显示错误,日志明确六次校验后指纹仍不一致。
- 恢复正常重载命令后,通过正式页面部署已有新证书成功;托管文件、目标文件和公网新指纹一致,HTTPS 返回 200,域名恢复正常,无残留部署锁。
- [~] P0-04、P0-10 等整项继续进行;本次证明失败检测与人工修正后重新部署,不证明后置 HTTPS 失败自动恢复运行态。证书申请失败页面仍只显示通用错误,诊断可读性待改善。
- 单机双域名实机闭环完成:第二域名真实 DNS-01 签发,产品创建独立目录,原域名文件未覆盖;补齐独立 Nginx 站点并等待 DNS 缓存到期后,正式页面部署成功,两站点 HTTPS 和指纹正确。精确解绑、重新绑定第二域名不影响第一域名。
- [~] 继续真实部署中断与重启恢复;不以普通空闲服务重启代替任务执行中断测试。
- 后续仍需真实多服务器、三数据库、Linux 原生构建、Windows 服务及其他既定门禁。
- [!] 第二台真实服务器仍缺;本轮是保留现场的升级和负向复测,没有清库,不能替代最终清库、清缓存和完整首次生产初始化。
最新阻塞整改(2026-09-30 21:48,DNS 探测随机标签)
fc57b8e已实机正常部署;重载执行后返回失败时文件回滚,恢复正常命令后再次部署成功,详细边界见 Linux 测试记录。- 实机发现 DNS 授权探测随机记录名首标签可能以连字符结尾,导致 InvalidRR.Format;相邻请求同一账户一成功一失败,并非已经证明 RAM 权限不足。
- 随机记录名改用十八字节随机数的小写十六进制编码;TXT 仍使用独立三十二字节随机值,精确写入、查询和删除闭环不变。增加格式错误独立脱敏诊断,不引导扩大权限。
- 新回归修复前失败、修复后通过;覆盖根域、子域、泛域、多级子域,每种连续三十二次,检查字符集、随机强度、标签长度、目标范围、清理闭环;DNS 包测试、静态检查和竞态通过。
- 后端全量测试及静态检查退出 0。
- [~] 提交后需规范正式构建和部署,再继续真实权限及 HTTPS 负向验收。
- [!] 不将本次 DNS 失败算作 HTTPS 身份负向通过;单机多域名、多服务器、三数据库和清库首次流程仍有待办。
最新实机进度(2026-09-30 21:33,最新候选已部署)
- 部署后 HTTPS 身份与状态修复
fc57b8e已完成全量本地检查及应用、接口、部署专项竞态;前端 239 项通过。 - 新 Linux 正式包构建成功,干净源码;23 项清单与 22 个包内文件全部核对通过,五个执行入口权限正确。
- 密码 SSH 使用正式安装器升级到 fc57b8e,线上主程序哈希与本地产物一致;主服务、目录 socket、管理入口及重新登录正常。
- [~] 正在进行新版本部署结果、失败恢复及单机多域名实机复测。
- [!] P0-03 保持复审通过;P0-04、P0-10 整项及完整生产门禁继续保留未完成部分。此次保留数据升级不替代最终清库首次初始化。
最新整改进度(2026-09-30,部署后 HTTPS 身份与状态一致性)
- 回归已复现两个缺陷:站点仍返回同域名旧有效证书时被判成功;站点校验报错时部署报告仍为 success。
- 部署前从实际证书、完整链及私钥校验结果提取指纹,不信任历史元数据;本地文件损坏时在远端写入前停止。
- HTTPS 必须返回本次待部署证书的相同指纹;旧指纹或空指纹进入有界重试,取消后不接收迟到的成功结果。远端可信链验证没有取消。
- 增加 verification_status 区分站点校验与单台文件推送;校验失败时整体报告失败,保留真实推送结果,不伪称自动回滚。页面同步展示,任务、尝试及接口回归覆盖失败状态。
- 新增本地真实 TLS 握手用例验证旧有效证书切换新证书;前端 239 项测试及生产前端构建通过。
- 后端全量测试、静态检查均通过;前端 239 项测试与生产前端构建通过。
- [~] 专项竞态最终结果待本批收尾记录;提交后需规范构建并部署新候选。
- 多域名、多服务器、重载失败、后置 HTTPS 失败实机恢复、三数据库及清库首次初始化仍待完成。
- [!] 本轮仅本地开发与隔离验证,不清空业务库、不修改线上现场、不新增生产放行。P0-03 已复审结论不变,P0-10 整项仍进行中。
最新验收进度(2026-09-30 21:07,规范源码双平台发布构建)
- 规范独立克隆签出 9e89eda,正式发布入口完成 Windows amd64 和 Linux amd64 双目标构建;不是只运行工具链预检。
- 发布清单 source_dirty=false,换行检查记录后端 547 个、前端 105 个受跟踪文件;33 项产物大小和校验和全部一致。
- 实际压缩包逐项读取:Windows 9 个文件、Linux 22 个文件,名称集合及内容校验和与清单一致;Linux 五个执行入口权限为 0755。构建后源码和锁文件无变化。
- 同一规范克隆后端全量测试、静态检查、发布模块专项及前端 237 项测试通过;没有据此宣称外部数据库或条件跳过用例通过。
- [~] P0-04 整项继续进行:本轮是在 Windows 构建机交叉编译,Linux 原生构建及双平台服务验收尚未完成。
- 下一步继续多域名实机、重载失败、后置 HTTPS 失败、任务恢复、三数据库及清库首次初始化。
- [!] 新包仅完成本地验证,尚未部署;第二台真实服务器仍未落实。P0-03 保持复审通过,完整生产验收不放行。详细产物身份见《构建版本与数据库支持矩阵》最新章节。
最新开发进度(2026-09-30,构建输入换行门禁)
- [✓] P0-03 保持复审通过,证据见下节;不代表全部生产验收通过。
- P0-04 子项:正式工具链在安装依赖前及构建后读取实际源码换行,拒绝 CRLF、混合换行、无受跟踪源码及 Git 检查失败;不会自动改写文件。后端和前端检查结果写入发布清单。
- 工具链 31 项、前端全量 237 项测试通过;实际非规范工作区已被正式入口拒绝;规范独立克隆检查通过,核对后端 547 个、前端 105 个受跟踪文件。
- [~] 新工具链提交后仍需在规范克隆执行完整发布构建;Linux 原生及双平台完整门禁未完成,P0-04 整项仍为进行中。
- [!] 远端继续运行此前已验证的
0bb427d正式候选,未将新的本地工具链或复审包冒充为已部署。其余生产门禁按下节继续。
最新进度(2026-09-30 20:53,回滚实机证据与 P0-03 独立复审)
本节及对应任务正文是当前状态;下方按日期保留的“总体验收仍为 P0-03”属于历史口径。任务复审和整体生产放行分开判断,不能将所有后续门禁都挂在目录整理任务下。
- [✓] P0-03 源码与产物边界复审通过:当前部署源码
0bb427d的独立克隆正式构建成功;发布模块完整测试通过;23 项发布清单校验通过、22 个包内文件边界检查通过;克隆构建后工作区和锁文件无变化。实际部署包全部校验和再次通过。未删除既有文件。 - 20:07 正式页面部署现有证书时注入配置校验失败;服务日志确认文件回滚,三个原文件的 inode、校验和、权限恢复一致,无残留锁,Nginx 工作进程不变,HTTPS 仍为 200。
- 20:10 页面恢复正常命令后再次部署成功,域名恢复正常,目标文件更新、Nginx 工作进程重建、HTTPS 仍为 200;没有重新签发证书。
- [~] P0-04 新发现:原工作树与独立克隆有 27 个前端文件仅换行字节不同,Git 状态均可为干净,但构建产物哈希不同。下一开发任务为正式构建增加源码换行一致性拒绝检查与回归,不用脚本改写中文源码,也不声称二进制可重复构建已通过。
- 后续门禁继续包含多域名复用、真实多服务器、重载失败和后置 HTTPS 失败边界、任务恢复、三数据库及清库首次初始化。
- [!] 第二台真实服务器尚未落实,DNS 偶发超时仍需评估。P0-03 局部复审通过不等于全部 P0 通过,不代表 10 月 1 日上线条件已满足。
最新进度(2026-09-30 20:06,生产证书与单台服务器部署闭环)
需求沿用用户已确认范围:继续真实生产流程、域名与服务器多对多、失败可诊断可恢复,并同步任务证据。不缩减完整验收范围。总体验收仍为 P0-03 完成待复审。
- 当前正式运行候选为 0bb427d,干净源码构建、完整发布包校验、正式安装器升级均已完成;后端全量测试、静态检查、构建及 DNS 专项竞态检查通过。
- 19:57 正式页面为独立测试子域成功申请生产证书并自动推送既有服务器;任务及持久化部署报告均为成功,报告明确配置校验和重载成功。
- 20:00—20:05 交叉核对:目标目录由产品部署创建,三个文件与版本化托管目录的校验和一致,私钥权限为 600;Nginx 配置检查通过,重载日志存在。
- 服务器和外部 Windows 客户端按正常域名访问 HTTPS 均返回 200,未跳过 TLS 校验;公网证书指纹与托管记录、部署文件一致。两台权威 DNS 均确认本次 ACME 挑战记录已不存在。
- [~] 下一任务为正式页面部署现有证书的失败回滚验证,不重复申请生产证书;之后继续多域名复用和任务恢复。
- [!] DNS 偶发超时仍出现过,补偿修复不等于消除了超时;第二台真实服务器、三数据库矩阵及清库首次初始化验收仍未完成。
- [!] 本轮保留失败现场进行升级复测,不是清库全流程;单台成功路径不代表完整生产放行。下方较早章节保留各自时间,不作为当前状态。
最新进度(2026-09-30 19:43,阿里云精确查询与超时补偿整改)
本轮沿用已确认需求,继续真实证书部署闭环。总体验收仍为 P0-03 完成待复审;以下局部进展不代表生产放行。
- 产品自带权限检查已在授权测试子域完成创建、读取、删除闭环;正式页面保存域名返回 201,关联既有服务器返回 200。
- 实机确认首次超时遗留一条授权探测 TXT;精确核对本次名称、值及记录 ID 后已执行清理,不扩大删除范围。
- 定位查询参数错误:EXACT 模式忽略 RRKeyWord、TypeKeyWord;改用 COMBINATION,并补充回归。证据来自当前 SDK 参数定义及云端两种模式的实际返回。
- 创建响应丢失时增加有界补偿:只查本次随机授权 TXT,核对唯一 ID、托管区、名称、类型、值后精确删除;不重试创建、不触碰共享 ACME 记录、不将补偿成功视为授权成功。
- 未发现记录、查询不完整、内容不匹配或清理失败时保留明确待核对提示;尚不能排除云端延迟写入,不声称零遗留。
- [~] 最终全量回归、干净候选构建和远端部署待完成;当前线上仍为上一批 SSH 修复版本。
- [~] 已为新测试子域创建独立 A 记录,原有泛解析未修改;证书签发、Nginx 消费端和公网 HTTPS 闭环仍待执行。
- 后续仍包括失败回滚、多域名复用服务器、第二台真实服务器、三数据库及清库首次初始化完整验收。
最新进度(2026-09-30 19:20,自动 SSH 公钥部署实机通过,整体验收未通过)
总体验收仍为 P0-03:完成,待复审。 当前 SSH 阻塞已获得一次真实生产页面复测成功证据,不得扩大为证书推送、多服务器或全部生产门禁通过。下方同日较早的“尚未部署”“竞态运行中”为历史快照。
- 已提交并推送:1a317c2 默认单次协商、7147532 SSH 重载后短暂连接拒绝的有界重试。
- 本批后端全量测试、静态检查、构建、差异检查通过;竞态检查部署包使用缓存,接口 156.792 秒、应用 62.278 秒,退出 0。
- 正式 Linux 候选发布清单为 source_commit=714753236f584a2bc705e271334c697dc7f9adbd、source_dirty=false;通过密码 SCP 上传、包内校验和正式安装器部署。
- 本地与远端主程序 SHA-256 均为 a39c8b0beaf2dc31e3bdc3b2aa774651e6d8e934ab956058518b10f71d9daeb2;管理入口、healthz、readyz 正常,未关闭 TLS 校验。
- 正式页面编辑既有服务器 3cfe6b82-6807-421d-88ab-a2034370375b;2026-09-30 19:18:58 北京时间 PUT 返回 200,耗时 1844 毫秒。
- 接口复读确认 auth_method=private_key、ssh_key_status=deployed、ssh_key_error 为空,部署和测试时间均为 2026-09-30T11:18:58Z。目标机确认先密码认证、随后公钥认证成功,对应公钥存在,sshd 配置校验通过。
- 本轮复测保留既有失败记录以验证修复,未清库、未新建重复服务器;这是针对性升级复测,不是清库首次初始化全流程验收。
- 下一步:真实证书目录创建、证书与私钥推送、Nginx 校验和重载、失败回滚、一台服务器多域名及任务恢复等完整验证。
- [!] 第二台真实服务器和三数据库生产矩阵仍未完成;不新增整项复审通过,不承诺 9 月 30 日全部完成或 10 月 1 日已经满足上线条件。
19:13 开发补充:SSH 重载间隙处理已实现
- 公钥安装后的私钥回连已增加最多五次尝试,间隔为 100、200、400、800 毫秒;只重试底层拨号连接拒绝,不重试认证失败、指纹不匹配或其他网络错误。
- 新增恢复成功、次数耗尽、认证失败、指纹失败、超时、非拨号错误、开始前取消及等待中取消回归;后端全量测试、静态检查和构建通过。
- [~] 本批竞态检查正在运行,正式候选尚未构建部署。开发完成不等于该项实机复审通过;总体验收状态不变。
19:10 补充:回连失败现场已定位到 SSH 重载窗口
- 三个包的竞态检查全部通过:部署 9.381 秒、接口 172.202 秒、应用 74.521 秒,命令退出 0。
- 密码 SSH 只读核对精确日志:10:27:40.559700 UTC 收到重载信号,10:27:40.566606 UTC 私钥连接被拒绝,10:27:40.583273 UTC SSH 恢复监听。该次失败位于重载监听间隙,不能只归因于算法协商次数。
- [~] 下一修复项:仅在公钥安装后的私钥回连阶段,对连接拒绝增加有界、可取消的重试;认证失败与指纹不匹配不得重试或放宽。
- 单次协商优化尚未远端部署;总体验收仍为 P0-03 完成待复审。
当前进度口径(2026-09-30 19:08,单次 SSH 协商本地回归)
总体验收仍为 P0-03:完成,待复审,不代表生产验收通过。 此前口头“约 70%”未按清单逐项统计,撤回该百分比;以下以实际完成项和未完成门禁为准。
- 默认 SSH 连接改为一次协商全部已过滤的安全主机密钥算法,正常连接只建立一次 TCP 连接;显式指定算法仍保持逐算法兼容行为。
- 已新增正常连接、认证失败停止重连、指纹不匹配回退、未知指纹在认证前拒绝的回归测试;保留严格主机指纹校验。
- 本轮后端全量测试、静态检查、构建、差异检查通过;这些结果不等同于真实数据库矩阵或远端验收。
- [~] 竞态检查正在运行;新候选尚未构建和部署,远端自动密钥回连仍未复测通过。
- 本轮密码 SSH 只读确认远端 Scert 与 SSH 服务均为 active;未清库、未修改远端文件,未创建辅助验收脚本。
- 下一步:竞态检查、提交候选、构建正式包、部署并复测既有服务器记录,再执行证书推送、校验、重载与回滚。
- [!] 连接次数过多是待验证假设,不能据此宣称 connection refused 的根因已解决。第二台真实服务器与完整生产门禁仍未完成,不能承诺当日全部验收。
当前进度口径(2026-09-30 15:26,验收位置与开发进展分开记录)
总体验收位置仍为 P0-03:完成,待复审,不代表全部开发只做到 P0-03。 后续条目的源码实现、本地回归和实机验证分别记录;不得用局部进展替代整项复审,也不得因本节没有升级状态而忽略后续已完成的开发子项。
- 本轮只读核对:密码 SSH 登录成功,远端 Scert 服务正在运行;未清库、未重启、未修改远端文件。
- 版本证据:远端
/scert/scert与本地已部署正式候选的 SHA-256 完全一致,为24a139c89e0096a80bf019072314f90323b95fd4843d762ea7550028756bed8d,不能将当前失败简单归因于安装了不同二进制。 - [~] 当前排查:历史服务器新增、更新请求分别在 25 毫秒、19 毫秒返回 502;源码发现公钥转换和内置安装命令与参数校验之间的疑点,尚未通过专项回归确认,不记作已修复。
- 下一步:补充失败路径回归,修复确认的问题,再重新构建部署并复测现有失败记录。
- [!] 验收限制:自动公钥部署、密钥回连和真实证书推送仍未通过;第二台真实目标服务器仍缺失,不新增复审通过项。
最新进度摘要(2026-09-30,远端 HTTPS 与密码 SSH 实机复核)
总体验收位置继续保持 P0-03:完成,待复审。 本轮已通过 https://odacm.cn 完成超级管理员登录和资源接口核验;远端正式包已运行,初始域名和服务器列表为空。按生产页面流程添加授权测试服务器时,主机指纹校验通过,但 Scert 自动部署 SSH 公钥返回 502,并将服务器保留为失败状态。该阻塞未解决前,不进入真实证书推送,也不把单台服务器记录当作多服务器生产验收证据。
- 已完成:正式 HTTPS 管理入口登录、会话读取、域名列表和服务器列表核验。
- 已完成:密码 SSH 直连目标服务器成功,服务器 ED25519 主机指纹与登记值一致。
- 已记录:通过正式 Web 流程添加服务器时,
ssh_key_status=failed,自动公钥部署返回 502;没有将底层凭据写入清单。 - [~] 进行中:定位 Scert 自动公钥部署失败原因,修复后重新执行密码 SSH、公钥登录和证书目录部署复核。
- [!] 当前阻塞:现场只有一台可用真实目标服务器,不能用虚构记录替代第二台服务器;真实“一域名多服务器”推送尚未验收。
- 尚未完成:远端多服务器证书推送、三数据库实机矩阵、HTTPS/DNS/ACME 全流程和最终生产部署门禁。
- [!] 不新增
[✓]复审通过项;总体验收继续保持 P0-03:完成,待复审。
最新进度摘要(2026-09-30,域名与服务器多对多统一回归)
总体验收位置继续保持 P0-03:完成,待复审。 本轮按照“先开发、后测试”要求复核域名与服务器多对多实现;一个域名可关联多台服务器,一个服务器可复用于多个域名,局部修改或清空不会影响其他域名。专项自动化验证已通过,但不等同于真实服务器生产部署验收。
- 已复核后端联合主键、项目归属和绑定替换逻辑,没有增加域名或服务器单边唯一约束。
- 已复核 HTTP 与仓储回归:重复服务器去重、多个域名共享服务器、局部解绑、显式清空、跨项目拒绝、路径冲突和审计失败回滚均有覆盖。
- 已复核管理页面:域名表单支持多选服务器,服务器列表反向显示当前托管的多个域名。
- 本轮专项后端测试通过;前端全量测试 231 项全部通过。
- [~] 三数据库实机、浏览器生产流程、密码 SSH、多服务器真实证书推送及远端部署仍需继续执行。
- 最终生产部署门禁和验收证据仍未完成。
- [!] 不新增
[✓]复审通过项;总体验收继续保持 P0-03:完成,待复审。
最新进度摘要(2026-09-30,P0-10 崩溃恢复边界修复)
总体验收位置仍为 P0-03:完成,待复审。 本轮继续先开发、后统一测试,修复服务重启恢复任务尝试的历史记录误命中风险;本地验证结果不等同于生产部署验收通过。
- 已完成,等待复审:恢复任务尝试改为依据恢复前仍处于活动状态的父任务筛选,不再依赖恢复完成时间反查。
- 已完成,等待复审:新增历史
service_restart任务时间碰撞回归测试,确认历史活动尝试不会被本次恢复错误修改。 - 本轮验证:后端
go test ./...、go vet ./...、git diff --check均通过。 - [~] P0-10 的 DNS 验证任务、重试幂等、跨数据库实机矩阵和统一复审仍需继续。
- 真实生产数据库清理、密码 SSH、远端多服务器部署、HTTPS/DNS/ACME、平台服务和最终生产门禁仍未完成。
- [!] 不新增
[✓]复审通过项;总体验收继续保持 P0-03:完成,待复审。
最新进度摘要(2026-09-30,P0-10 批量部署结果持久化)
总体验收位置仍为 P0-03:完成,待复审。 本轮完成批量部署结果的持久化、项目范围查询和 HTTP 读取接口,并完成本地自动化验证;这些结果不等同于生产部署验收通过。
- 已新增
task_deployment_results数据表及 0016 迁移,SQLite、MySQL、PostgreSQL 三套迁移文件与嵌入目录一致。 - 证书申请、续期、当前证书部署、导入、恢复等统一任务工作流会按任务尝试保存每台服务器的部署状态、消息和备份 ID。
- 已新增
GET /api/v1/tasks/:id/deployment-results,按任务项目范围判权,支持读取多服务器结果。 - 失败部署结果在接口层统一脱敏为“证书部署失败”,不返回远端路径、权限错误等底层敏感信息。
- 已补充管理员、项目只读成员、项目外用户、未登录用户、撤权后旧会话以及部分成功状态专项测试。
- 本轮提交
126cb6d、40d2b61、79e57cd已完成;go test ./...、go vet ./...、git diff --check均通过。 - [~] P0-10 仍需继续审查 DNS 验证、崩溃恢复、重试幂等、跨数据库实机矩阵和统一复审。
- P0-12、真实三数据库实机、清库初始化、密码 SSH、远端多服务器部署、HTTPS/DNS/ACME、Linux/Windows 服务及最终生产门禁仍未完成。
- [!] 不新增
[✓]复审通过项;总体验收继续保持 P0-03:完成,待复审。
最新进度摘要(2026-09-29)
总体验收位置仍为 P0-03:完成,待复审。 本轮完成 P0-10 任务并发、幂等、域名删除保护和服务重启恢复边界开发,并已完成本地回归;局部开发结果不代表生产部署验收通过。
- 已补齐幂等重放对
queued、running、retry_wait、cancelling四类活动状态的冲突返回。 - 已补齐管理证书
management_renewal的活动任务保护,避免重复创建并发任务。 - 已补齐域名删除对
renewal_run活动任务的保护,终态任务仍不阻塞合法删除。 - 服务重启恢复只更新本次恢复任务对应的活动尝试,不再污染历史终态任务的尝试记录。
- 新增专项回归测试;后端
go test ./...、前端 231 项测试和前端生产构建均通过。 - [~] P0-10 其余长任务链、三数据库实机矩阵和统一复审仍需继续执行。
- 生产数据库清理、浏览器缓存清理、密码 SSH、远端部署、HTTPS/DNS/ACME、Linux/Windows 服务和最终生产验收尚未执行。
- [!] 不新增
[✓]复审通过项,总体验收继续保持 P0-03:完成,待复审。
最新进度摘要(2026-09-29 继续开发)
总体验收位置仍为 P0-03 完成,待复审。 本轮继续推进 P0-10 任务事务链,不把局部代码或专项测试视为整项复审通过。
- HTTP 证书申请任务补齐“开始执行”审计;开始审计与终态审计均关联任务创建人、项目和任务 ID。
- 开始审计写入失败时,任务和任务尝试收敛为失败并停止证书申请;专项回归测试已覆盖该异常路径。
go test ./internal/httpapi已通过;尚未据此升级 P0-10 或总体验收状态。- [~] P0-10 的 DNS 验证任务、批量部署结果、崩溃恢复、重试幂等及其他长耗时入口仍需继续审查。
- P0-12 备份恢复、三数据库实库矩阵、浏览器清缓存、密码 SSH、远端部署和生产验收尚未执行。
- [!] 不新增
[✓]复审通过项,总体验收继续保持 P0-03 完成,待复审。
最新进度摘要(2026-09-29 继续开发)
总体验收位置仍为 P0-03 完成,待复审。 本轮只推进 P0-10 任务归属链,不把局部代码或专项测试结果视为整项复审通过。
- 任务工作流从认证请求上下文读取创建人,并写入证书任务的
operator_id。 - 任务开始和完成审计使用任务自身的创建人;后台调度任务继续保留空操作者边界。
- 创建人和审计归属专项测试通过;尚未执行三数据库、浏览器、密码 SSH、远端部署和生产门禁。
- [~] P0-10 其余任务链、DNS 验证、批量部署、崩溃恢复、重试幂等和 P0-12 仍未完成。
- [!] 不新增
[✓]复审通过项,总体验收继续停在 P0-03 完成,待复审。
最新进度摘要(2026-09-29 继续开发)
总体验收位置仍为 P0-03 完成,待复审。 本轮只推进 P0-10 任务工作流,不把局部代码完成或专项测试通过视为生产验收通过。
- 证书导入、恢复、校验任务入口接入应用层,提交
b899751。 - 当前证书部署、导入、恢复、校验入口接入任务取消上下文,任务中心取消可触发执行上下文取消。
- 已补充取消绑定回归用例;专项测试、后端全量
go test ./...和git diff --check已通过,当前批次等待复审。 - [~] P0-10 继续检查剩余任务状态、审计、尝试记录、取消、重试与崩溃恢复的一致性。
- P0-12 备份恢复、三数据库实库矩阵、浏览器、密码 SSH、远端部署及最终生产门禁尚未执行。
- [!] 不升级总体验收,不新增
[✓]复审通过项。
最新进度摘要(2026-09-29 23:48)
总体验收位置:P0-03 完成,待复审。 本节为最新摘要,下方保留历史批次。开发子项完成不等于整项复审或生产验收通过,原始 44 项范围不缩减。
- 上一批任务部分成功处理、HTTP 响应及前端状态展示已提交并推送
2b9d82d;上一批后端全量测试会话已成功结束。 - 核对确认域名与服务器多对多实现已存在,继续保留同项目判权、共享路径检查及局部解绑约束。
- [~] P0-10 正在修复新增活动状态与域名删除保护未同步的问题;补充活动状态拒绝及终态放行回归用例。
- 本批专项验证结果待开发完成后登记,不沿用历史通过结论。
- [~] P0-10 其余任务事务链与 P0-12 备份恢复仍未完成,其他原始待办继续保留。
- 统一生产构建、三数据库、浏览器清缓存、密码 SSH、远端部署和生产验收仍待后续执行。
当前进度(2026 年 9 月 29 日 16:55 更新)
当前总体验收位置:P0-03 完成待复审;并行开发批次:P0-07
18:22 更新(2026 年 9 月 29 日)
- P0-07 任务列表、任务详情、任务尝试已接入实时项目权限读取;任务取消使用
task.cancel判权并在事务内同步任务尝试状态。 - 证书申请任务入口使用项目可见域名和
certificate.manage判权;撤权、停用账户和跨项目读取由当前专项测试覆盖。 114514b已提交并推送;后端go test ./...在当前本地环境全部通过。- [~] P0-07 仍需继续完成其他资源写入权限、任务执行链、三数据库矩阵、浏览器、SSH、部署和生产验收。
- [!] 总体验收位置仍为 P0-03 完成待复审,本轮开发和后端测试通过不构成生产验收通过。 按总体验收口径当前仍在 P0-03。 P0-01~P0-03 为完成待复审,尚未取得生产部署验收结论;P0-07 的域名授权属于并行开发批次,已经有局部源码和专项测试证据,但不能据此把总体验收位置或 P0-07 整项升级为完成。遵循“先开发、后统一测试”,不能把开发子项或局部测试误写为生产验收通过。
| 编号 | 整项状态 | 已完成的开发或历史验证 | 尚需完成 |
|---|---|---|---|
| P0-01~P0-03 | [x] 完成待复审 |
范围、任务规格、源码与产物边界已整理 | 最终复审及相应生产证据 |
| P0-04 | [~] 进行中 |
工具链及构建边界已实现,历史候选有 Windows 正式包核验记录 | 当前代码重新构建、Linux 原生及服务运行证据 |
| P0-05 | [~] 进行中 |
三库迁移至模式 14,已有部分数据库历史验证 | 当前改动统一回归、PostgreSQL 实库、未关闭兼容性问题 |
| P0-06 | [~] 进行中 |
项目生命周期、资源归属、多对多及共享路径预检源码 | 其他实体关联、完整业务调用链及统一验证 |
| P0-07 | [~] 并行开发 |
成员角色、项目入口、七个资源 GET 隔离、绑定 PUT 授权和事务审计;域名写入授权已提交 5180c7d、读取与任务竞态修复已提交 82448c9 |
统一全量测试、三库矩阵、其他资源和任务权限链、浏览器与生产验收 |
16:55 更新:域名新增、修改、删除已接入项目权限和事务审计;域名更新改用项目可见资源读取;任务创建与删除共用域名行锁;新增审计失败回滚测试。e36794a 已成功推送。go test ./internal/repository 与 go test ./internal/httpapi 均通过;完整后端、前端、数据库矩阵、浏览器、部署和生产验收仍未完成。实际任务步骤见《Scert整改任务执行清单》首节。
总项状态
| 状态 | 数量 | 当前含义 |
|---|---|---|
[✓] 复审通过 |
0 | 尚未通过生产部署验收 |
[x] 完成待复审 |
3 | P0-01、P0-02、P0-03 |
[~] 进行中 |
27 | 子项实现和局部验证不能替代整项验收 |
[!] 阻塞 |
3 | P0-11、P2-08、P2-09 |
[ ] 未开始 |
11 | P1-10 及 P3 的十项 |
本轮新增进展与下一步
- 21:54 接续完成多对多表单收尾源码:资料创建成功、关联失败后保留已创建标识及选择;未修改资料时只重试关联,修改资料时更新既有域名。编辑先读取真实关联,失败禁止保存并可重新读取;服务器候选按项目过滤,保存期间防重复及切换。新增组合式状态、管理页接线及模板回归源码,全部待统一测试。
- 表单层保护不等于跨请求原子性或服务端创建幂等:创建响应丢失时要求刷新确认,不自动重发;跨刷新恢复与整项权限、部署整改仍待完成。
- 生命周期收尾及七个资源读取入口已接入真实项目授权,候选已在
709c1ef;绑定写入授权与事务审计检查点f38e290已提交推送。后续源码仍需统一测试,不能套用此前通过记录。 - 本轮多对多子项源码已补齐:两个域名可共享两台服务器,修改或清空一方不删除服务器或另一方关联;保存需双方同项目及实时权限。共享路径冲突在绑定、服务器修改及部署前检查,页面以悬浮提示说明复用。
- 已新增多对多、路径冲突、失败保留、审计回滚和页面多选回归源码;仅进行源码检查、格式化与差异检查,不执行测试、构建、浏览器或远端部署。详细边界见执行清单首节及支持矩阵第二十六节。
- 其他资源增删改、签发/导入/部署、DNS/SSH、任务读取和执行/取消/重试、审计读取仍需继续接入项目授权。跨服务器记录指向同一主机、配置并发变更与在途任务的路径占用仍待整体部署整改,不以本批静态路径检查替代完整安全边界。
- [!] 按用户指令先开发再集中测试,原始 44 项大项状态不变;没有新增复审通过或生产验收证据。
- 16:55 已同步本轮 P0-07 域名授权开发、任务引用保护和审计回滚专项结果;总体验收仍停留在 P0-03 完成待复审,不新增复审通过项。
20:47 阶段记录(历史)
- [~] 20:47 补充:首轮仓储/接口/真实应用接线组合测试退出 0,136 个叶子用例通过、5 条实库条件跳过;覆盖创建、更新、删除、权限拒绝、引用保护、非法输入及审计失败回滚。随后新增的会话验证后停用/降权、取消请求审计和跨数据库回滚测试尚未运行,不能套用首轮结果。
- [~] 前端已接入创建、编辑、二次确认删除及权限能力提示;项目页面与生命周期专项 35 项通过、0 失败、0 跳过,退出 0。覆盖重复提交、切换/卸载隔离、冲突刷新、末页删除回首页等;这是组合式逻辑和模板测试,不是真实浏览器验收。
- 当前候选的完整后端、完整前端、MySQL 双版本、竞态检测和构建尚待执行;本批源码尚未提交。下方 20:36 记录保留为历史状态,不代表当前仍未开始页面开发或从未测试。
20:36 阶段记录(历史)
- 核对当前工作区和执行清单:20:21 已开始项目生命周期与事务审计整改,修改前检查点为
dcede93;上批正式包验证记录已随61652f0提交。 - [~] 项目创建、编辑、删除仓储和成功变更事务审计已开始编写;默认项目及资源/成员引用保护、失败审计与回滚测试源码已新增,尚未执行测试,不记为实现完成或验证通过。
- [~] 创建、编辑、删除 API 及应用接线已有未提交修改;项目目录新增创建、管理和删除能力字段。HTTP 边界、真实应用接线及目录能力测试仍待补齐,权限和事务行为尚待验证。
- 前端创建、编辑及二次确认删除尚未修改;后端与前端回归、数据库验证及本批正式构建尚未执行。
- [!] 上批成员页面真实浏览器验收仍未完成,具体工具限制见下方 20:15 历史快照;该限制不阻止本批源码整改。
20:36 历史记录:当时仅同步文档,另有 7 个未提交的后端源码/测试文件;这是当时的工作区快照,不是当前待提交数量。当前已继续开发,仍未清理业务库、调用 RAM、修改 DNS 或远端部署。上批测试与正式包证据不能证明新增代码通过,生产验收仍未通过。
历史批次进展(2026 年 9 月 28 日 20:15,正式包启动验证)
- 使用已有正式构建脚本从干净提交
5f9af32生成 Windows 服务端与 Web 发布包;清单中的 10 个产物、压缩包内 9 个文件、实际运行目录中的主程序及 4 个 Web 文件均通过大小或 SHA-256 对应校验,精确范围见支持矩阵第二十五节。 - 正式包主程序已在隔离目录实际运行并提供前后端;临时 HTTPS 证书与可信本机日志中的 SHA-256 指纹完全一致,主机名校验通过。仅对这个已核对的临时入口接受浏览器证书例外,不是正式证书信任验收。
- 浏览器已打开真实 Scert 页面:无会话读取初始化配置返回 401,无效一次性令牌兑换返回 401,之后仍不能读取配置;相关响应禁止缓存。仅覆盖初始化入口的未认证拒绝路径。
- 首次初始化后端专项重新执行:128 个叶子用例通过、0 失败、4 条平台条件跳过,进程退出 0;跳过项不能按通过统计。
- [!] 当前浏览器文件工具的工作区范围不包含 Scert,向浏览器传入本机一次性地址文件被拒绝;未绕过该限制,未输出真实令牌,未取得初始化会话。此项是本批工具阻塞,不新增或替代原始 44 项总项状态。
- 完成合法会话兑换、数据库与 DNS 验证、管理入口证书配置后,再验收项目入口、成员操作、分页、撤权与布局。外部前置步骤尚未执行,不记成已通过或已复现的产品故障。
- 项目创建编辑删除及事务审计、全部资源和排队任务权限、PostgreSQL 当前实库、Linux 原生及生产门禁继续保留。
20:15 批次没有修改产品源码、清理现有业务库、调用 RAM、修改 DNS、签发业务证书或进行远端部署;其正式包证据见支持矩阵第二十五节。当前进度以本文件顶部及执行清单首节为准,以下保留为历史快照。原始 44 项与验收标准不缩减,生产验收仍未通过。
历史进度快照(2026 年 9 月 28 日 19:54,项目入口与成员页面本批回归完成,等待复审)
- 已新增实时授权的可见项目分页接口,以及管理员和普通项目管理员均可使用的成员页面;不暴露全站账户目录,不写死默认项目。
- 前端完整回归 198 项通过、0 失败,包含模板渲染和旧请求隔离;前端构建通过,不等于浏览器或生产验收。
- 最后缓存保护修改后的专项 83 个叶子通过、4 条实库条件跳过;完整后端 1700 个叶子通过、54 条条件跳过,均无失败。静态检查、模块校验、Windows 构建和 Linux 交叉构建均退出 0。
- MySQL 5.7/8.0 三轮目录/成员组合各 195 个叶子通过,0 失败、0 跳过;包含 SQLite 用例,不称纯 MySQL 测试。
- 本批三轮专项竞态 249 个叶子通过、0 失败、12 条外部 MySQL 条件跳过,退出码 0;总清单对应条目及相关文档已同步。精确范围见《构建版本与数据库支持矩阵》第二十四节,不称全仓库或实库竞态通过。
- 真实浏览器、项目创建编辑、全资源与排队任务权限、PostgreSQL 当前实库、Linux 原生及生产验收仍未完成。
原始 44 项仍为:复审通过 0、完成待复审 3、进行中 27、阻塞 3、未开始 11。页面实现与本地回归属于子项进展,不升级 P0-07 整项状态,生产验收仍未通过。当前待办以本节、P0-07 对应条目及执行清单首节为准;下方各批次保留历史证据,不覆盖本节。
历史进度快照(2026 年 9 月 28 日 19:10,成员接口回归通过,等待复审)
本批继续推进成员接口、分页及失败审计;实现与错误分类修复已保存到检查点 3857dac,随后增加正式边界测试。已重新执行当前源码专项、双版本 MySQL、完整后端及构建,不用上一批数据库候选结果替代本批证据。本批不清理现有业务库、不进行浏览器或远端部署测试。
本批任务状态
- 确认进度同步范围:保留原始 44 项、验收标准和历史证据,按实际实现与验证结果更新,不以测试数量折算完成率。
- 成员列表、授予及撤销接口已接入应用依赖;列表按用户账户分页,每页支持 5、10、15、30 位成员,同一账户的多个角色不拆页。实际应用登录及读取默认项目的接线测试通过,等待复审。
- 列表查询内实时判权、服务端会话身份和失败请求审计已通过专项;补齐会话验证后撤权/停用、取消请求独立审计、审计存储失败、DELETE 额外输入拒绝等边界。成功变更继续使用事务审计。
- 首轮
focused-first.jsonl的审计错误误报 409 已修复;精确区分三类驱动的唯一键冲突与触发器等其他错误。修复后focused-boundaries.jsonl为 62 个叶子通过、3 条实库条件跳过,退出码 0;失败日志保留。 - MySQL 5.7/8.0 依次完成三轮成员组合,各 171 个叶子通过、0 失败、0 跳过,退出码均为 0;组合含 SQLite 和错误分类用例,不称纯 MySQL 用例。
- 当前源码完整后端 1679 个叶子通过、0 失败、53 条条件跳过;Windows 独立程序历史备份/升级与成员恢复路径、静态检查、模块校验、Windows 构建及 Linux 交叉构建通过,顺序进程退出码 0。跳过与交叉构建不作为实机验收。
- 仓储、HTTP 和实际应用接线三轮竞态共 186 个叶子通过、0 失败、9 条外部 MySQL 条件跳过,退出码 0;这是成员专项竞态,不是全仓库或实库竞态验证。
- 已补充成员接口交接与模型边界,保留 Smail 参考接口文档不混写。详细命令、结果与范围见《构建版本与数据库支持矩阵》第二十三节。
- 成员管理页面、项目入口、全部业务资源授权及排队任务重判继续后续交付;PostgreSQL 当前实库、Linux 原生、完整发行包和生产验收仍未完成。
原始 44 项状态汇总
| 状态 | 数量 | 说明 |
|---|---|---|
[✓] 复审通过 |
0 | 尚无整项通过最终复审 |
[x] 已完成,等待复审 |
3 | P0-01、P0-02、P0-03 |
[~] 进行中 |
27 | 包含本批继续实施的 P0-07,不把局部源码实现记为整项完成 |
[!] 暂缓或存在阻塞 |
3 | P0-11、P2-08、P2-09 |
[ ] 未开始 |
11 | P1-10 及 P3 的 10 项 |
本节是 19:10 的历史批次记录,表内总项数量仍有效,但本节尚未交付的成员页面与项目入口已在后续批次实现。当前子项状态以本文顶部、P0-07 对应条目及《Scert整改任务执行清单.md》首节为准,整体验收仍未通过。
历史进度快照(2026 年 9 月 28 日 18:36,数据库候选回归完成,整体验收未通过)
本节更新下方 13:05 快照。检查点 0edde01 已提交推送;当前驱动改为 modernc.org/sqlite v1.59.0,配套 libc v1.75.7,实测引擎为 SQLite 3.53.4。旧 v1.40.1 的 3.50.4 引擎处于官方 WAL-reset 缺陷影响范围,先前通过只作为中间版本证据,不作为最终候选放行。
- 核实两个资源失败:MySQL 5.7 初始化日志明确记录缓冲池内存分配失败;8.0 测试进程内存分配失败。已按程序路径和隔离数据目录验证身份,终止崩溃后残留的两个测试实例进程;未触碰本机其他服务,未删除文件。
- 最后源码的取消查询 direct/prepared 和 WAL 完整性专项各 10 次通过,共 30 个叶子;服务并发关闭另重复 30 次通过。最终专项证据为
sqlite-verified.jsonl,不是初版sqlite-final.jsonl。 - MySQL 5.7/8.0 保留原用例、严格 TLS 和三轮重复,按版本依次执行;各 531 个叶子通过、0 失败、0 跳过,进程退出码均为 0。组合含 SQLite 用例,不称纯 MySQL 用例;表完整性和索引字段顺序检查通过不代表旧异常根因已修复。
- 最终候选完整后端 1635 个叶子通过、0 失败、52 条条件跳过;Windows 独立程序历史备份/升级/成员恢复、静态检查、模块校验和 Windows/Linux 候选构建通过,最终顺序进程退出码为 0。交叉构建不是 Linux 原生验收。
- 最终候选三轮扩大竞态
race-final.jsonl:831 个叶子通过、0 失败、15 条条件跳过,进程退出码为 0;跳过的是未配置外部 MySQL 的条件测试,实库证据单列,不复用 v1.40.1 的旧竞态数字。 - [!] 旧 MySQL 5.7 Error 1280 根因仍未关闭,重复通过也不能自动关闭该问题。
原始 44 项:[✓] 0、[x] 3、[~] 27、[!] 3、[ ] 11。P0-04/P0-05/P0-06/P0-07/P1-09 仍为 [~];本批子任务完成不升级整项状态,不按测试数量折算完成百分比,生产验收未通过。
接下来优先补齐成员管理 Web/API、分页、失败请求审计、业务资源授权和排队任务重判;PostgreSQL 当前实库、Linux 原生、完整发行包与实机服务验收仍未完成。最新证据目录为 artifacts/runtime-migration-20260928/,详细命令与边界见《构建版本与数据库支持矩阵》第二十二节;下方按时间保留历史结果,不代表当前待办。
历史进度快照(2026 年 9 月 28 日 13:05,运行时与迁移回归批次)
本节与《Scert整改任务执行清单.md》同步。成员基础已提交并推送为 b3909d8,事务审计源码已保存到检查点 83a3ada;检查点不代表验证完成或正式发布。当前 SQLite 驱动升级、取消查询回归及 MySQL 故障断言强化仍未提交。以下状态依据本次重新读取日志并取回全部四个测试进程退出码的结果,不沿用上一批完整回归结论。
原始 44 项状态汇总
| 状态 | 数量 | 含义 |
|---|---|---|
[✓] 复审通过 |
0 | 尚无整项达到最终复审标准 |
[x] 已完成,等待复审 |
3 | P0-01、P0-02、P0-03 |
[~] 进行中 |
27 | 局部实现或局部验证,不等于整项完成 |
[!] 暂缓或存在阻塞 |
3 | P0-11、P2-08、P2-09 |
[ ] 未开始 |
11 | P1-10 及 P3 的 10 项 |
不按测试通过数量折算整体完成百分比;生产部署验收仍未通过。下方各项原始需求、验收标准及总项状态不缩减。
本批任务与证据
- 核对需求与任务范围:保留原始 44 项及验收标准,区分源码实现、隔离回归、实机部署和最终验收;本次仅同步进度,不增加代码改动或重启测试。
- SQLite 取消查询文件占用已由正式测试在旧驱动复现;升级候选
modernc.org/sqlite v1.40.1后,取消查询 direct/prepared 各重复 10 次通过,服务并发关闭重复 30 次通过。修复候选仍待复审,不宣称已完成全部平台验证。 - 当前候选完整后端
backend.jsonl:1634 个叶子通过、0 失败、52 项条件跳过;Windows 构建、后续go vet ./...和go mod verify成功,顺序进程退出码为 0。条件跳过不计通过。 - 扩大范围的三轮竞态
race.jsonl:累计 828 个叶子通过、0 失败、15 项条件跳过,进程退出码为 0。 - [!] MySQL 5.7 三轮组合
mysql57-after.jsonl:530 个叶子通过、1 个失败、0 跳过(包含 SQLite 用例);失败为TestMySQLRealProjectMembersMigrationRetry的隔离 MySQL 实例初始化失败。后两轮该用例通过不能抵消本批失败,进程退出码为 1。 - [!] MySQL 8.0 三轮组合
mysql80-after.jsonl:已完成 247 个叶子通过,但数据库包进程报fatal error: runtime: cannot allocate memory,组合进程退出码为 1。中断测试不能计为通过,双版本完整回归仍未完成。 - [~] 已强化 MySQL 迁移故障断言与三条历史索引检查,避免把意外错误当成预期故障。此前 5.7 的 Error 1280 与服务端索引元数据不一致仍未关闭;重复测试未再复现不等于根因修复。
- 继续定位 MySQL 初始化与测试进程资源失败,复核旧索引异常;完成最终依赖选择、最终版本回归及其他专项文档同步后再提交修复候选。
- 成员管理 Web/API、分页、失败请求审计、全部业务入口资源判权和排队任务重新判权尚未接入;PostgreSQL 当前实库、Linux 原生验证及生产门禁仍未完成。
最新证据目录:artifacts/runtime-migration-20260928/。本次没有浏览器测试、SSH 或生产部署,没有清理业务库。P0-05、P0-06、P0-07、P1-09 总项继续保持 [~]。以下 12:48 记录为修复前历史,不代表当前候选的完整后端仍然失败。
历史进度:项目成员变更事务审计(12:48 核对)
- 已实现成功授予/撤销项目角色与审计同事务提交;审计失败或未实际写入时回滚成员变更,保留实时操作者判权。MySQL 检查成员表与审计表均为 InnoDB,不自动修改历史库引擎。实现完成待复审,不代表全库兼容性验证通过。
- 已补充正常变更、拒绝操作、审计故障回滚、自我撤权、历史保留、取消上下文、存储边界及并发重复变更测试。最新仓储专项
targeted-verified.jsonl:41 个叶子通过、0 失败、3 项条件跳过;跳过项不计通过。 - 最新三次竞态专项
race-verified.jsonl:累计 123 个叶子通过、0 失败、9 项条件跳过;随后go vet ./...、go mod verify成功,顺序进程退出码为 0。 - [!] MySQL 5.7 最新专项
mysql57-verified.jsonl:176 个叶子通过、1 个失败、0 跳过(包含 SQLite 用例)。失败为TestHistoryScopeMySQLMigrationRetry/version,错误为索引idx_audit_project_history的 Error 1280;进程退出码为 1,后续 MySQL 8.0 最新验证未启动。根因未确认,不能使用早期日志代替最后修复后的双版本验证。 - [!] 本批中间版本完整后端
backend.jsonl:1630 个叶子通过、1 个失败、52 项条件跳过。失败为服务关闭后 SQLite 文件仍被占用;最新独立重复日志service-close-repeat.jsonl共 10 次,8 次通过、2 次失败,退出码为 1。该前置步骤失败后未执行最新完整回归,不能声称当前源码完整后端已通过;测试名称含 Desktop 不构成跳过公共运行时资源释放问题的理由。 - 成员管理 Web/API、分页、失败请求审计、全部业务入口资源判权和排队任务重新判权尚未接入;PostgreSQL 当前实库、Linux 原生验证及生产门禁仍未完成。
本批证据目录为 artifacts/project-member-audit-20260928/,保留初始失败和中间日志。P0-05、P0-06、P0-07、P1-09 总项继续保持 [~]。本次只同步文档,不修改源码、不清库、不执行远端部署;以下旧批次的通过数字仅作历史证据。
历史进度:项目成员与实时判权批次
- 第 14 号迁移及六类项目角色已实现;授予/撤销在单条数据库语句内核对操作者,判权每次读取实际账户状态和当前成员关系。用户分组、普通管理员身份及默认项目均不隐式授予权限。
- 两项目、多角色、撤权、账户停用和降权、普通账户私钥限制、成员引用及 SQLite 替换边界通过专项回归;MySQL 双版本与 Windows 独立程序升级/成员备份恢复通过。详细数字和证据见支持矩阵第二十一节。
- 空邮箱误拦截修复后重新验证:完整后端 1623 个叶子通过、51 项条件跳过;三次竞态共 633 个叶子通过、18 项条件跳过;MySQL 双版本专项各 242 个叶子通过(包含 SQLite 用例),静态检查和模块校验通过。最新证据为
*-verified.jsonl,没有执行生产部署或清库。 - 成员管理界面/接口、变更审计、全部业务入口资源判权和排队任务重新判权尚未接入;剩余资源关联、PostgreSQL 当前实库、Linux 原生与生产门禁继续实施。
本批交付的是成员与判权基础,不等于 Web/API 已完成项目隔离。P0-05、P0-06、P0-07 仍为 [~],原始 44 项与验收标准保持不变。下方为历史批次证据。
历史进度:任务/审计关联批次
- 已提交:域名、服务器项目归属及同项目绑定约束(模式 11);SQLite 替换操作引用保护(模式 12)。已验证范围见执行清单和支持矩阵第十九节。
- P0-06 本批子项:模式 13、任务/审计项目/系统/未知范围快照、任务与操作者关联、历史保留均已实现并通过本批回归,等待复审。登录错记身份及会话失效后漏记审计也已复现修复。
- 完整后端 1514 个叶子通过,0 失败、49 项条件跳过;三次竞态共 258 个叶子通过;MySQL 双版本专项各 135 个叶子通过且无跳过(包含 SQLite 用例);独立 Windows 产品程序两条历史升级/备份恢复路径通过。精确命令和限制见支持矩阵第二十节。
- 剩余资源项目关联、项目成员权限、跨项目 Web/API 越权验证及生产部署验收仍未完成。
P0-05、P0-06、P0-07 总项均保持 [~];本批字段与范围校验不等于项目授权完成。原始 44 项及其验收标准不缩减。最新细项见《Scert整改任务执行清单.md》首节;以下旧批次进度只作历史记录,不代表当前实现。
历史进度(按批次保留)
当前进度(2026 年 9 月 28 日):源码
7284958已完成域名、服务器的四项归属字段、三库第 11 号迁移及同项目部署绑定约束;不是只有项目根实体。下方项目根实体段落属于上一批历史记录。复核进一步复现 SQLite 替换冲突可绕过引用保护,已由92c844f新增第 12 号迁移修复并通过本批回归,不能只修改旧迁移使已升级库漏修。最新状态见执行清单与支持矩阵第十九节。任务、审计等剩余资源关联、成员权限及生产验收未完成,P0-06/P0-07 均保持[~],全部 44 项范围不变。
本批最终验证补充:项目根实体已通过 SQLite 专项、MySQL 5.7/8.0 实库、3 次竞态检测及完整后端回归;默认和普通项目也已进入独立 Windows 程序的备份恢复验证。下方“待汇总”为启动阶段快照,最新证据以执行清单的“项目根实体最终验证结果”及支持矩阵第十八节为准。项目资源归属、关联约束和权限隔离仍未实现,P0-06/P0-07 保持
[~]。
2026 年 9 月 28 日补充进度:P0-06 已进入项目根实体实施,新增项目模型、三库第 10 号迁移及仓储,本地专项通过;完整后端与 MySQL 隔离测试待汇总。当前资源尚未增加项目归属,不代表 P0-07 权限隔离完成。详细需求、后续关联和删除约束见《项目资源关联模型.md》,实际验证见《Scert整改任务执行清单.md》。全部 44 项原始要求及各项验收标准不变。
适用项目:
D:\Desktop\Scert
产品基准:Certimate + Certd
产品范围:Web 管理页面 + Windows/Linux 服务端
明确排除:Wails 桌面版
整改日期:2026 年 9 月 27 日
进度同步:2026 年 9 月 28 日 12:48。最新批次事实与阻塞见本文件顶部及《Scert整改任务执行清单.md》首节;历史批次记录不代表当前验证结果。本文件的需求和验收标准不因状态更新而缩减,四份分级任务规格中的总项状态不变;
[~]仅表示已有实现或正在整改,不表示整项完成。
当前专项:P0-05 已修复 SQLite 历史模式 1~3 存在任务数据时迁移 4 失败的问题,并验证模式 1~9 的带数据升级、依赖对象保留及失败回滚重试。源码
fd2810b的 SQLite 专项通过 71 个叶子用例,27 个升级/恢复用例连续 3 次竞态检测通过;干净提交构建的独立 Windows 程序完成历史模式备份、升级及恢复后再升级,证据见支持矩阵第十七节。此前 WAL 恢复证据保留在第十六节。旧发行包真实数据迁移、完整发行包安装、真实服务重启、Linux 原生执行、取消边界及其余数据库和生产门禁仍待完成;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 整理源码、构建产物和部署产物
状态: [✓] 复审通过(2026-09-30 20:53,仅本项源码与产物边界)
复审证据: 当前部署源码独立克隆、正式 Linux 发布构建、发布模块完整回归、23 项 manifest 校验、22 个包内文件检查、构建后干净索引,以及远端实际发布包全部 SHA256SUMS 核对通过。详见《Linux生产流程测试记录》同日 20:53 章节。未删除既有文件;后续构建可重复性和生产功能门禁仍单独执行。下段旧位置说明为历史记录。
位置说明: 本项不是当前开发卡点。当前主线已转到 P0-07 的业务资源写入授权;保留 [x] 是因为整项还需最终复审,不表示后续任务未开始。
建立明确目录边界:
backend/ 后端源码
frontend/ 前端源码
deploy/ 部署脚本
doc/ 项目文档
tests/ 测试代码
scripts/ 开发辅助脚本
release/ 发布包
artifacts/ 测试证据
以下内容不得进入正式源码提交:
.runtime/
.deploy-stage/
dist/
*.exe
*.tar.gz
临时补丁文件
浏览器运行缓存
数据库文件
真实证书私钥
真实凭据
远程部署临时文件
验收标准
- 源码、测试产物、部署产物和生产证据分离。
.gitignore覆盖构建、运行、数据库和敏感文件。- 不删除现有文件,只进行归类、忽略或迁移。
P0-04 统一开发和构建版本
状态: [~] 进行中
最新进度(2026-09-30 21:07): 规范源码 9e89eda 已完成正式双目标构建、实际压缩包与清单核对、后端全量测试和静态检查、前端 237 项测试;构建前后换行及依赖输入检查通过,工作区无变化。该证据覆盖 Windows 构建机上的双目标产物,不覆盖 Linux 原生构建、双平台服务和三数据库生产流程,整项不提前关闭。
本轮补充(2026-09-28 20:15): 干净提交 5f9af32 已经通过 Windows 正式发布构建;本机核对发布清单、压缩包内容及运行副本一致,并实际启动主程序与 Web。证据见支持矩阵第二十五节;没有执行 Windows 服务安装、Linux 正式包原生运行或生产门禁,不能升级整项状态。
最新进度(2026-09-28): SQLite 依赖已固定为 v1.59.0/libc v1.75.7,运行时引擎 3.53.4;最终候选完整后端、模块校验及双平台构建通过。最终竞态与完整发行门禁按首节及支持矩阵第二十二节记录,不沿用中间驱动结果放行。
统一记录并固定以下版本:
Go 版本
Node.js 版本
npm 版本
Vue 版本
数据库驱动版本
Go 依赖版本
操作系统版本
编译目标
验证命令:
go test ./...
go vet ./...
npm.cmd test
npm.cmd run build
P0-05 确认数据库正式支持矩阵
状态: [~] 进行中
最新进度(2026-09-28): 三库代码迁移已至模式 14;最后源码 SQLite 取消查询/WAL 专项、Windows 独立程序备份升级恢复通过,MySQL 5.7/8.0 成员与历史范围组合各三轮通过。旧 MySQL 索引异常根因仍未关闭,PostgreSQL 当前实库、Linux 原生及三库完整生产路径未验收;不能据局部通过升级总项状态。
项目当前涉及 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 建立统一领域模型
状态: [~] 进行中
本轮补充(2026-09-28): 生命周期仓储、成功事务审计、默认项目与引用保护及前端操作已实现,收尾候选已在 709c1ef。模式仍为 14;域名与服务器沿用联合主键的多对多关系,新增共享绑定、去重、局部清空和路径冲突保护源码及回归用例。先开发后统一测试,不能以历史局部结果关闭本项。
最新进度(2026-09-28): 已实现域名/服务器项目归属、同项目绑定、任务/审计范围快照与项目成员关系;成员成功变更和审计共用事务。并非下列全部核心实体均已交付;剩余资源关联与业务调用链仍需补齐,具体模型见《项目资源关联模型》第七至九节。
建议统一核心实体:
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 增加项目级权限和资源隔离
状态: [~] 进行中
当前子任务(2026-09-28 22:08): 多对多表单重试、项目候选筛选及读取失败保护已提交 6c0ae31,回归源码待统一运行。当前开始域名新增/修改/删除的路由、实时授权、事务审计及任务引用保护整改;此子项仅完成源码核对,业务修改尚未开始,不提前记为完成。
本轮补充(2026-09-28): 项目生命周期前后端、七个资源 GET 的读取隔离,以及域名绑定 PUT 的实时授权、失败审计和成功事务审计已有源码实现;缺依赖拒绝服务,不回退全量或未授权仓储。多对多仍要求同项目,不因共用服务器扩大授权。生命周期收尾、读取隔离及本轮绑定代码尚未统一测试,其他资源写入和任务权限链未闭环,P0-07 保持进行中。
本轮补充(2026-09-28 20:15): 正式包已进入浏览器的首次初始化入口,未认证及无效令牌拒绝路径已验证;工具文件访问范围阻止传入本机一次性地址,尚未取得初始化会话,因此成员页面、角色操作和布局都未进行真实浏览器验收。详见本文件顶部与支持矩阵第二十五节,不以启动页面代替项目权限验收。
历史进度(2026-09-28 19:54): 成员及可见项目入口当时的前端 198 项通过,后端专项 83 个叶子通过、4 条条件跳过,完整后端 1700 个叶子通过、54 条条件跳过;双版本 MySQL 三轮组合各 195 个叶子通过,三轮专项竞态 249 个叶子通过、12 条条件跳过,静态检查与双平台构建通过。证据见第二十四节,仅适用于该批候选,不覆盖此后的生命周期收尾、读取隔离和多对多修改。
建议角色:
项目管理员
证书管理员
部署管理员
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 统一任务、部署和回滚事务模型
状态: [~] 进行中
恢复安全更新(2026-10-02 13:30): 已复现并修复先改文件后验锁、未知归属锁清理及已验证阶段部分解锁无法重入的问题;补齐认证前身份核验和整组备份预检。三包原生 Linux 回归、go vet 和新用例重复二十次通过;竞争检测因缺少 gcc 未运行成功,修复尚未正式部署。上传碰撞与事务日志的组合仍需核查,历史缺证据事务继续保留,不能标记整项通过。
中断恢复实测(2026-09-30 22:35): 真实部署校验中强制终止主进程,systemd 自动重启,任务、尝试及审计正确标记中断失败;远端锁和事务旧文件保留,直接重试被拒绝。人工核查并隔离现场后可通过产品重新部署。已开发固定阶段诊断和先核查后重试提示,专项通过但未部署;远端崩溃事务自动恢复仍未完成,不能标记整项通过。
最新整改(2026-09-30): 已复现并修复后置 HTTPS 校验接受旧有效证书、校验失败仍返回成功部署报告的问题;身份来自实际待部署文件。报告以 verification_status 单独记录站点生效校验,整体失败不改写单台真实文件推送事实;任务、尝试和接口保持失败,页面不再汇总为完成。本批本地测试不等于实机恢复通过;该校验仍位于文件部署事务之后,不具备据此宣称自动回滚的依据。
所有长耗时操作统一进入任务中心:
证书申请
证书续期
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 建设审计中心
状态: [~] 进行中
最新进度(2026-09-28): 已增加任务/项目范围和实际操作者快照,成员成功授予/撤销与审计同事务,审计失败回滚成员变化;失败请求审计、完整接口接入及本节列出的全部危险操作覆盖仍未完成。不能把成功审计专项通过标为整个审计中心完成。
页面建议:
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 主机身份验证。 - 每次修改前先检查当前分支、工作区和未提交变更。
- 每完成一个任务,补充验证命令和验收证据。
- 代码标识符使用英文,界面、注释、文档和用户提示使用中文。
- 每次测试区分本地、隔离环境、测试环境和生产验收结果。
本轮开发进度(2026-09-29 17:50)
按总体验收口径,当前仍为 P0-03 完成待复审;本轮只推进 P0-07 的项目审计读取权限,未将局部开发或自动化测试标记为复审通过。
- 审计日志路由改为登录后的项目资源路由,不再依赖全局管理员路由作为唯一入口。
- 新增项目审计读取仓储,在 SQL 查询中按实时账户状态、全局角色、项目成员角色和日志范围过滤。
- 普通项目成员仅可读取其拥有 `audit.read 能力项目的项目审计;不能读取其他项目或系统范围日志。
- 超级管理员和全局管理员保留系统审计读取能力;账户停用后不再返回日志。
- 新增撤权立即生效、跨项目隔离和全局管理员范围回归测试。
- 已通过 go test ./... 和 go vet ./...;这只证明本地自动化验证通过,不代表生产部署验收通过。
- [~] 任务读取、任务取消/重试、证书签发/导入/部署、DNS、SSH 及其他资源写入的完整项目权限链仍待开发。
- [!] PostgreSQL/MySQL 矩阵、浏览器、Linux/Windows 服务、远端 SSH、HTTPS/DNS/ACME 和生产验收仍未执行。
下一步:继续补齐任务与证书/部署权限链,完成开发阶段后再统一运行三库、浏览器和远端生产流程测试。
???????2026-09-29 18:38?
- ???????P0-03 ??????
- P0-07????? ?????????????????????????????????????????????????
- P0-07 ????????SSH?DNS??????????????????????????????????????? HTTPS/DNS/ACME ???
- ????????????????????????????????
本轮开发进度(2026-09-29 18:57)
按总体验收口径,当前仍为 P0-03 完成待复审;本轮仅推进 P0-07 项目资源权限开发,局部测试通过不代表生产部署验收通过。
[x]服务器新增、修改、删除接口已纳入认证后的项目资源路由。[x]服务器写入前按真实项目成员关系校验server.manage,更新和删除先读取当前账户可见的服务器。[x]已补充无项目权限新增、修改、删除服务器的拒绝回归测试,确认拒绝后原资源不变。[x]本批代码已提交并推送:服务器权限隔离提交747e897,拒绝回归测试提交fbb516e。[x]go test ./...、go vet ./...及 HTTP API 专项测试通过。[~]SSH 私钥归属与服务器引用隔离、DNS 账户项目使用权限、续期及其他任务写入权限仍在开发。[!]PostgreSQL/MySQL 矩阵、浏览器验收、Linux/Windows 生产部署、远端 SSH、HTTPS/DNS/ACME 和odacm.cn实机验收尚未执行。
下一步继续开发剩余资源权限链,完成开发阶段后再统一执行三数据库、浏览器、远端部署和生产流程测试。
本轮开发进度(2026-09-29 19:06)
总体验收位置继续保持 P0-03 完成待复审。本轮完成 P0-07 的 SSH 私钥项目归属开发,但尚未进行三数据库、浏览器、远端服务器或生产流程验收。
[x]SSH 私钥加密载荷和安全元数据记录项目归属;历史未记录归属的私钥兼容归入默认项目。[x]服务器新增、修改时按服务器项目校验 SSH 私钥引用,跨项目引用被拒绝。[x]自动生成的服务器 SSH 密钥写入服务器所属项目。[x]SSH 私钥列表、新增、删除接口按项目归属和server.manage权限过滤与校验。[x]已补充 SSH 私钥服务项目隔离专项测试;本批提交56c88c3已提交并推送。[~]DNS 账户项目归属与使用权限、续期任务及其他任务/资源写入权限仍在开发。[!]PostgreSQL/MySQL 矩阵、浏览器验收、Linux/Windows 生产部署、远端 SSH、HTTPS/DNS/ACME 和odacm.cn实机验收尚未执行。
下一步继续开发 DNS 账户及任务相关权限链,开发阶段结束后统一执行生产构建、部署和验收流程。
本轮进度(2026-09-29 19:30)
按总体验收口径仍为 P0-03 完成待复审。
[x]DNS 账户项目归属已加入配置、接口和管理页面。[x]DNS 凭据使用和项目归属修改已加入实时项目权限校验。[x]无权限修改配置的拒绝回归测试已补齐,确认原配置不被改变。[x]后端专项测试、静态检查、前端测试和生产构建通过。[~]P0-07 其他任务/证书/部署权限链继续开发。[!]三数据库、浏览器、远端服务器和生产部署验收仍未开始。
本轮开发进度(2026-09-29 19:50)
按用户要求,总体验收位置继续保持 P0-03 完成待复审;本轮完成“域名与服务器多对多部署关联”开发,不将本地测试结果视为生产验收通过。
[x]保留并验证域名绑定多台服务器的事务模型,单次替换只影响当前域名,不覆盖其他域名的服务器关联。[x]新增服务器反向读取关联域名的项目资源接口:GET /api/v1/servers/:id/domains。[x]服务器关联域名读取按实时账户状态、项目成员权限、服务器项目和域名项目同时过滤,未知或越权资源统一拒绝。[x]管理页面在服务器卡片展示当前托管的全部域名,解绑一个域名时不影响同服务器的其他域名。[x]新增多对多反向关联回归测试;后端go test ./...、go vet ./...、前端 230 项测试和前端生产构建通过。[~]P0-07 其他任务执行、证书部署、续期、审计完整覆盖及跨数据库矩阵仍待继续开发或复审。[!]浏览器清缓存验收、远端密码 SSH、HTTPS/DNS/ACME、Linux/Windows 服务和生产部署验收仍未执行。
下一步:继续完成开发阶段剩余权限与部署闭环,之后统一按生产流程编译、部署和测试;验收位置仍以 P0-03 为准。
最新进度追加(2026 年 9 月 29 日)
- 失败或取消的 certificate_issue 任务已增加手动重试闭环:新增 task.retry 权限和 POST /api/v1/tasks/:id/retry 接口;重试前重新校验项目、证书、部署及 DNS 凭据权限。
- 重试在事务内更新实际操作者、任务状态和尝试编号,创建新的运行中尝试,并复用首次证书申请的执行、错误脱敏和审计流程;并发重复重试仅允许一个请求成功。
- 已补充仓储、HTTP、权限、并发和任务状态回归测试;前端运行概览增加“重试任务”入口,按钮与“取消任务”按状态互斥显示。
- 当前候选验证通过:后端 go test ./...、go vet ./...,前端 230 项测试、前端生产构建和 git diff --check 均通过。
- 本轮提交 35260bc、aa587d3 已提交;本轮最后一次推送成功。
- [~] P0-07 仍为并行开发,任务重试子项完成待复审;三数据库矩阵、浏览器、SSH、远端部署、生产部署和完整权限联动仍未完成。
- [!] 当前总体验收位置仍为 P0-03 完成,待复审;本轮自动化测试和源码开发不构成生产部署验收通过。
本轮开发进度(2026-09-29)
总体验收位置继续保持 P0-03:完成,待复审,本轮仅推进 P0-07 的同步证书申请权限闭环,不将局部自动化测试结果视为生产部署验收通过。
[x]无任务仓储的同步证书申请路径已补齐项目资源可见性、certificate.manage、deployment.execute与 DNS 凭据使用权限校验。[x]已补充项目证书权限不足、DNS 凭据使用权限不足及权限拒绝后不调用证书工作流的回归测试。[x]当前候选后端go test ./...、go vet ./...通过;该结果仅代表本地自动化验证,不代表三数据库、浏览器、远端服务器或生产部署验收通过。[~]P0-07 其他资源写入权限、三数据库矩阵、浏览器清缓存验收、密码 SSH、远端部署及 Linux/Windows 生产服务仍需继续开发或复审。[!]总体验收不得升级,P0-03 仍为“完成,待复审”。
下一步继续执行前端回归与生产构建,再提交并推送本轮测试代码;完成开发阶段后,统一进行三数据库、浏览器、远端服务器和生产部署测试。
本轮开发进度(2026-09-29)
总体验收位置继续保持 P0-03:完成,待复审;本轮继续推进 P0-07 项目任务权限闭环,不将局部测试结果视为生产部署验收通过。
- 项目任务取消入口新增
task.cancel实时项目权限校验,权限拒绝时不会调用取消写入,也不会改变任务状态。 - 已补充缺少任务取消权限的 HTTP 回归测试;任务取消、工作流任务保护及成功证书任务回归测试通过。
- 已确认域名与服务器多对多部署关联仍按既有事务模型工作:一个域名可绑定多个服务器,一个服务器可关联多个域名,解绑单个域名不影响其他关联。
- [~] P0-07 仍需继续补齐续期、证书导入/部署、其他任务写入权限及三数据库矩阵。
- [!] 浏览器清缓存验收、密码 SSH、远端部署、HTTPS/DNS/ACME、Linux/Windows 服务和生产部署验收尚未执行。
下一步继续完成开发阶段剩余权限闭环,再统一执行生产构建、部署和验收;总体验收位置仍以 P0-03 为准。
本轮开发进度(2026-09-29,续)
总体验收位置继续保持 P0-03:完成,待复审;本轮完成手动批量续期入口的全局权限收紧,不将局部权限测试结果视为生产部署验收通过。
- 手动批量续期接口
/api/v1/renewal/run改为仅超级管理员可执行,普通管理员请求在进入续期工作流前返回 403。 - 已补充普通管理员不得触发续期工作流的 HTTP 回归测试;续期成功、错误脱敏及权限拒绝专项测试通过。
- 已复核服务器新增、修改、删除及域名—服务器多对多绑定:均按项目归属和写权限判定,绑定事务继续校验同项目、路径冲突和失败审计。
- 已复核单域名证书导入、部署、恢复、同步申请以及任务申请、重试、取消的项目权限链路;任务取消和手动批量续期的本轮缺口已补齐。
- [~] P0-07 仍需继续完成三数据库生产矩阵、浏览器清缓存验收、密码 SSH、远端部署、HTTPS/DNS/ACME、Linux/Windows 服务及最终生产门禁。
- [!] 总体验收不得升级,P0-03 仍为“完成,待复审”。
下一步完成开发阶段剩余非权限项后,再统一执行生产构建、部署和实机验收。
本轮开发进度(2026-09-29,续)
总体验收位置继续保持 P0-03:完成,待复审;本轮完成全局系统设置与 DNS 管理权限收紧,不将局部自动化测试结果视为生产部署验收通过。
- 普通管理员保留系统设置、DNS 服务商目录和 DNS 账户归属信息的读取能力。
- 系统设置修改、DNS API 在线测试和阿里云 DNS 权限检查统一限制为超级管理员。
- 前端普通管理员进入系统设置时改为只读,并隐藏全局续期执行按钮;后端继续保留权限拒绝保护。
- 新增后端全局配置权限回归测试和前端普通管理员操作保护测试;前端 230 项定向测试通过,DNS、设置和续期定向后端测试通过。
- [~] P0-07 仍需继续完成三数据库生产矩阵、浏览器清缓存验收、密码 SSH、远端部署、HTTPS/DNS/ACME、Linux/Windows 服务及最终生产门禁。
- [!] 总体验收不得升级,P0-03 仍为“完成,待复审”。
下一步继续审查剩余资源权限联动,开发阶段完成后统一执行生产构建、部署和实机验收。
22:44 统一回归进度(2026 年 9 月 29 日)
- 前端全量测试 231 项通过,后端
go test ./...与go vet ./...通过,前端生产构建通过。 - 全局系统设置、DNS 在线检查、阿里云 DNS 检查和手动批量续期的超级管理员边界已完成回归;普通管理员只读和拒绝路径已覆盖。
- 本轮测试前提修正已提交
853a7cd、93a190f,用于匹配新权限边界,不改变业务权限规则。 - [~] P0-07 仍需三数据库矩阵、浏览器、密码 SSH、远端部署和生产验收;其他历史待办不因本轮通过而关闭。
- [!] 总体验收仍为 P0-03 完成待复审,当前没有新增
[✓]复审通过项。
本轮开发进度(2026-09-29 23:21)
[x]P0-08 已完成敏感凭据禁用/启用、元数据状态返回、主密钥缺失保护和主密钥轮换;轮换失败时保留旧主密钥恢复路径。[x]已补充凭据生命周期、主密钥缺失和主密钥轮换后的重新打开读取测试;go test ./...与go vet ./...通过。[x]本轮代码已提交并推送:bac67b6。[~]P0-09 继续核对 SSH 主机指纹、密码登录后公钥部署及私钥回连验证;人工更新指纹审计和实机密码 SSH 验证仍待完成。[~]P0-10、P0-12 仍待继续开发审查和统一回归。[!]总体验收位置保持 P0-03 完成,待复审;本轮本地自动化测试通过不构成生产部署验收通过。
本轮开发进度(2026-09-29 23:58)
- P0-10 补齐任务状态模型:支持
partial_success、retry_wait、cancelling状态,任务更新、取消、重试等待、活动任务互斥和服务重启恢复均纳入统一状态范围。 - 批量部署一成一败时,HTTP 任务、任务尝试和审计记录统一保存为
partial_success,新增对应回归测试。 - 已通过
go test ./internal/repository ./internal/app ./internal/httpapi、go vet ./...和git diff --check。 - 本轮代码已提交本地提交
c9a82e6;已按要求尝试推送,但远程返回Authentication failed,因此不把远程推送结果作为验收依据。 - [~] P0-09、P0-10、P0-12 仍需继续开发审查;三数据库、浏览器清缓存、密码 SSH、远端部署和生产矩阵尚未统一执行。
- [!] 总体验收位置继续保持 P0-03 完成,待复审;本轮代码开发和自动化测试不构成生产部署验收通过。
进度追加(2026-09-29,本批结果)
本节追加本批实际结果;此前摘要中同一子项的“进行中/待验证”为历史状态,以本节为准。总体验收位置仍为 P0-03 完成,待复审,没有新增复审通过项。
本批需求确认:补齐活动任务对域名删除的保护,更新清单证据;继续先开发、后统一测试,不启动生产验收。
- 已完成,等待复审:P0-10 域名删除保护覆盖申请、校验、部署、导入、恢复任务的
queued、running、retry_wait、cancelling状态。 - 已完成,等待复审:新增 SQLite 仓储回归,验证部署任务处于
retry_wait、cancelling时返回域名忙错误;改为partial_success后不再阻止合法删除。保留原有运行中申请任务保护和审计失败回滚用例。 - 已完成,等待复审:本批仓储专项测试通过;接续的
go test ./...全量测试会话已确认退出码为 0;提交前差异检查通过。以上仅为本地自动化证据,不代表三数据库实库或生产验收。 - 已完成,等待复审:代码已提交并推送
96c8f44(完善活动任务删除保护),本批未进行远端部署、运行数据库清理或浏览器测试。 - 未开始:补全五种证书任务类型与四种活动状态的组合覆盖,以及拒绝删除时关联和审计不变的专项断言;本批新增用例未覆盖全部组合。
- 未开始:补全
failed、cancelled终态的专项删除用例;不得将本批success、partial_success路径外推为所有终态均已验证。 - [~] 进行中:P0-10 其余长任务取消、重试、幂等、崩溃恢复及 P0-12 备份恢复仍需继续整改,不标记整项完成。
- 未开始:开发收尾后,统一执行当前候选的生产构建、SQLite/PostgreSQL/MySQL 矩阵、浏览器清缓存、密码 SSH、远端部署和平台服务验收。
下一步优先补齐上述开发缺口和测试用例,再推进剩余任务链;原始整改范围不缩减,总体验收不得因本批测试通过而升级。
本轮开发进度(2026-09-29)
总体验收位置继续保持 P0-03:完成,待复审;本轮仅推进 P0-10 域名删除保护矩阵,不将专项测试结果视为整项复审或生产部署验收通过。
- 已完成,等待复审:域名删除保护已覆盖
certificate_issue、certificate_validate、certificate_deploy、certificate_import、certificate_restore五类证书任务,以及queued、running、retry_wait、cancelling四种活动状态。 - 已完成,等待复审:每个活动状态拒绝删除时,回归测试确认域名仍存在、当前域名与服务器关联仍存在;共享同一服务器的其他域名和服务器本身不受影响。
- 已完成,等待复审:补充
success、failed、cancelled、partial_success终态场景,确认活动任务清空后可以合法删除目标域名,并保留其他域名及服务器关联。 - 已完成,等待复审:
go test ./internal/repository与后端全量go test ./...均通过,git diff --check通过。 - 已完成,等待复审:本轮代码已提交并推送
14d5e53(补齐活动任务删除保护矩阵测试)。 - [~] 进行中:P0-10 其他长任务取消、重试、幂等、崩溃恢复及任务尝试记录仍需继续审查,不能因本批通过而关闭整项。
- 未开始:P0-12 备份恢复、三数据库生产矩阵、浏览器清缓存、密码 SSH、远端部署、HTTPS/DNS/ACME、Linux/Windows 服务和最终生产门禁。
- [!] 总体验收不得升级:仍处于 P0-03 完成,待复审,当前没有新增
[✓]复审通过项。
下一步继续审查 P0-10 剩余任务执行链和 P0-12 备份恢复;开发阶段完成后,再统一执行生产构建、部署和实机验收。
本轮开发进度(2026-09-29)
总体验收位置继续保持 P0-03:完成,待复审;本轮只推进 P0-10 任务幂等并发保护,不代表整项复审或生产部署验收通过。
- 已完成,等待复审:新增
task_idempotency数据表及 SQLite、PostgreSQL、MySQL 三套 0015 迁移;历史非空幂等键在迁移时建立登记。 - 已完成,等待复审:任务创建在同一事务登记幂等键,数据库层拒绝同一域名同一幂等键的并发重复任务,避免仅依赖单进程互斥锁。
- 已完成,等待复审:接口在并发创建冲突后回读已存在任务并返回重放结果,不再把可恢复的幂等冲突直接返回为普通创建失败。
- 已完成,等待复审:新增并发重复幂等键回归测试;
internal/repository、internal/database、internal/httpapi及后端全量go test ./...均通过,git diff --check通过。 - [~] 进行中:P0-10 其余长任务取消、重试、任务尝试记录、崩溃恢复,以及证书校验、导入、部署、恢复入口是否全部纳入任务中心仍需继续审查。
- 未开始:P0-12 备份恢复、三数据库实库矩阵、浏览器清缓存、密码 SSH、远端部署、HTTPS/DNS/ACME、Linux/Windows 服务和最终生产门禁。
- [!] 总体验收不得升级:当前仍为 P0-03 完成,待复审,本轮没有新增
[✓]复审通过项。
本轮开发进度(2026-09-29,P0-10 任务取消入口)
总体验收位置继续保持 P0-03:完成,待复审;本轮仅补齐任务取消入口与任务状态模型的开发缺口,不代表 P0-10 整项复审通过,也不代表生产部署验收通过。
- 已完成,等待复审:任务取消 HTTP 入口与仓储层状态范围统一,支持
queued、running、retry_wait、cancelling四种活动状态。 - 已完成,等待复审:新增
retry_wait、cancelling任务及任务尝试的取消回归测试,确认任务和当前任务尝试均转为cancelled。 - 已完成,等待复审:管理证书续期和自动续期任务仍由工作流控制,继续拒绝通过通用任务接口直接取消。
- 已完成,等待复审:定向 HTTP 测试、后端全量
go test ./...、go vet ./...和git diff --check均通过。 - [~] 进行中:P0-10 其余任务入口、三数据库实机矩阵、崩溃恢复复核和统一复审仍需继续执行。
- 未开始:P0-12 备份恢复、最终浏览器清缓存、密码 SSH、远端部署和生产门禁仍未完成。
- [!] 总体验收不得升级:当前仍为 P0-03 完成,待复审,本轮没有新增
[✓]复审通过项。
本轮下一步继续审查任务中心剩余入口和备份恢复;开发阶段收尾后,再统一执行生产构建、实机部署和验收。
本轮开发补充(2026-09-29)
总体验收位置继续保持 P0-03:完成,待复审;本轮完成服务重启恢复审计链开发,不代表 P0-10 整项复审或生产部署验收通过。
- 已完成,等待复审:服务重启恢复会为每个
queued、running、retry_wait、cancelling任务写入task_recovery失败审计,并保留任务、项目和创建人归属。 - 已完成,等待复审:恢复事务新增审计写入失败回滚保护;审计数量与实际恢复任务数量不一致时,任务、尝试和审计全部回滚。
- 已完成,等待复审:新增重复恢复与审计失败回滚测试;专项恢复测试、后端全量
go test ./...和git diff --check均通过。 - [~] 进行中:P0-10 的 DNS 验证、批量部署结果、其他入口任务事务链、重试幂等及跨数据库实机验证仍需继续审查。
- 未开始:P0-12 备份恢复、浏览器清缓存、密码 SSH、远端部署和最终生产门禁仍未执行。
- [!] 总体验收不得升级:当前仍处于 P0-03 完成,待复审,本轮没有新增
[✓]复审通过项。
最新执行摘要(2026-09-29 继续开发)
总体验收位置继续保持 P0-03 完成,待复审。本轮完成开发阶段的证书任务并发保护、DNS 验证阶段进度记录,以及域名与服务器双向多对多部署关联的回归核验;不代表生产部署验收通过。
- 已完成,等待复审:同一域名的同类活动证书任务增加仓储层并发保护,重复创建返回冲突,避免并发任务绕过入口检查。
- 已完成,等待复审:DNS 凭据权限验证、逐域名验证和证书申请阶段会同步任务阶段及中文进度信息。
- 已完成,等待复审:一个域名可关联多个部署服务器,一个服务器可关联多个域名;关联读取、解除单个关联、项目权限和共享路径冲突已有回归覆盖。
- 已完成,等待复审:后端多对多专项测试通过;前端 231 项测试全部通过,生产构建通过。
- [~] 进行中:P0-10 其余长任务取消、重试、崩溃恢复、实机数据库矩阵和统一复审仍需继续执行。
- 未开始:P0-12 备份恢复、浏览器清缓存、密码 SSH、远端部署和最终生产门禁仍未执行。
- [!] 总体验收不得升级:当前仍为 P0-03 完成,待复审,本轮没有新增
[✓]复审通过项。
最新验证摘要(2026-09-29)
总体验收位置继续保持 P0-03:完成,待复审。本轮复核域名与服务器双向多对多部署关系,并完成本地自动化回归;不代表生产部署验收通过。
- 已完成,等待复审:后端全量
go test ./...通过。 - 已完成,等待复审:前端 231 项测试全部通过。
- 已完成,等待复审:前端生产构建通过,
git diff --check通过。 - 已完成,等待复审:一个域名可关联多个服务器,一个服务器可关联多个域名;关联读取、单个解除、权限边界和共享路径冲突回归用例通过。
- [~] 进行中:三数据库实机矩阵、浏览器清缓存、密码 SSH、远端部署、HTTPS/DNS/ACME、服务重启恢复和最终生产门禁仍需继续执行。
- [!] 总体验收不得升级:当前仍为 P0-03 完成,待复审,没有新增
[✓]复审通过项。
最新实机部署与验收进度(2026-09-29)
总体验收位置继续保持 P0-03:完成,待复审;本轮完成 Linux amd64 候选包部署、HTTPS 健康检查、服务重启恢复和浏览器缓存清理后的页面复核,不将这些结果提前标记为最终生产验收通过。
- 已完成,等待复审:基于提交
4229f44构建的 Linux amd64 发布包已通过 SHA-256 校验并部署到授权测试服务器;发布清单确认source_dirty=false。 - 已完成,等待复审:
https://odacm.cn/healthz和https://odacm.cn/readyz均返回成功;Nginx 配置检查通过并处于运行状态。 - 已完成,等待复审:HTTPS 证书主题为
odacm.cn,SAN 包含odacm.cn,签发方为 Let's Encrypt;未关闭 TLS 校验。 - 已完成,等待复审:
Scert服务重启后保持active (running),重启后健康检查和就绪检查仍成功;重启后的日志未复现证书目录权限错误、路径所有者不可信或 HTTPS 证书读取失败。 - 已完成,等待复审:清理浏览器缓存后重新登录,首页显示当前用户、邮箱、服务状态、版本、SQLite 数据库和反向代理 HTTPS 等基本信息;中文显示正常。
- 已完成,等待复审:超级管理员访问
/api/v1/ssh-keys返回200和空列表,不再出现“无权管理此项目的服务器”;私钥内容未通过接口返回。 - 已完成,等待复审:域名配置页面的部署服务器选择支持多选,并明确显示一个域名可关联多个服务器、一个服务器可关联多个域名;5、10、15、30 条分页选项可见。
- [~] 进行中:远端数据库当前为空,现场只有一台可用测试服务器,尚未用虚构数据替代第二台真实服务器;双向多对多的生产数据关联、实际证书推送和回滚仍需具备真实目标后复核。
- [~] 进行中:三数据库生产矩阵、真实 DNS/ACME 申请、真实多服务器证书推送、最终生产门禁仍需继续执行。
- [!] 总体验收不得升级:当前仍为 P0-03 完成,待复审,本轮没有新增
[✓]复审通过项。
最新进度追加(2026-09-29,P0-10 任务取消入口)
总体验收位置继续保持 P0-03:完成,待复审;本轮仅补齐任务取消入口与状态模型的一致性,不代表整项复审通过或生产部署验收通过。
- 已完成,等待复审:任务取消入口支持
queued、running、retry_wait、cancelling四种活动状态。 - 已完成,等待复审:新增
retry_wait、cancelling任务及任务尝试取消回归,确认任务和活动尝试均进入cancelled。 - 已完成,等待复审:管理证书续期和自动续期任务仍由工作流控制,通用任务接口继续拒绝直接取消。
- 已完成,等待复审:定向测试、后端全量
go test ./...、go vet ./...和git diff --check均通过。 - [~] 进行中:P0-10 其余任务入口、跨数据库实机矩阵、崩溃恢复复核和统一复审仍需继续。
- 未开始:P0-12 备份恢复、最终浏览器清缓存、密码 SSH、远端部署和生产门禁仍未完成。
- [!] 总体验收不得升级,当前仍为 P0-03 完成,待复审,没有新增
[✓]复审通过项。
最新进度追加(2026-09-29,P0-10 通用取消入口状态一致性)
总体验收继续保持 P0-03:完成,待复审;本轮补齐通用仓储取消入口,不代表 P0-10 统一复审或生产部署验收通过。
- 已完成,等待复审:通用
CancelTask取消任务时,任务尝试同步覆盖queued、running、retry_wait、cancelling四种活动状态。 - 已完成,等待复审:新增四种活动状态的仓储回归测试,确认任务及任务尝试均进入
cancelled并记录完成时间。 - 已完成,等待复审:
go test ./...、go vet ./...、git diff --check均通过。 - [~] 进行中:P0-10 其他任务入口、跨数据库实机矩阵、崩溃恢复、重试幂等和统一复审仍需继续。
- 未开始:P0-12 备份恢复及最终生产门禁仍未完成。
- [!] 总体验收不得升级,当前仍为 P0-03:完成,待复审,没有新增
[✓]复审通过项。
最新进度追加(2026-09-29,P0-10 证书任务入口回归)
总体验收继续保持 P0-03:完成,待复审;本轮仅补齐证书导入、恢复、校验入口的任务中心回归约束,不代表 P0-10 统一复审或生产部署验收通过。
- 已完成,等待复审:
certificate_import、certificate_restore、certificate_validate入口均验证任务类型、任务尝试和终态审计记录。 - 已完成,等待复审:证书任务工作流在创建任务前拒绝空域名、空任务类型或阶段、零次执行和空执行器,避免无效任务落库。
- 已完成,等待复审:
go test ./internal/app ./internal/httpapi ./internal/repository、go vet ./internal/app ./internal/httpapi ./internal/repository和git diff --check均通过;代码提交并推送9741721。 - [~] 进行中:P0-10 其他任务入口、跨数据库实机矩阵、崩溃恢复、重试幂等和统一复审仍需继续。
- 未开始:P0-12 备份恢复及最终生产门禁仍未完成。
- [!] 总体验收不得升级,当前仍为 P0-03:完成,待复审,没有新增
[✓]复审通过项。
本轮开发进度(2026-09-29,P0-10 空部署目标防护)
总体验收位置继续保持 P0-03:完成,待复审;本轮仅继续完成 P0-10 批量部署边界防护,不代表 P0-10 统一复审通过或生产部署验收通过。
- 已完成,等待复审:批量部署目标为空时显式返回失败,不再把 0 台服务器错判为部署成功。
- 已完成,等待复审:证书工作流在域名未关联任何部署服务器时提前失败,不调用远程部署。
- 已完成:新增应用层与部署层回归测试;
go test ./...、go vet ./...和git diff --check均通过。 - [~] 进行中:P0-10 其余任务入口、失败回滚结果持久化、跨数据库矩阵、崩溃恢复与统一复审仍需继续。
- 未开始:P0-12 备份恢复、浏览器清缓存、密码 SSH、远端部署、真实 DNS/ACME 和最终生产门禁仍未完成。
- [!] 总体验收不得升级:当前仍为 P0-03:完成,待复审,本轮没有新增
[✓]复审通过项。
本轮开发进度(2026-09-30,P0-10 证书任务启动取消竞态)
总体验收位置继续保持 P0-03:完成,待复审;本轮仅修复证书申请任务启动阶段的取消竞态,不代表 P0-10 统一复审通过或生产部署验收通过。
- 已完成,等待复审:任务执行入口先注册可取消上下文和任务取消回调,取消发生在启动状态更新或启动审计期间时,不再继续调用证书申请执行器。
- 已完成,等待复审:启动取消后的接口返回 HTTP 409,父任务和任务尝试均保持
cancelled,不会被后续启动错误覆盖为failed。 - 已完成,等待复审:新增
TestTaskAPICancellationDuringStartupDoesNotExecuteCertificateHTTP 回归测试。 - 已完成:
go test ./...、go vet ./...、定向任务测试和git diff --check均通过;代码提交为415d504。 - [~] 进行中:P0-10 其他任务入口、DNS 验证、跨数据库实机矩阵、崩溃恢复、重试幂等和统一复审仍需继续。
- 未开始:P0-12 备份恢复、浏览器清缓存、密码 SSH、远端部署、真实 DNS/ACME 和最终生产门禁仍未完成。
- [!] 总体验收不得升级:当前仍为 P0-03:完成,待复审,没有新增
[✓]复审通过项;415d504推送时遇到Authentication failed,不作为测试失败依据。
本轮开发进度(2026-09-30,P0-10 DNS 验证取消与临时凭据回收)
总体验收位置继续保持 P0-03:完成,待复审;本轮仅补齐 DNS 在线验证的请求取消边界,不代表 P0-10 统一复审通过或生产部署验收通过。
- 已完成,等待复审:DNS 验证开始前检查请求上下文,已取消请求不会调用 DNS 服务商测试器,也不会写入临时凭据。
- 已完成,等待复审:DNS 测试成功但请求在凭据写入后取消时,回收临时凭据且不发布验证令牌,避免遗留可用的临时密钥。
- 已完成:新增两条 DNS 生命周期回归测试;后端
go test ./...、go vet ./...和git diff --check通过。 - [~] 进行中:P0-10 DNS 清理失败、令牌消费、任务链、跨数据库实机矩阵、崩溃恢复、重试幂等和统一复审仍需继续。
- 未开始:P0-12 备份恢复、浏览器清缓存、密码 SSH、远端部署、真实 HTTPS/DNS/ACME 和最终生产门禁仍未完成。
- [!] 总体验收不得升级:仍为 P0-03:完成,待复审,本轮没有新增
[✓]复审通过项。
本轮开发进度(2026-09-30,P0-10 DNS 临时凭据清理失败可重试)
总体验收位置继续保持 P0-03:完成,待复审;本轮仅修复 DNS 临时凭据删除失败后的重试边界,不代表 P0-10 统一复审通过或生产部署验收通过。
- 已完成,等待复审:单个 DNS 验证会话清理失败时保留令牌和临时凭据,后续可再次调用清理,不再形成不可恢复的残留状态。
- 已完成,等待复审:批量清理对删除失败的会话逐项恢复,成功删除的会话不恢复;受保护正式凭据仍只保留正式配置,不保留验证令牌。
- 已完成:新增单个和批量清理失败重试回归测试;后端
go test ./...、go vet ./...和git diff --check通过。 - [~] 进行中:DNS 过期清理、初始化回滚、令牌消费、其他 P0-10 任务链、跨数据库实机矩阵和统一复审。
- 未开始:P0-12 备份恢复、密码 SSH、远端部署、真实 HTTPS/DNS/ACME 和最终生产门禁。
- [!] 总体验收不得升级:仍为 P0-03:完成,待复审,本轮没有新增
[✓]复审通过项。
本轮开发进度(2026-09-30,P0-10 DNS 过期凭据清理重试)
总体验收位置继续保持 P0-03:完成,待复审;本轮仅补齐 DNS 验证令牌过期后的临时凭据清理重试,不代表 P0-10 统一复审通过或生产部署验收通过。
- 已完成,等待复审:过期验证会话对应的临时凭据删除失败时恢复原会话,保留后续清理入口,不再静默丢失。
- 已完成,等待复审:清理重试成功后过期会话和临时凭据同时移除,令牌仍保持过期不可用。
- 已完成:新增过期清理失败与重试回归测试;后端
go test ./...、go vet ./...和git diff --check通过。 - [~] 进行中:DNS 初始化回滚、令牌消费、其他 P0-10 任务链、跨数据库实机矩阵和统一复审。
- 未开始:P0-12 备份恢复、密码 SSH、远端部署、真实 HTTPS/DNS/ACME 和最终生产门禁。
- [!] 总体验收不得升级:仍为 P0-03:完成,待复审,本轮没有新增
[✓]复审通过项。
本轮开发进度(2026-09-30,P0-10 DNS 清理状态与容量边界)
总体验收位置继续保持 P0-03:完成,待复审;本轮仅补齐 DNS 临时凭据清理状态和并发容量边界,不代表 P0-10 统一复审通过或生产部署验收通过。
- 已完成,等待复审:保存失败或请求取消后的临时凭据删除失败时,记录待清理引用,并在后续验证、令牌解析或清理操作前自动重试。
- 已完成,等待复审:过期清理失败的会话和待清理状态均计入验证会话容量,避免并发新建验证超过容量上限。
- 已完成:新增保存失败重试、取消后重试和容量边界回归测试;
go test ./...、go test -race ./internal/setup、go vet ./...和git diff --check均通过。 - [~] 进行中:DNS 初始化回滚、令牌消费、其他 P0-10 任务链、跨数据库实机矩阵和统一复审。
- 未开始:P0-12、真实生产数据库清理与初始化、密码 SSH、远端多服务器部署、真实 HTTPS/DNS/ACME、Linux/Windows 服务运行验证和最终生产门禁。
- [!] 不得标记
[✓];总体验收仍为 P0-03:完成,待复审。
本轮开发进度(2026-09-30,P0-10 数据库验证取消与清理状态收敛)
总体验收位置继续保持 P0-03:完成,待复审。本轮完成数据库验证生命周期的取消边界、凭据清理串行化和单个令牌回收状态收敛;仅代表本地开发验证,不代表生产部署验收通过。
- 已完成,等待复审:数据库验证在凭据保存前、配置解析前、连接验证后和令牌生成前检查请求取消,取消请求不再发布验证令牌。
- 已完成,等待复审:临时凭据删除操作串行化,避免并发清理同一引用产生状态竞态。
- 已完成,等待复审:单个数据库令牌回收失败时恢复可重试会话,成功时移除过期状态;过期清理失败仍保持令牌不可用并保留内部重试状态。
- 已完成:
go test ./internal/bootstrap、go test -race ./internal/bootstrap通过;本轮提交6711c9b、14833be已推送。 - [~] 进行中:P0-10 初始化回滚、任务链、重试幂等、三数据库实机矩阵和统一复审仍需继续。
- 未开始:P0-12、真实生产数据库清理与初始化、密码 SSH、远端多服务器部署、真实 HTTPS/DNS/ACME、Linux/Windows 服务和最终生产门禁。
- [!] 不得标记
[✓];总体验收仍为 P0-03:完成,待复审。
本轮更新(2026-09-30,expiredCleaning 状态保护)
总体验收位置仍为 P0-03:完成,待复审。本轮完成数据库过期清理的执行状态和批量接管边界,仅作为本地开发和回归验证证据,不等同于生产验收通过。
- 过期会话开始清理时记录
expiredCleaning,避免单项清理与批量清理重复删除。 - 批量清理可接管失败后尚未执行的过期清理,但不接管正在执行的清理。
- 新增批量接管失败过期清理的回归测试,专项测试和竞态测试均通过。
- [~] P0-10 其他任务、跨数据库实机矩阵和统一复审继续进行中。
- 真实生产数据库、密码 SSH、远端部署、HTTPS/DNS、ACME、Linux/Windows 服务和最终生产门禁仍未完成。
- [!] 不新增
[✓],不以本地结果代替生产验收。
本轮开发进度(2026-09-30,P0-03 SSH 公钥部署阻塞修复)
总体验收继续保持 P0-03:完成,待复审,本轮仅完成 SSH 公钥部署实现修正与本地回归,不代表生产部署验收通过。
- 已完成,等待复审:修正公钥安装脚本的
fmt.Sprintf参数传递,确保实际编码公钥被写入远端。 - 已完成,等待复审:修正
authorized_keys追加逻辑,使用真实换行,不再写入字面量\\n。 - 已完成,等待复审:补充公钥读取失败、密码连接关闭失败的 SSH 阶段日志。
- 已完成:新增公钥安装脚本回归测试;
go test ./...、go test -race ./internal/deployment ./internal/httpapi ./internal/app、go vet ./...、go build ./...、git diff --check均通过。 - [~] 进行中:需重新构建正式候选包并部署到实机,通过现有失败服务器记录复测密码连接、公钥写入、私钥回连和状态持久化。
- 未开始:证书文件推送、Nginx 配置校验/重载、失败回滚、真实多服务器部署和最终生产门禁。
- [!] 第二台真实服务器仍不可用,不以虚构数据替代多服务器生产验收。
- [!] 总体验收不得升级:仍为 P0-03 完成,待复审,没有新增
[✓]。
本轮实机阻塞修复进度(2026-09-30,Ed25519 公钥编码)
总体验收继续保持 P0-03:完成,待复审。实机日志已确认前一轮 502 的真实根因,本轮完成代码修复和专项回归,尚未重新部署复测。
- 已定位:
AuthorizedPublicKey将ssh.Signer.PublicKey()错误再次传给ssh.NewPublicKey,导致ssh: unsupported key type ssh.ed25519PublicKey。 - 已完成,等待复审:改为直接使用
ssh.MarshalAuthorizedKey(signer.PublicKey())输出授权公钥。 - 已完成:新增 Ed25519 私钥授权公钥读取及指纹一致性测试;
go test ./internal/sshkey ./internal/deployment ./internal/httpapi通过。 - [~] 进行中:重新执行全量检查、构建 Linux amd64 候选包、部署并通过现有服务器记录复测。
- 未开始:证书推送、Nginx 配置校验/重载、失败回滚、真实多服务器部署和最终生产门禁。
- [!] 总体验收不得升级:仍为 P0-03 完成,待复审,没有新增
[✓]。
本轮实机复核进度(2026-09-30,双 Linux 候选服务健康检查)
本轮使用正式候选版本对两台 Linux 服务器进行只读健康复核。结果证明候选服务已安装并能正常提供内部管理接口,但还没有证明完整业务部署、证书推送、失败恢复和公网 DNS/ACME 流程通过,因此总体验收仍保持 P0-03:完成,待复审。
- 第一台
8.137.23.95(主机名ikun1)的Scert、nginx、Scert-storage.socket均为active,https://127.0.0.1:8443/readyz返回 HTTP200。 - 第二台
45.136.13.241(主机名yc)的Scert、nginx、Scert-storage.socket均为active,https://127.0.0.1:8443/readyz返回 HTTP200。 - 两台服务器均监听 Nginx
80/443;Scert 内部 HTTPS 端口为8443,未发现候选安装覆盖 Nginx 端口的情况。 - 通过
https://odacm.cn/读取到正式 Web 首页并返回 HTTP200;该结果只证明当前网络路径可读取页面,不证明域名公网 DNS 已指向本次两台测试服务器。 - [!] 当前
odacm.cn的本机 DNS 解析结果为198.18.0.109,与两台测试服务器地址不一致,不能据此记录公网 DNS、HTTPS/SNI 或 ACME 验收通过。 - [~] 继续进行:通过管理页面完成一个域名绑定多个服务器、一个服务器绑定多个域名、证书推送、Nginx 校验/重载、失败回滚及重试幂等的真实业务复核。
- 尚未完成:三数据库生产矩阵、Windows 服务实机、清库后首次初始化、真实公网 DNS/ACME、完整备份恢复和最终生产门禁。
- [!] 本轮不新增
[✓];自动化测试和健康检查不能替代完整生产部署验收。
代码整改进度追加(2026-09-30,多服务器 HTTPS 逐台校验)
- 已完成:证书部署工作流改为对每个关联服务器分别执行 HTTPS 基线校验、部署后证书指纹校验和恢复校验。
- 已完成:生产应用接入
RemoteVerifierForServer,使用目标服务器地址建立连接,同时保留域名 SNI、证书链和域名校验。 - 已完成:移除远端 HTTPS 校验中的
InsecureSkipVerify,改为使用受信任根证书进行严格 TLS 握手校验。 - 已完成:新增指定地址连接且保留域名 SNI 的回归测试;
go test ./...、go vet ./...、git diff --check已通过。 - 已完成:本轮代码提交为
840d48d、1164d50、5ef8e54,均已尝试推送远程仓库。 - [~] 进行中:重新构建并部署最新候选包,逐台复核两台服务器的真实 Nginx 站点、证书指纹和失败恢复。
- 未开始:三数据库生产矩阵、Windows 服务、公网 DNS/ACME、完整备份恢复及最终生产门禁。
- [!] 总体验收仍为 P0-03:完成,待复审,本轮不得新增
[✓]。
最新整改进度(2026-10-01)
- 已修复部署锁获取阶段的事务终态缺陷:取得部署锁失败、写入锁归属失败、保存锁阶段失败时,均会主动执行清理并写入最终事务状态。
- 已增加部署锁冲突回归测试,覆盖无锁持有和部分锁持有两种场景,验证已有锁不会被误删,本次锁会被清理,事务不会继续停留在
pending。 go test ./...已通过;本轮修复提交为1fad8db,回归测试提交为d315179。- [~] 尚未将包含本轮修复的最新候选包重新部署到两台 Linux 服务器,暂不能将实机恢复验收标记为通过。
- [!] 总体验收位置仍保持 P0-03:完成,待复审;三数据库、Windows 服务、公网 DNS/ACME、SMTP、备份恢复及完整生产门禁仍未完成。
下一步:构建最新 Linux amd64 候选包,使用密码 SSH 部署到 8.137.23.95 和 45.136.13.241,复核事务恢复、锁释放、双服务器证书推送、Nginx 校验及 HTTPS 访问。
最新实机复核(2026-10-01,最新候选包双服务器业务部署)
本轮使用密码 SSH 和正式管理接口复核,未创建辅助验收脚本,未修改远端数据库内容,未关闭 TLS 校验。Windows 环境按当前上线范围暂不处理。
- 最新候选包已安装到
8.137.23.95和45.136.13.241;两台服务器的Scert、Scert-storage.socket、Nginx 均为active。 - 两台服务器的
https://127.0.0.1:8443/readyz均返回 HTTP200。 - 已验证域名
scert-multi-20260930.apmmk.cn同时绑定两台服务器;服务器端反向查询也能看到该域名。 - 已验证服务器
45.136.13.241同时托管scert-20260930.apmmk.cn和scert-multi-20260930.apmmk.cn;满足一台服务器多个域名的关系模型要求。 - 使用最新候选服务重新执行证书部署,返回
total=2、success=2、failed=0,两台服务器均报告“证书部署、配置校验并 reload 成功”,verification_status=success。 - 两台服务器目标证书文件均已写入
/ssl/scert-multi-20260930.apmmk.cn/single/,证书 SHA-256 指纹均为43:06:3C:07:26:D3:43:62:B2:54:CE:28:B6:6D:7E:B6:37:E0:0B:16:5F:68:EC:0D:07:FC:ED:0D:F2:C6:4A:D2的同一证书(记录中保留冒号格式时以 OpenSSL 输出为准)。 - 两台服务器均执行
nginx -t成功,并通过本机 SNI HTTPS 请求返回 HTTP200。 - 已确认历史失败部署任务的失败结果持久化了各服务器状态和备份标识;最新候选服务启动后未再产生新的空归属
acquiring事务。 - [!] 现有历史
recovery_required事务仍缺少可信恢复证据,未直接改库伪造成功;相关现场保留人工核查状态。 - [~] 失败回滚的真实双服务器故障注入、任务级重试幂等、真实公网 DNS/ACME、Smail 系统账户 SMTP、三数据库矩阵和备份恢复仍需继续。
当前任务看板
- T1 主清单、执行清单和 Linux 实机记录已同步。
- T2 部署锁获取失败、空锁恢复和事务终态修复已完成并部署复核。
- T3 最新 Linux amd64 候选包双服务器安装及基础健康检查完成。
- T4 一域名多服务器、单服务器多域名关系和最新候选证书部署成功。
- [~] T5 真实失败回滚、重试幂等和历史恢复证据统一复审。
- [~] T6 公网 DNS/ACME、Smail SMTP、数据库生产矩阵和备份恢复。
- T7 最终生产门禁和上线结论。
总体验收位置仍为 P0-03:完成,待复审,本轮不得标记全量生产验收通过。
2026-10-01 反向代理端口收敛记录
本节补充当前部署要求,不覆盖历史记录。当前仅处理 Linux;本轮是保留数据的端口配置复核,不代表清库首次初始化验收。
- 已完成,等待复审:两台服务器通过密码 SSH 核验,Scert 均仅监听
127.0.0.1:8443;没有0.0.0.0:8443或[::]:8443监听。 - 已完成,等待复审:Nginx 对外监听
80/443,两台服务器的nginx -t均通过;未修改邮件及其他既有站点。 - 已完成,等待复审:第二台管理入口
odacm.cn的 HTTP 请求返回 301 并跳转 HTTPS,反代/readyz和回环上游/readyz均返回 200;上游启用 SNI 和证书校验。 - 已完成,等待复审:从第二台服务器按正常 DNS 访问管理域名,连接地址为
45.136.13.241,HTTPS 就绪检查返回 200;该结果不是独立外部客户端的完整生产验收。 - 已完成,等待复审:静态 systemd 模板已提交并推送
48d10fe;动态生成的 Linux unit 同步回环监听约束,并补充模板与生成器回归断言。 - 已完成,等待复审:本地后端
go test ./...、go vet ./...和git diff --check通过;本机 Windows 测试不代替 Linux 专属用例执行。 - [~] 进行中:使用干净提交构建 Linux 候选包,核对安装后的默认 unit 和动态生成配置,并补充 Linux 专属用例证据。
- [!] 暂缓或存在阻塞:历史恢复事务、双服务器真实失败回滚与重试幂等、Smail SMTP、数据库生产矩阵、备份恢复及最终生产门禁仍未完成。
端口边界:不新增公网业务端口,不为内部 8443 添加防火墙或安全组放行规则。SSH 运维端口与其他已有服务不属于本次端口收敛的修改范围。总体验收保持 P0-03:完成,待复审,不新增全量验收通过结论。
反向代理端口收敛复核结果(2026-10-01 16:35,北京时间)
- 已完成,等待复审:构建提交
51f7f3e55cee16d3b747bea30e0382fca4b25dd1,发布清单source_dirty=false;Linux 包位于build/release-20261001-loopback/Scert-20261001-V0.1.0-linux-amd64.tar.gz。 - 已完成,等待复审:包 SHA-256 为
2953f52d252194fda7865e1ee06e548204fdfdb818dab28ce10611087ba94443;两台服务器上传后校验一致,包内SHA256SUMS全部通过。 - 已完成,等待复审:两台服务器均经官方安装器安装成功并启动,安装退出码均为 0;主服务、存储 socket 和 Nginx 均正常,主服务重启计数为 0。
- 已完成,等待复审:两台服务器
/scert/scert的 SHA-256 均为beeade4c38e1be7f8af29b42d08896ca4f9efcb782c3f0a278f58fd0abc9baae,与本地候选二进制一致;已安装的主 unit 自身包含回环监听设置,不再仅依赖 drop-in。 - 已完成,等待复审:在第二台 Linux 上执行仓库
internal/servicehost的编译测试程序,9 项全部通过,覆盖动态 unit 和发布模板回环约束;没有创建辅助验收脚本,此结果仅作为代码回归证据。 - 已完成,等待复审:本地前端 241 项测试通过,正式前端及 Linux 后端构建通过。
- 已完成,等待复审:升级后两台 Scert 均监听
127.0.0.1:8443,Nginx 仍对外监听80/443,nginx -t通过;未改动已有站点或新增公网放行规则。 - 已完成,等待复审:第二台回环上游按管理域名 SNI 和系统 CA 严格验证返回 200;第一台作为独立客户端按正常 DNS 访问
https://odacm.cn/readyz返回 200,连接地址为45.136.13.241。 - 已完成,等待复审:两台服务器交叉探测对方公网
8443均超时;结合实际监听地址确认该内部端口未对外监听,未据此声称其他已有服务端口全部关闭。 - [!] 边界说明:第一台内部管理服务沿用原有 IP 自签证书,使用测试域名和系统 CA 直连会失败;通过密码 SSH 核查证书及 IP SAN 后,以该证书作为显式信任文件访问回环上游返回 200,未关闭 TLS 校验。这仅是该机内部健康核验,不是第一台管理入口的公网受信 TLS 验收。
- [!] 边界说明:本轮保留数据库,没有执行清库首次流程;未额外制作数据备份,官方安装器自身保留升级前发布文件以支持失败回退。完整生产验收仍为 P0-03:完成,待复审。
部署重试阻塞修复进度(2026-10-01 16:51,北京时间)
本节为本轮当前状态说明,前文保留为历史记录。P0-03 的局部代码复审状态不代表整个项目的生产验收状态;本轮上线范围仅 Linux,不将 Windows 列为阻塞。
- [✓] 复审通过:双机服务保持回环监听 127.0.0.1:8443,由 Nginx 80/443 对外提供服务;本轮未新增公网业务端口。
- 已完成,等待复审:通过正式部署接口制造第一台 Nginx 校验命令失败,两台部署报告整体失败,恢复报告为 success;随后已恢复正常校验命令,双机 nginx -t 通过。该验证使用同一证书重部署,不代表不同新旧证书切换验收。
- 已完成,等待复审:定位部署重试自冲突。HTTP 重试已创建尝试并标记原任务运行,但应用装配再次调用创建任务的工作流,将自身判为同类活动任务。新增真实应用登录与路由装配回归,修复前稳定返回 502。
- 已完成,等待复审:拆分普通部署与已有任务执行回调,普通部署继续创建任务,重试只执行原始证书部署流程,保留权限、审计、尝试记录与事务关联。
- 已完成,等待复审:定向回归验证唯一父任务、失败后成功的两次尝试、原任务事务关联、并发重试 409、成功后重复重试 409;后端 go test ./... 与 go vet ./... 通过。
- [~] 进行中:竞态测试、干净提交构建、双机升级和真实失败任务重试复核。当前尚未取得修复后的实机成功证据。
- [!] 暂缓或存在阻塞:历史恢复事务、Smail SMTP、数据库生产矩阵、备份恢复与最终清库首次部署门禁仍未闭环,不宣称生产验收通过,不给缺乏依据的完成百分比。
现场失败任务标识:683ef23a-c912-4f46-b2a6-3ec11908808e。本轮保留其数据用于复现与修复验证,不属于清库首次流程;没有直接改库伪造状态,也没有创建辅助验收脚本。
本轮补充回归:应用装配测试同时核对双服务器结果归属于第二次尝试,以及开始和成功审计的操作者关联;缺少已有任务执行器时返回 501,不回退到创建任务入口,不改变原任务状态。后端全量测试与 vet 再次通过;app/httpapi/repository 竞态测试通过,补充用例的定向竞态测试通过;前端 241 项通过。实机复测尚待新包部署。
部署重试双机实测复核结果(2026-10-01 17:02,北京时间)
以下为本轮最新结果,更新前述“尚待实机复测”的状态;只关闭部署重试自冲突这一子项,不等同于完成全部生产门禁。
- [✓] 复审通过:修复提交
302111c8af已推送,发布清单 source_dirty=false;使用正式构建流程生成 Linux 包,并通过官方安装器升级两台测试服务器,安装及启动退出码均为 0。 - [✓] 复审通过:发布包 build/release-20261001-deploy-retry/Scert-20261001-V0.1.0-linux-amd64.tar.gz,SHA-256 为 0ad94de03e625eb5fd6789e1fa84f8cad8298e2487876f55d34e36f14df7c878;双机上传和包内 SHA256SUMS 校验均通过。
- [✓] 复审通过:两台 /scert/scert 的 SHA-256 均为 393ae5a1cfaf8e4442ec30e47950f020e6ab47adb47af7fdca45a36eb9486ed2;Scert 与 Nginx active,NRestarts=0。
- [✓] 复审通过:复用真实失败任务 683ef23a-c912-4f46-b2a6-3ec11908808e,通过正式重试接口同时提交两次请求,一个返回 200、双服务器部署成功并通过 HTTPS 校验;另一个返回 409,没有执行第二次部署。成功后再重试返回 409。
- [✓] 复审通过:原任务保留,未产生嵌套父任务;尝试记录只从 3 增加到 4,第 4 次为 success,两台部署结果均关联该次尝试 b9ca3a51-30af-4d2c-9655-758509140f5e。旧失败记录保留用于追溯。
- [✓] 复审通过:只读核对数据库,首次失败的两个事务均为 rolled_back;本次两个事务 20261001-085936.117414575-5eecfbb86709、20261001-085940.320149826-09d1cf34f629 均为 committed;开始及成功审计均关联原任务和实际操作者。没有直接修改数据库状态。
- [✓] 复审通过:两台证书目录均无残留锁及 scert-tmp 文件;nginx -t 通过,证书和证书链文件哈希一致。第一台通过带 SNI 和主机名校验的 TLS 连接核对第二台站点证书指纹,仍与部署前同一正式证书一致。
- [✓] 复审通过:升级后 Scert 仍仅监听 127.0.0.1:8443,Nginx 通过 80/443 提供 Web 服务;管理入口前端与 readyz 返回 200,第二台回环上游仍使用系统 CA 严格校验。没有开放额外公网业务端口,未关闭 TLS 或 SSH 主机校验。
- [!] 仍需处理:历史事务 20260930-231310.231207974-5bf9d1e37542、20260930-231313.144123222-ce71b1dfe14e 的恢复证据字段为 null,服务保留 recovery_required 并拒绝自动接管;本轮没有伪造历史证据或强改终态。
- 未开始:本轮修复后的最终清库首次部署验收。Smail SMTP、数据库矩阵及备份恢复等其余上线门禁仍需按原任务清单验证。
本轮运维使用密码 SSH,没有新建辅助验收脚本;没有额外制作远端数据备份。安装器自行保留升级前发布文件,未擅自删除。以上域名、服务器及凭据仅用于测试,不作为产品验收规则。
最新有效进度补充(2026-10-01 17:15,北京时间:真实崩溃恢复与原任务重试)
本节更新前文同名“当前有效进度”中的过时状态;历史记录保留,不以旧快照覆盖本节。范围仅为 Linux,Windows 已按用户要求排除;原整改范围及其他上线门禁不缩减。详细现场证据见《Linux生产流程测试记录》同时间章节。
- [✓] P0-10 子项复审通过:真实部署期间,在两个目标事务均处于 reload_attempted/pending 时强制终止 Scert 主进程,systemd 自动重新拉起,两个事务均由启动恢复流程转为 rolled_back。没有直接修改数据库状态、删除锁或关闭 TLS 校验。
- [✓] P0-10 子项复审通过:恢复临时重载命令后,通过正式接口重试原中断任务 72f4222a-3706-419c-847c-0fcb55b436f2,双机部署及 HTTPS 校验成功。原任务保留,尝试次数由 1 增至 2;成功后再次重试返回 409。
- [✓] 恢复收尾:第一台重载命令已通过正式 API 恢复为 nginx -s reload;双机 Nginx 配置校验通过,证书目录无残留锁及临时文件。中断事务两条均 rolled_back,重试事务两条均 committed,审计关联原任务与实际操作者。
- [✓] 网络边界复核:双机 Scert 均仅监听 127.0.0.1:8443,Nginx 对外监听 80/443;第二台管理入口 HTTP 跳转 HTTPS,就绪检查正常。没有新增公网业务端口。
- [!] 测试环境边界:第一台测试站点本机严格 HTTPS 为 200,但第二台及本地电脑访问其公网 HTTPS 均握手失败;公网 HTTP 返回 403、Non-compliance ICP Filing 页面及阿里云拦截地址。此域名公网访问不能标记通过,不绕过拦截;第一台访问第二台的严格 HTTPS 为 200,证书指纹正确。
- [~] P0-10 整项仍进行中:本轮使用同一正式证书重部署,只证明该崩溃窗口下的恢复与重试,不证明不同新旧证书切换、锁归属或摘要不匹配、负向 HTTPS 恢复等其余场景全部通过。历史两条缺可信证据事务继续保留 recovery_required。
- 最终清库首次生产流程、Smail 系统 SMTP 与超级管理员密码重置、三数据库完整矩阵、备份恢复及升级回滚等仍须按原清单闭环。
结论:本轮关闭“真实进程崩溃恢复并复用原任务重试”子项,整体生产验收仍未通过,不给缺乏逐项统计依据的完成百分比。当前不再用 P0-03 单项状态代指全部生产阻塞。测试服务器和域名只是测试资源,不作为产品验收限制。
最新有效数据库整改进度(2026-10-01 17:45,北京时间)
本节沿用已确认需求并补充最新进度;前文各日期记录保留为历史证据,不再以旧版模式 14 推断当前代码状态。当前迁移最高版本为 18;只处理 Linux,不将本地交叉编译视作 Linux 原生构建。
- [✓] SQLite 正式 CLI 子项:修正写死模式 14 的过时断言,检查内嵌源码迁移序号及数据库历史连续性;增加幂等表、任务尝试、部署结果、部署事务与恢复证据的非空恢复样本。第二台 Linux 的历史备份、升级后备份两个恢复子场景通过,进程退出 0。测试修正提交
dbcdf05已推送。 - [✓] MySQL 8.0.46 仓储子项:第二台隔离实库的 9 个主测试、92 个子场景全部通过,无失败或跳过;涵盖项目、成员及资源相关仓储行为,不等同于完整 Web 验收。
- [✓] PostgreSQL 16.15 备份恢复子项:success、certificate、cancel、permission、inventory、authentication、tls 七场景通过,进程退出 0。六场景使用独立正式 CLI;cancel 是进程内确定性取消加真实数据库回退,不冒充独立 CLI 取消验收。
- [!] PostgreSQL 14.24 首次尝试:因工具版本低于当前备份入口要求而失败,保留失败记录;之后改用经官方签名索引验证的隔离 16.15 工具,不修改系统 APT 源、不安装全局 PostgreSQL 服务。
- [~] MySQL 中断恢复修复:原有实测发现模式 15~17 的四个中断边界因表已存在而失败。正在加入结构校验、可重入建表、事务内幂等回填与版本记录,并补充部分回填、数据冲突、字段和索引异常负向测试;新版实库回归尚在运行,不能提前标记通过。
- [✓] 网络边界只读复核:双机 Scert 仍只监听 127.0.0.1:8443,MySQL 只监听 127.0.0.1:3306;Web 由 Nginx 80/443 提供。没有增加公网服务端口。
- 待完成:MySQL 修复后的全量门禁、正式构建及双机部署;MySQL 5.7、本轮三库完整 Web 流程、系统发信及密码重置、备份恢复剩余矩阵、最终清库首次部署等。
本轮各实库测试创建自己的隔离数据库,未清空现有业务数据库;没有创建辅助验收脚本、没有额外备份远端业务数据。整体生产验收仍未放行。
最新有效复核结果(2026-10-01 18:02,北京时间)
本节更新 17:45 记录中的 MySQL 迁移修复及正式包部署状态;只关闭这些子项,不放行整体生产验收。
- [✓] MySQL 中断重入修复:提交
c6982ab827已推送。模式 15~17 恢复前校验字段、默认值、空值约束、排序规则、索引和存储引擎;模式 15 将幂等回填与版本标记放在同一事务,拒绝不一致历史,不覆盖冲突数据。 - [✓] Linux MySQL 8.0.46 最终实库回归:18 个部署迁移恢复与负向子场景、91 个完整迁移子场景,共 109 个子场景全部通过,无失败或跳过;临时单元已结束,退出 0。此前四个真实失败边界已复测通过。
- [✓] 本地质量门禁:后端 go test -count=1 ./...、go vet ./... 通过;database 和 cli 两个包竞态测试通过;前端 241 项通过。未启用的本地外部数据库测试不因此视为通过。
- [✓] 正式构建:仅生成 Linux 包,source_dirty=false,23 项 manifest 产物哈希与大小核对一致;此为交叉编译,不冒充 Linux 原生构建。归档 SHA-256 为 c075297e9f8f76f4ebb8fa28d43a4099ca853a3619212d5e7f51e78d4b0e9e4d。
- [✓] 新正式程序回归:SQLite 历史与升级后备份恢复两个子场景通过;PostgreSQL 16.15 七场景再次通过,独立 CLI 与进程内取消的范围区分不变。
- [✓] 双机部署:官方安装器安装及启动成功,主程序 SHA-256 均为 39b70a1a11148982baeb699bae749f7e2988a2fba02b001c0da740ba8b86f36d;服务 active、NRestarts=0,Nginx 校验成功,管理入口首页及 readyz 正常。双机仍为 Scert 回环监听、Nginx 80/443 对外,无新增公网业务端口。
- 停服保护现场:安装器先后拒绝主服务及目录 socket 尚未停止的操作;完整停服后重试成功,失败记录保留。这是停服升级,不宣称零中断。
- [~] MySQL 备份恢复剩余实库矩阵:已启动 scert-mysql-cli-20261001-1801,运行中,尚无最终结论。该套测试主要调用正式命令与维护实现的进程内入口,不能冒充全部独立发行 CLI 验收。
- [!] 其余限制仍有效:第一台测试域名公网平台拦截、两条无可信恢复证据历史事务、MySQL 5.7、完整 Web 流程、系统发信与密码重置、最终清库首次部署及其余原清单门禁尚未全部闭环。
最新接续状态与任务确认(2026-10-01 18:15,北京时间)
本节更新前文历史快照;旧章节中“当前有效”仅指其记录时点,不代表本轮状态。沿用原始四十四项需求,本次仅验收 Linux,Windows 不在本轮范围;不以历史 P0-03 局部状态代表全部生产门禁。
- 已完成,等待复审:MySQL 8.0.46 备份恢复矩阵单元
scert-mysql-cli-20261001-1801已真实结束,退出零;日志mysql-cli-release.log中二十一个主测试、一百三十六个子场景通过,零失败、零跳过。服务器日志开始时间为北京时间 18:01:26,结束为 18:06:49。 - 已完成,等待复审:本批矩阵覆盖备份快照、官方导入导出互操作、视图、触发器、例程、事件、权限和失败回退。主要调用进程内正式实现,不冒充独立发行程序全量验收。
- 已完成,等待复审:双机服务正常;Scert 仅监听回环 8443,MySQL 仅监听回环 3306;第二台的 33060 同样仅监听回环。Web 对外使用 Nginx 80/443,不新增公网业务端口,不修改第一台现有邮件端口。
- [!] 暂缓或存在阻塞:只读检查确认双机 Scert 均未启用 SMTP,主机、系统通知用户名、凭据引用均为空;缺少可用系统通知配置,不能宣称真实发信与邮件密码重置通过,不使用普通邮箱替代。
- [~] 进行中:复用仓库现有 MySQL 隔离实库测试,增加独立正式发行程序调用;保留严格 TLS、凭据加密存储、成功恢复及 SQL/证书失败回退断言,不创建辅助验收脚本,不接触业务数据库。
- 未开始:将新增测试编译到 Linux,在第二台隔离数据库中验证当前正式发行程序,再记录实际通过或失败结果。
- [!] 暂缓或存在阻塞:MySQL 5.7、完整三库 Web 流程、Linux 原生构建、其余部署负向场景、历史事务核查、系统发信与最终清库首次部署等仍未闭环;整体生产验收未放行。
MySQL 独立发行程序验收结果(2026-10-01 18:22,北京时间)
- 已完成,等待复审:新增仓库测试
TestMySQLRealReleaseBackupRestoreCommands,复用现有成功、SQL 失败、证书恢复失败场景;通过独立进程调用正式发行程序,不再依赖测试进程的 TLS 注册表。未创建辅助验收脚本。 - 已完成,等待复审:第二台 Linux 上单元
scert-mysql-release-cli-20261001-1818真实结束,退出零;三个子场景全部通过,耗时 33.85 秒,日志为/var/tmp/scert-db-matrix-20261001-1720/mysql-release-cli.log。 - 已完成,等待复审:验证对象为已部署候选同源的正式发行程序
/var/tmp/scert-release-mysql-reentry-20261001/scert,SHA-256 为39b70a1a11148982baeb699bae749f7e2988a2fba02b001c0da740ba8b86f36d;测试程序 SHA-256 为88ff0fec3f2ab9a14f89dd52f384a677ecfb450f679b077ec47e83649644eb09。 - 已完成,等待复审:隔离 MySQL 8.0.46 仅监听回环,使用严格 TLS;只在子进程中信任隔离证书,数据库密码通过加密凭据引用读取,未更改系统信任库。断言覆盖业务数据、审计数据、配置、主密钥、加密凭据、证书及失败后恢复前快照。
- 已完成,等待复审:本地后端全量测试、全量静态检查、CLI 竞态测试和差异检查通过。本地条件跳过不计实库通过;本批只修改测试,没有更换线上程序。
- [~] 进行中:准备在隔离目录使用固定工具链执行 Linux 原生正式构建,避免将 Windows 交叉编译包冒充 Linux 原生证据;不新增公网监听,不更改生产工具链或业务配置。
- [!] 暂缓或存在阻塞:上述三个独立 CLI 场景不代表全部数据库、Web 或生产流程验收通过;既有 SMTP 配置缺失、历史事务核查及其他未完成门禁继续保留。
Linux 原生构建与 Nginx 反代实机复核(2026-10-01 19:27,北京时间)
本节记录本轮使用正式 Linux 原生包的双机升级结果。对外入口遵循“只开放 Nginx 80/443,Scert 与数据库仅回环监听”的要求;本节不提升整体生产验收结论。
- 已完成,等待复审:第二台服务器使用 Go 1.26.6、Node.js 24.19.0 和 npm 11.17.0 完成 Linux amd64 原生构建;源码提交为
be6e2059f4ce949f7e1b6c0dacb3ff0bdea9ea52,source_dirty=false,构建清单和包内哈希校验一致。 - 已完成,等待复审:正式归档
Scert-20261001-V0.1.0-linux-amd64.tar.gzSHA-256 为08ba7769bf9225b88ea84f104720fb166b583a494737627523179c0527e83130;同一归档已通过官方安装器部署到两台服务器。 - 已完成,等待复审:第二台部署后
Scert.service、证书目录 socket 和 Nginx 均为 active;https://odacm.cn/readyz返回{"service":"scert","status":"ready"},首页正常,HTTP 自动跳转 HTTPS。 - 已完成,等待复审:第一台部署后
Scert.service、证书目录 socket 和 Nginx 均为 active;Scert 仅监听127.0.0.1:8443,MySQL 仅监听127.0.0.1:3306,第二台 MySQL X Protocol 仅监听127.0.0.1:33060。 - 已完成,等待复审:通过绕过本机代理的直连检查,双机
8443、3306、33060均无法从公网建立连接;项目 Web 入口仅通过 Nginx80/443提供。此前未绕过代理的端口探测结果为代理误报,不作为验收证据。 - 已完成,等待复审:升级过程中未停止 Nginx,未新增外部业务端口;安装器停服保护、安装事务和服务恢复均按正式流程执行。
- [!] 暂缓或存在阻塞:第一台现有 Nginx 站点使用既有业务域名和证书,公网 DNS
odacm.cn当前指向第二台;因此本轮不把第一台伪造为odacm.cn公网入口,也未替换第一台现有证书或站点配置。 - [!] 暂缓或存在阻塞:整体生产验收仍受 SMTP 实际发信、密码重置、完整 Web 矩阵、历史恢复事务核查、MySQL 5.7、DNS/ACME 和最终清库首次部署等门禁限制。
2026年10月1日安全边界与反代复核
本轮只记录非敏感实机证据,不记录任何认证信息。生产入口继续遵循“公网只使用 Nginx 80/443,Scert 和数据库只走回环地址”的约束。
- [✓] 双机 Scert 均绑定
127.0.0.1:8443,数据库只绑定回环地址,Nginx 配置测试通过。 - [✓] 第二台
odacm.cn的 HTTP 自动跳转和 HTTPS/readyz已在服务器本机通过严格 TLS 复核;第一台保留现有业务域名,不伪造为odacm.cn。 - [✓] 第二台邮件 Web 服务仍由现有 Nginx 站点反代,未把邮件服务端口作为 Scert 管理入口;本轮未停用、删除或改写 Smail/PMail 数据。
- [!] 历史恢复事务证据不足仍由产品保守策略拦截,不能人工改终态;总体生产验收不放行。
- [~] 安全入口子项完成待复审;三数据库 Web 流程、系统账户发信、密码重置、P0-10 实机负向矩阵和最终候选包仍待完成。
2026年10月1日 SSH 密码认证实机复核
- [✓] 已完成,等待复审:两条历史部署服务器记录已通过正式服务器编辑接口切换为 SSH 密码认证,历史 SSH 私钥引用已清空,主机指纹、TLS 证书路径和密码凭据引用保留。
- [✓] 已完成,等待复审:两台部署服务器均使用 SSH 密码完成证书推送、Nginx 配置校验和 reload;两个托管域名均完成双服务器部署,站点 HTTPS 校验通过。
- [✓] 已完成,等待复审:生产 API 不提供 SSH 私钥路由,历史 CLI
ssh-key命令仅返回停用提示,不读取配置、不读取凭据、不执行远程操作。 - [✓] 已完成,等待复审:远端孤立 SSH 私钥密文记录已清理为零;SSH 密码凭据、TLS 证书私钥和业务数据保持不变。
- [✓] 已完成,等待复审:Scert 重启后重新登录并再次部署证书成功;Scert 仅监听
127.0.0.1:8443,数据库仅监听回环地址,公网入口仍仅为 Nginx80/443。 - [!] 暂缓或存在阻塞:整体生产验收仍受系统账户真实发信、密码重置完整闭环、三数据库完整 Web 矩阵、历史恢复事务核查、DNS/ACME 负向矩阵和最终清库首次部署等门禁限制。
2026年10月1日 SSH 密钥登录彻底停用复核
本次安全修复仅记录非敏感代码、构建和测试结果,不记录服务器口令、RAM 密钥、数据库密码、令牌或其他认证信息。根据“SSH 私钥登录不允许出现,安全风险太大”的要求:
- 删除部署客户端的 SSH 公钥部署接口,不再提供远程
authorized_keys写入能力。 - 删除远程
PubkeyAuthentication配置、SSH 服务重载和公钥安装脚本,不再通过 Scert 开启公钥登录。 - 保留证书部署使用的 TLS 证书私钥文件路径;该路径仅用于证书业务,不用于 SSH 登录。
- 后端全量 Go 测试、Go 静态检查、部署专项测试、前端 241 项测试和前端生产构建全部通过。
- 提交
7264149已使用中文提交信息并推送远程仓库。 - [!] 总体生产验收仍未通过;清库后的首次生产初始化、Smail 系统账户发信、密码重置闭环、三数据库 Web 矩阵、P0-10 负向矩阵和最终候选包实机复核仍需继续。
当前总体验收状态仍为:P0-03:完成,等待复审。本次修复不代表生产验收通过。
2026-10-01 SSH 私钥登录能力安全复核
当前总体状态仍为:P0-03:完成,等待复审。本轮安全整改不代表生产部署整体验收通过。
- 后端服务器模型、SSH 连接工厂、服务器 API 和服务器仓储已收敛为密码认证,未保留 SSH 登录私钥字段或部署路径。
- 新增数据库迁移 19,清理历史服务器记录中的 SSH 私钥引用和 SSH 密钥状态;历史表结构迁移文件仅用于兼容既有数据库,不代表当前能力重新启用。
- 敏感信息存储测试已改为 DNS 凭据场景,不再创建或读取
secret://ssh/key-*测试引用。 - TLS 证书业务的
private_key_path、证书上传、部署和回滚逻辑保持不变;该字段只用于证书私钥,不用于 SSH 登录。 go test ./...、三个 Go 命令构建和git diff --check已通过。- [!] 仍未完成清库后的三数据库 Web 首次初始化、Smail 系统账户真实发信、验证码重置闭环、P0-10 负向矩阵、双机失败重试和最终生产门禁,因此不得标记为整体验收通过。
2026-10-01 SSH 密码认证候选包实机复核补充
本轮使用正式构建流程生成候选包 Scert-20261002-V0.1.0-linux-amd64.tar.gz,来源提交为 4620501,构建清单标记 source_dirty=false。仅使用密码 SSH 登录 45.136.13.241,未使用、生成、读取、上传或部署任何 SSH 私钥、公钥或 authorized_keys,未创建辅助验收脚本。
- 候选包 SHA-256 校验通过,安装器完整校验清单通过。
Scert、Scert-storage.socket、nginx安装后均为active。- Scert 仅监听
127.0.0.1:8443;MySQL 仅监听回环地址;对外管理入口仅为 Nginx80/443。 - Nginx 配置测试通过,未关闭上游 TLS 校验。
odacm.cn严格 HTTPS/readyz返回{"service":"scert","status":"ready"};HTTP 访问返回301并跳转到 HTTPS。- SSH 服务端复核为
pubkeyauthentication=no、passwordauthentication=yes、authenticationmethods=password。 - [!] 本轮未清空生产数据库,未执行 Smail 真实发信、密码重置完整闭环、三数据库 Web 首次初始化和 P0-10 全部负向矩阵,因此不能替代整体验收。
当前状态仍为 P0-03:完成,等待复审。
服务重启后复核补充
- 重启
Scert后服务保持active,等待启动初始化完成后,回环和公网域名严格 HTTPS/readyz均恢复为200。 - [!] 重启后前约数秒 Nginx 可能先于 Scert 上游恢复,期间一次请求返回
502;等待 Scert 完成 HTTPS 监听后恢复正常。本现象未通过关闭 TLS 校验或开放内部端口规避,需在最终生产门禁中决定是否需要无感切换改造。 - [!] 服务日志仍报告两条历史
recovery_required事务缺少可信恢复证据,系统按设计保留现场并拒绝自动接管;本轮未伪造证据、删除锁或修改历史事务。
2026-10-01 双机密码认证候选包部署复核
本轮只使用密码 SSH 完成双机升级,不使用、不生成、不读取、不上传或部署 SSH 私钥、公钥及 authorized_keys,也没有创建辅助验收脚本。TLS 证书业务中的证书私钥仍仅用于证书部署,不属于 SSH 登录凭据。
- 正式 Linux amd64 候选包
Scert-20261002-V0.1.0-linux-amd64.tar.gz已通过密码方式上传至8.137.23.95和45.136.13.241;包 SHA-256 为4090D6D614C359A4A6C7FF92634189AA136099324DD53B2D4557038954DCD33E,两台包内SHA256SUMS均通过。 - 两台服务器均通过官方
install-linux.sh停服升级,未强制覆盖运行中的服务;升级前发布文件由安装器保留,未额外创建远端备份。 - 两台
Scert、Scert-storage.socket和 Nginx 均为 active;Scert 仅监听127.0.0.1:8443,数据库仅绑定回环地址,公网项目入口保持 Nginx80/443。 - 两台
nginx -t均通过;第二台https://odacm.cn/readyz使用正常 TLS 校验返回 ready,未关闭 TLS 校验。第一台沿用独立的内部证书域名,使用odacm.cn探测出现证书名称不匹配,不能据此宣称第一台公网域名验收通过。 - 两台 SSH 服务端均复核为
pubkeyauthentication no、passwordauthentication yes、authenticationmethods password,SSH 私钥登录能力不允许出现。 - [!] 第二台启动日志继续报告两条历史
recovery_required事务缺少可信恢复证据;现场已保留,未删除锁、伪造证据或自动接管。 - [!] 第一台存在与 Scert 无关的既有
php-fpm-82.servicefailed 状态,不能混入 Scert 验收结论,需单独处理或明确排除。
本轮完成的是候选包部署和入口安全边界复核,不代表生产整体验收通过。清库后的三数据库 Web 首次初始化、Smail 系统账户真实发信、密码重置完整闭环、P0-10 负向矩阵、历史恢复证据核查及重启瞬间短暂 502 观察项仍未闭环。总体状态保持:P0-03:完成,等待复审。
2026-10-01 当前日期候选包复核补充
- 已按当前日期重新生成
Scert-20261001-V0.1.0-linux-amd64.tar.gz,避免使用未来日期命名的候选包;SHA-256 为56426C1BBCECA68B32D122E813A950D2EE345349F89C3178080BD313F6F77E8E。 - 当前候选包来源提交为
79bae3bf2b52720591279f78f5cbc340f82c4f36,source_dirty=false,Linux amd64、trimpath 和发布路径检查通过。 - 双机已重新部署当前日期候选包;两台
/scert/scertSHA-256 均为3422abf0a5fb2c0254fb382118424733534fd00548eba4930a0e90857cd874b8,scert-adminSHA-256 均为ee52d429a88b3942147e1acf67da3653f61e076c11d67bf3dd20b254b4321722。 - 当前生产路径验证仍只允许密码 SSH;SSH 私钥 API 测试返回 404,前端生产测试确认不挂载 SSH 私钥入口。历史
sshkey目录、迁移字段和未挂载样式未删除,不代表能力重新启用。 - 当前候选包第二台 Scert 重启后第 0、1 秒 Nginx 返回 502,第 2 秒恢复 200;服务、端口边界和 TLS 校验策略均未被放宽。
- [!] 短暂 502 仍是生产门禁阻塞项;历史
recovery_required事务和清库后的完整业务验收也未闭环。
总体状态继续保持:P0-03:完成,等待复审,不得标记为生产整体验收通过。
2026年10月1日 Linux上线加速复核(当前执行记录)
本节是本轮目标的当前状态入口,只记录非敏感证据,不记录服务器口令、RAM 密钥、数据库密码、授权码、令牌或其他认证信息。Windows 环境不在本轮范围;公网邮件服务端口属于既有 Smail 服务,不作为 Scert 管理入口处理。
本轮需求清单
- 仅验证 Linux 双机:第一台
8.137.23.95,第二台45.136.13.241。 - Scert 服务器连接只使用 SSH 密码认证,不使用或新增 SSH 私钥、公钥、
authorized_keys和密钥登录流程。 - Scert 公网入口只经 Nginx
80/443;Scert8443和数据库端口保持回环监听。 - 不创建辅助验收脚本,不把辅助脚本作为验收依据。
- [~] 继续完成 P0-10 负向恢复矩阵和历史
recovery_required事务的可信证据核查。 - [~] 继续完成 SQLite、MySQL、PostgreSQL 三数据库的清库后完整 Web 首次流程。
- [!] Smail 系统通知 SMTP 当前未启用且未配置系统账户凭据,真实发信、验证码密码重置和改密登录闭环暂不能完成;不得猜测 SMTP 主机、账号或授权码。
- [~] 完成最终 Linux 候选包部署、浏览器缓存清理和生产门禁复审。
- [!] Windows 环境明确排除,不纳入本轮上线验收。
当前任务状态
- [✓] T0:双机 Scert、存储通道、Nginx 均为 active;Scert 仅监听
127.0.0.1:8443,数据库仅监听回环地址,公网入口为 Nginx80/443。 - T1:MySQL 5.7 隔离实例和正式发行程序 CLI 实库测试已有通过证据,等待整体验收复审;不能替代 Web 首次流程。
- [~] T2:P0-10 剩余负向窗口、锁归属不匹配、文件摘要不匹配和历史恢复证据仍在核查。
- [~] T3:三数据库完整 Web 流程尚未取得全部直接实机证据。
- [!] T4:Smail 系统账户发信凭据尚未配置,密码重置邮件和新密码登录闭环阻塞。
- [~] T5:候选包已在双机运行并通过健康检查;最终清库后的首次流程、缓存清理和统一门禁复审仍未完成。
- [!] T6:Windows 不在本轮范围。
本轮直接证据
- [✓] 两台服务器均通过密码 SSH 复核:Scert、存储 socket、Nginx active。
- [✓] 两台服务器均保持 Scert
127.0.0.1:8443、MySQL 回环监听;odacm.cn的/readyz返回 200 ready,HTTP 入口跳转 HTTPS。 - [✓] 生产页面 DOM 未出现 SSH 私钥、公钥或
authorized_keys,服务器配置只提交密码和主机指纹;/api/v1/ssh-keys返回 404。 - [✓] 本地 Go 全量测试、前端 241 项测试和 Vite 生产构建通过;工作区无未提交代码修改。
- [!] 当前
/api/v1/settings显示通知 SMTP 未启用且系统通知凭据未配置;该项需要从 Smail 系统通知页面取得真实授权配置后才能继续。
当前总体验收结论
总体仍为 P0-03:完成,等待复审,不能因为 T0、T1 和 SSH 安全整改通过而宣布生产验收通过。上线前必须补齐 T2、T3、T4、T5 的直接证据;其中 T4 受 Smail 系统账户授权配置阻塞。
2026年10月2日最新候选包双机部署与 SSH 安全边界复核
本节只记录非敏感部署证据,不记录服务器口令、RAM 密钥、数据库密码、令牌、私钥、公钥或 authorized_keys。本轮没有创建辅助验收脚本,没有额外远端备份,Windows 不在本轮范围。
- 使用最新干净提交
cc3ac06生成 Linux amd64 候选包Scert-20261002-V0.1.0-linux-amd64.tar.gz;source_dirty=false、trimpath=true、local_path_check=passed,包内 21 个文件的SHA256SUMS全部通过,归档 SHA-256 为e4623636c5021a99998ce04f4680ebd3d107c02fb4a118a17875fc84c7faeefa。 - 通过密码 SSH 和已登记主机指纹将同一候选包部署到
8.137.23.95与45.136.13.241;两台/scert/scertSHA-256 均为f6fcad3a8d6d0cd47e90e0e0cc6b2ff9c9657082a63835aae0e1d72ab3500fb9。 - 两台 Scert、存储 socket、Nginx 均 active,Nginx 配置测试通过;Scert 仍只监听
127.0.0.1:8443,MySQL 3306/33060 仍为回环监听,公网入口只使用 Nginx 80/443。 - 从第一台服务器跨机探测第二台 8443、3306、33060 均超时;本机 Mihomo 虚拟网卡造成的 TCP 探测假阳性不作为验收依据。
- 第二台使用
odacm.cn严格 TLS 校验访问/readyz返回200和{"service":"scert","status":"ready"};HTTP 入口返回 301 并跳转 HTTPS。 /api/v1/ssh-keys返回 404;生产 Web 包未发现 SSH 私钥、公钥、authorized_keys、密钥生成或密钥登录管理入口。服务器部署全程未使用、生成、上传或部署 SSH 密钥材料。- 后端全量测试、
go vet和前端 241 项测试通过,工作区干净。 - [!] 第一台现有管理证书的 SAN 不包含
odacm.cn,严格 TLS 校验按预期拒绝;未使用-k绕过,也未关闭 Nginx 上游 TLS 校验。第一台域名证书更换仍是生产门禁阻塞项。 - [~] 启动早期 502 仍需按生产门禁继续评估:第二台本次安装后约第 2 秒探测出现 502,等待后恢复为严格 HTTPS 200;未开放 8443,也未绕过 Nginx。
当前总体状态仍为 P0-03:完成,等待复审,不能据此宣布生产整体验收通过。P0-10 负向恢复、三数据库清库后的完整 Web 流程、Smail 系统账户发信及密码重置闭环仍未完成。
2026年10月2日 SSH 登录密钥入口移除复核
本轮按安全要求收紧产品边界:SSH 登录只允许密码认证,不提供私钥、公钥、密钥生成、授权文件写入或密钥登录管理能力。HTTPS 证书部署所需的证书私钥路径仍保留,二者用途不同。
- 删除未注册的 SSH 密钥 CLI 入口文件,正式 CLI 不再包含密钥管理命令。
- 删除未注册的 SSH 密钥 HTTP 处理文件,生产路由继续不注册相关接口,
/api/v1/ssh-keys保持 404。 - 删除未引用的前端密钥弹窗文件和遗留样式,生产页面不提供密钥管理入口、命令或授权文件提示。
- 保留服务器主机指纹校验、SSH 密码字段和 HTTPS 证书私钥路径;没有把证书私钥误当作 SSH 登录凭据。
- 后端
go test ./...全部通过;前端 241 项测试全部通过;Vite 生产构建通过;git diff --check通过。 - [~] 需要将最新候选包按正式安装流程部署到双机,并复核页面和 API 后再进入最终生产验收。
本轮不删除历史数据库迁移文件和禁用兼容测试;它们只用于既有数据库升级和安全回归,不会启用 SSH 密钥能力。总体生产验收仍未通过,既有证书 SAN、启动早期 502、Smail 系统账户发信和三数据库完整 Web 流程仍是门禁项。
2026年10月2日12:35 新增安全整改进度
- 已核实两台 Scert 实际均为回环监听,第二台 Nginx 上游严格 TLS 校验保持开启。
- [~] 补齐 Linux 非 systemd 启动场景:默认监听及空值回退使用回环地址,实际非回环配置拒绝启动;关联回归及正式包部署尚未完成。
- [!] 原生正式构建被安全检查拦截,未部署未完成校验的产物;最新详细状态见《Scert整改任务执行清单》同日入口。
- [!] 维持生产未放行状态,不把本次端口检查或启动通知整改计为 P0-10、邮件及三数据库首次流程通过。