记录管理证书热更新与Linux隔离验证结果

This commit is contained in:
xuans 2026-09-18 00:35:24 +08:00
parent 9074d83dc8
commit ca6211904f

View File

@ -1,6 +1,50 @@
# Linux 生产流程测试记录
## 当前结论:标准域名入口
## 当前进展:管理证书热更新
2026-09-18 接续优化,代码提交 `9074d83` 已推送;修改前检查点为 `230cbaa`。本节是续期基础能力的本地和 Linux 隔离验证,不是线上自动续期已完成。
### 已通过的组件检查
- [✓] HTTPS 服务使用不可变证书快照,新握手可加载更新后的证书,不需要重启 HTTP 服务。
- [✓] 新证书需通过私钥配对、有效期、管理地址覆盖和可信链校验;缺失文件、错误域名、过期、尚未生效及不可信链均拒绝,旧证书继续可用。
- [✓] 先持久化证书配置再切换内存;配置写入失败不修改内存证书和内存配置。
- [✓] 并发握手、无 SNI 的 IP 握手、显式回退和服务重启后读取新证书通过严格 TLS 验证。
- [✓] 管理证书申请保留旧版本目录,重复申请和初始化回退不会破坏先前引用的文件;普通业务证书仍保持原来的单当前版本规则。
- [✓] 修复新增证书解析步骤暴露的关闭顺序回归:已关闭服务再次启动优先返回关闭状态,不能重新监听。
热更新入口仅供进程内部调用,没有增加上传证书、任意路径或远程执行命令的 HTTP 接口。证书读取状态不再依赖业务域名列表,可供后续管理续期调度使用。
### 验证证据
Windows 工作区与提交内容一致,执行以下命令全部通过:
```sh
go test -p=2 ./...
go test -race ./internal/httpapi ./internal/certificate -run 'TestTLSCertificateRotation|TestManagementCertificatePreserves|TestShutdownBeforeStart' -count=1
go vet -p=2 ./internal/httpapi ./internal/certificate ./internal/app ./internal/bootstrap
git diff --cached --check
```
使用 Go 1.26.6 交叉编译两个 Linux 测试程序,上传前后 SHA-256 一致。远端文件均在 `/scert/acceptance-20260917-1044/`:
| 文件 | SHA-256 |
| --- | --- |
| `httpapi-tls-rotation-9074d83.test` | `a3859533e83f7502f711c172481ebfb5f812ef3282c14d3b547e7eaa4b2e377e` |
| `certificate-management-9074d83.test` | `bed93ab19132f762ab013d5ca58f9f4354dd4f187f86b8a25df5cb5e3b6bd1a0` |
两个独立 systemd 测试单元以 `Scert` 用户运行,内存上限 128 MiB、禁用 Swap、CPU 50%、最多 48 个任务,并开启私有临时目录、只读系统保护及禁止提权。TLS 更新与关闭生命周期测试、管理存储与业务存储回归全部退出零;峰值内存分别约 8.7 MiB 和 7.2 MiB。测试使用全新临时证书与配置,不访问真实 DNS、ACME 或业务数据库。
线上 Scert 未替换二进制、未重启,仍运行此前版本。只读复核时 Scert PID `579364`、Nginx `578671`、MySQL `549584`、8002 上的 Smail `574584` 均未变化,管理 HTTPS 就绪响应仍正常。未清空共享数据库,未删除既有补丁、构建产物或服务器文件。
### 继续验收的门槛
- [ ] 将管理证书纳入续期调度,并补齐持久化任务、审计及通知;当前仍不是自动续期闭环。
- [ ] 管理候选证书与业务存储隔离,防止同名业务证书操作清理管理入口引用的路径。
- [ ] 在不扩大 Scert 服务权限的前提下接通 Nginx 更新,完成双层 TLS 激活、就绪校验及失败回退。
- [ ] 从最新已验证源码构建候选版本,再进行 Linux 部署、真实目标机推送、通知送达、完整回退与容量验收。
## 已通过:标准域名入口
2026-09-18 00:01 起,按用户确认改为复用已开放的 80/443,通过 Nginx 域名站点转发。以下结果覆盖旧 8003/8004 方案的公网入口阻塞,不改变管理证书续期等尚未完成事项的结论。