Smail/docs/证书托管续期策略验收.md
smail e05d1ff571
Some checks are pending
Security Checks / security (push) Waiting to run
统一证书热加载策略并记录内置续期验收边界
2026-09-18 15:08:37 +08:00

36 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 证书托管续期策略验收
## 确认的需求
- 项目自身托管:使用项目内置 ACME 申请及自动续期。
- 手动配置:不自动申请或续期,保留证书文件校验和热加载。
- 代理服务器托管:Smail 不自动申请或续期,邮件协议仍要求有效证书。
- 不新增外部部署或续期脚本依赖。
## 实现
`Config.EffectiveSSLType` 统一计算有效策略,明确的证书管理方式优先于旧 `SSLType` 字段。只有没有管理方式及存储模式的旧配置才使用原类型;未知管理方式禁止自动申请。网页 HTTPS 配置为反代模式时仍禁止项目申请。
初始化展示、域名范围、HTTP/DNS 挑战选择、定时续期及运行证书校验使用统一策略。自托管每 24 小时检查一次,剩余时间不足 30 天、证书无效或域名不匹配时尝试更新;手动及代理托管只检测本地证书变化。DNS 验证目前仍需要完成 TXT 记录设置,启用内置检查不等于 DNS 已实现无人值守。
前端三项选择明确显示自动续期状态。线上当前为 `custom`,不得因这次修改自动切换为 `project`。
## 验证状态
- [✓] Linux 服务器隔离执行 15 组策略组合及旧配置兼容测试。
- [✓] 手动与代理托管残留 HTTP/DNS 自动字段时,申请、续期均被拒绝,无 ACME 网络请求或配置改写。
- [✓] 定时任务在项目、手动、代理托管之间切换后读取最新策略。
- [✓] 前端相关 23 项回归通过,包括三种选项、初始化反代限制和 Vue 模板渲染。
- [✓] 前端生产构建及 Linux 主程序构建通过。
- [✓] 第一份候选在服务器空库、独立网络及挂载目录中完成初始化、Nginx HTTPS 上游、SMTP/IMAP/POP3、中文正文及附件收信、过载恢复验收。
- [~] 补充热加载校验后,重新构建及执行最终候选验收。
- [ ] 正式部署和浏览器业务验收。
第一份候选 SHA-256 为 `ec6b89a10eef5e7359e057c69d1afa3ff6ad8517ffe84b8e4c5dde9151943e21`,运行测试用时 39.91 秒,Smail 内存峰值 77,729,792 字节,Nginx 3,604,480 字节,交换空间为零。两个测试数据库完整性检查均为 `ok`,四个正式服务进程未变化,无新增 OOM,测试邮件未写入生产库。
## 服务器清理后的边界
2026-09-18 已停止并移除外部 `smail-certificate-renew` 服务与定时器、独立 Python 续期程序和 lego 工具。原数据与清理证据位于受保护目录 `/var/backups/smail-cleanup-20260918-bwQalZ`。这部分是此前清理结果,不代表本次真实 CA 续期验收。
仓库旧续期文档中的脚本与 timer 描述属于历史过程,不再是当前部署要求。当前手动证书保持不自动续期;尚未以真实 CA 完成项目自托管的生产续期,不将策略测试等同于真实换证成功。