This commit is contained in:
parent
eb5063a575
commit
8d808e736b
@ -4,18 +4,18 @@
|
||||
|
||||
## 结论与任务状态
|
||||
|
||||
已完成一轮全项目自动化测试、发现问题的修复、Linux 构建和云端部署,并完成核心账号安全及邮件协议实机验证。接续补齐了内置 AliDNS 挑战、生产续期入口和 Nginx 自动换证同步,新增修改完成受影响包回归。当前没有未解决的自动化测试失败;真实外部邮箱收件、外部客户端网络路径和自然到期长期调度等仍未验收,不能宣布整个项目最终验收通过。
|
||||
已完成全项目自动化测试、发现问题的修复、Linux 构建和云端部署,并完成核心账号安全及公网邮件协议实机验证。接续补齐了内置 AliDNS 挑战、生产续期入口和 Nginx 自动换证同步,包含这些修改的源码重新完成 66 包云端全量。公网收发发现的 IMAP Message-ID 搜索遗漏已修复,受影响包和部署后闭环通过。当前没有未解决的自动化测试失败;指定外部邮箱收件、自然到期长期调度等仍未验收,不能宣布整个项目最终验收通过。
|
||||
|
||||
- [✓] 已按授权备份、清理 Smail 相关环境,重新初始化测试数据库。接续测试复用本轮数据库,没有重复清库。
|
||||
- [✓] 修复测试发现的问题,相关包完成复测;最新程序已部署,云端和本地摘要一致。
|
||||
- [✓] 续期补全前的业务代码完成一次独立的 Linux 后端全量复测,66 个包均退出成功;测试程序摘要、逐包日志与汇总已交叉核对。后续续期及配置校验修改按受影响包复测,不混称最新版重新完成 66 包全量。
|
||||
- [✓] 含续期及配置校验修复的源码 `88649c8` 完成独立 Linux 后端全量,66 包成功、1971 个 PASS 标记、0 FAIL、5 SKIP。后续仅 IMAP 搜索修改,另行完成 list、IMAP 两包本地及云端回归和公网收发闭环。
|
||||
- [✓] 三类账号登录、TOTP 选择、提醒行为、邮件验证码跨场景消费、密码重置和客户端凭据撤销完成相应实机验证。
|
||||
- [✓] 项目部署包只包含三个程序与四个运行目录,没有加入 Python、部署或续期脚本。
|
||||
- [✓] 本轮临时 TOTP、外部邮箱绑定均已停用,账号密码保持用户指定值。
|
||||
- [✓] 实时 DNS 控制面、两个权威 DNS 和公共 DNS 均确认泛解析生效;邮件记录保留,DKIM 与运行密钥匹配。
|
||||
- [✓] Web 及已启用邮件 TLS、STARTTLS 入口返回同一张覆盖根域名的泛域名证书。
|
||||
- [!] 三个指定的 163 邮箱尚未完成真实收件和绑定验证。
|
||||
- [!] 当前客户端到公网邮件端口的连接路径未通过,不能声称外网邮件客户端收发通过。
|
||||
- [✓] 本机 Node 客户端通过公网域名完成 SMTP 认证发信、IMAP 按 Message-ID 查询及读取、POP3 读取同一邮件正文;三个入口均正常校验 TLS 信任链与域名。
|
||||
- [✓] 内置 AliDNS 在真实 staging CA 完成根域名及泛域名挑战、签发、记录清理;生产续期入口成功,配置变化自动触发 Nginx 同步与平滑重载。
|
||||
- [!] 尚未等待证书自然进入续期窗口,未完成内置定时调度的长期运行验收。
|
||||
- [!] Windows 提权 Named Pipe、依赖外部服务的插件业务等不在本轮 Linux 实机通过范围内。
|
||||
@ -35,16 +35,19 @@
|
||||
| `62ed09f` | 修复 Nginx 配置检查在只读沙箱中无法打开 PID 文件的问题。 |
|
||||
| `87cd28f` | DNS 清理改用受限凭据已有授权的记录列表接口,分页后精确核对 ID、名称、类型和值,只删除本轮创建的记录。 |
|
||||
| `6920bff` | 续期后上一张证书的引用格式校验不再依赖当前工作目录权限,实际证书路径、权限及密钥匹配校验保留。 |
|
||||
| `eb5063a` | 修复 IMAP `SEARCH HEADER Message-ID` 总是返回空的问题;支持完整标识、子串、大小写及旧邮件备用标识,回归验证用户隔离。 |
|
||||
|
||||
每轮代码修改前均保存中文 Git 基线并推送。一次文档基线推送出现认证失败,重试后成功。没有使用宽泛暂存或提交测试凭据。
|
||||
|
||||
## 自动化测试证据
|
||||
|
||||
前期云端原始日志根目录:`/var/tmp/smail-cloud-tests-20260920/`。最新一次全量复测位于 `/var/tmp/scf20/final-results/`;完整本地副本位于 `test-log/cloud-final-20260920/`。
|
||||
前期云端原始日志根目录:`/var/tmp/smail-cloud-tests-20260920/`。续期修复前全量位于 `/var/tmp/scf20/final-results/`,本地副本 `test-log/cloud-final-20260920/`。最新全量位于 `/var/tmp/scl20/results/`,本地证据与校验结果位于 `test-log/cloud-latest-20260920/`。
|
||||
|
||||
| 范围 | 结果 | 证据 |
|
||||
| --- | --- | --- |
|
||||
| Linux 后端单次全量 | 66 个包均退出成功,1955 个 PASS 标记、0 个 FAIL 标记、5 个 SKIP 标记 | `/var/tmp/scf20/final-results/summary.json`、`results.json` 及逐包日志 |
|
||||
| Linux 后端最新单次全量 | 66 个包均退出成功,1971 个 PASS 标记、0 个 FAIL 标记、5 个 SKIP 标记 | `/var/tmp/scl20/results/summary.json`、`results.json` 及逐包日志 |
|
||||
| 续期修复前单次全量 | 66 包成功,1955 PASS、0 FAIL、5 SKIP,作为历史结果保留 | `/var/tmp/scf20/final-results/` |
|
||||
| 公网搜索修复后的 Linux 回归 | list 9 个 PASS 标记、IMAP 40 个 PASS 标记,两包退出码 0、无失败或跳过 | `/var/tmp/smail-public-fix20/list.log`、`imap.log` |
|
||||
| 最新前端 | 200 项通过,0 失败、0 跳过 | 本地 `test-log/run-2026-09-19T21-11-24-986Z-25484/frontend.log` |
|
||||
| Windows 构建互斥与测试入口 | 4 项通过;Linux 专用项在 Windows 跳过 | 本地 `test-log/run-2026-09-19T16-13-15-667Z-3920/deployment.log` |
|
||||
| Linux 资源策略 | 15 项通过 | 云端 `resource-policy.log` |
|
||||
@ -55,7 +58,7 @@
|
||||
| 最终 Linux 配置包 | 非特权 nobody 用户执行,413 个 PASS 标记、0 FAIL、0 SKIP,退出码 0 | `/var/tmp/smail-tls-20260920/runtime/config-cwd-full.log` |
|
||||
| 最终 Linux 证书包 | 非特权 nobody 用户执行,50 个 PASS 标记、0 FAIL、4 SKIP,退出码 0 | 同目录 `ssl-cwd-full.log` |
|
||||
|
||||
上述 66 包全量运行时间为 03:58:42—04:05:54,systemd 记录耗时约 7 分 12 秒、内存峰值 256.5 MiB,结果为成功。66 个包来自同一源码快照,顺序执行,没有合并旧结果或以旧成功替换失败。PASS 标记包含父测试和子测试,不能表述为 1955 个独立案例;主包只有显式跳过的旧集成入口,退出成功不代表该入口已执行。
|
||||
历史 1955 PASS 的全量运行时间为 03:58:42—04:05:54,systemd 记录耗时约 7 分 12 秒、内存峰值 256.5 MiB,结果为成功。66 个包来自同一源码快照,顺序执行,没有合并旧结果或以旧成功替换失败。PASS 标记包含父测试和子测试,不能表述为同等数量的独立案例;主包只有显式跳过的旧集成入口,退出成功不代表该入口已执行。最新 1971 PASS 的独立全量及版本边界见末尾补充记录。
|
||||
|
||||
该次全量的测试源码快照为 `418435cb94f62a11e0f5de7fbd913a20f05f7c24`,与当时部署源码 `310ad01` 的后端、前端、对应测试、部署及插件目录无差异。实际测试子进程使用 `nobody`(UID/GID 65534),每包使用独立临时运行目录,没有指向 Smail 运行数据库。真实 MySQL、PostgreSQL 及跨库迁移集成用例全部执行通过。04:45 后新增续期实现及修复的验证范围为上表中的受影响包,最终部署源码为 `6920bff`。
|
||||
|
||||
@ -66,7 +69,7 @@
|
||||
- 证据归档:`test-log/cloud-final-20260920/final-evidence.tar.gz`。
|
||||
- 证据归档 SHA-256:`3675c8f5a61a9af5373d0a6dfe3b952e53a068259a321d41cda2d49f9ccf3fe5`。
|
||||
|
||||
此前 `latest-summary.json`、`latest-packages.json` 的 1953 个 PASS 是首轮全量与受影响包复测合并的历史统计,仍保留用于追溯;当前结论以本次 1955 个 PASS 的单次全量结果为准。
|
||||
此前 `latest-summary.json`、`latest-packages.json` 的 1953 个 PASS 是首轮全量与受影响包复测合并的历史统计,仍保留用于追溯。1955 和最新 1971 个 PASS 分别来自两次独立全量,不累加统计。
|
||||
|
||||
五个后端跳过项:
|
||||
|
||||
@ -120,7 +123,7 @@
|
||||
|
||||
真实证书签发者为 Let's Encrypt YR1,SAN 为 `solit.cn` 和 `*.solit.cn`,有效期从 2026-09-19 16:44:26 UTC 至 2026-12-18 16:44:25 UTC。服务器通过回环和公网地址连接 443、465、993、995,使用实际域名 SNI、系统 CA 进行校验,均通过 TLS 1.3。浏览器 HTTPS 页面可访问。
|
||||
|
||||
本机系统 DNS 将三个邮件子域名解析到 `198.18.2.x`;本机 Python 不论域名连接还是强制公网 IP,连 443 也发生 TLS EOF。现有证据只能说明客户端网络路径未通过,不能归因为云端证书错误,也不能声称公网邮件客户端收发正常。本轮没有修改本机网络设置。
|
||||
早期本机系统 DNS 将三个邮件子域名解析到 `198.18.2.x`;本机 Python 不论域名连接还是强制公网 IP,连 443 也发生 TLS EOF。该失败保留,不据此归因为云端证书错误。05:59 后 Node 使用默认信任链成功连接,06:21 完成真实公网收发,更新了此前“公网路径未通过”的结论。本机 DNS 仍返回现有网络路径地址,没有修改网络设置,也没有声称定位或修复了 Python TLS EOF 的原因。
|
||||
|
||||
Google 公共 DNS 已查到 DKIM;对 1.1.1.1 的 UDP 查询超时,未计为通过。本轮 ACME TXT 清理仅针对新建的两个记录 ID,核对剩余为零,既有记录保留。
|
||||
|
||||
@ -189,11 +192,11 @@ DKIM 公钥 DER SHA-256:`df9958f7e8c20c7d7f8735bb062f7bd7485bbee3bbd254930d7ae
|
||||
|
||||
云端原始证据:`/var/tmp/smail-tls-20260920/live/` 和 `runtime/`。本地归档:`test-log/tls-acceptance/evidence.tar.gz`,SHA-256 `4990b3502df57fe7af33593ed4c532c39cda208e30e7bce35e2026b493d3c6a2`,与云端一致。归档已下载,逐项核对 DNS 集合、失败/成功标记、数据库状态及程序摘要;核对结果为 `verified-evidence.json`,浏览器结果为 `browser-ssl-evidence.json`。
|
||||
|
||||
最终证书包的四项 SKIP 是需显式启用的真实云端入口;staging、生产续期及库存已在独立日志中执行,不因全包运行时跳过而冒充该次全包已执行真实签发。自然到期长期调度、外部邮箱和外部邮件客户端等剩余边界不变。
|
||||
该次证书包的四项 SKIP 是需显式启用的真实云端入口;staging、生产续期及库存已在独立日志中执行,不因全包运行时跳过而冒充该次全包已执行真实签发。自然到期长期调度、指定外部邮箱的边界保留;外部邮件客户端在后续 06:21 记录中通过。
|
||||
|
||||
## 最新交付与运行状态
|
||||
|
||||
源码提交:`6920bff39007c9a2305bb57c47bd27614e17a83c`。运行版本:`test-222651378aff`。后续仅文档和基线提交,不改变部署程序。
|
||||
最新部署源码:`eb5063a57522ea4a62524cbc529b2c298c88533a`。运行版本:`test-59ee0bb94881`。06:19:47 完成 IMAP 搜索修复的云端安装;此前 `6920bff`、`test-222651378aff` 为续期修复部署版本。
|
||||
|
||||
发布包:`out/release/Smail_linux_amd64.tar.gz`。文件结构:
|
||||
|
||||
@ -210,16 +213,16 @@ smail/
|
||||
|
||||
| 文件 | SHA-256 |
|
||||
| --- | --- |
|
||||
| 发布包 | `c93c621911fa70e5b98ce8853d9e4019c2289748a218c8ccc3d696ebc01fb991` |
|
||||
| smail | `e7b6524f148ef01922e628802020c9288ee7b0f0a384c0192c9bd6a988907b96` |
|
||||
| smail-admin | `1c78e5635d1e7fa4680db47d51d5293e2993b357627d56dbc633597f3f49996e` |
|
||||
| smail-config | `044d9d5b34901c4f6a756b9105ca181fd0767d8e664d222e23ee33ecec79816b` |
|
||||
| 发布包 | `375ea33ee460c80214c3277b9aee83d6992942ee5880f0ef5609951cf53749bc` |
|
||||
| smail | `ce8b903866ee0fe3953998538fde267a3ee8327d4e36d1618cdd76d3cac97073` |
|
||||
| smail-admin | `eb00f28595b699408c832887bda5076a7cbe805fa60e9117c5f510ae38e5b4cb` |
|
||||
| smail-config | `5049e4c8d1c5a882850f5ed88a53b891151c4b470dba48ec889a8a12d620a42b` |
|
||||
|
||||
本地构建收据:`out/release-receipts/Smail_linux_amd64.json`。三个云端文件均与收据一致。前端和内置插件构建完成;编辑器分块大于 500 KB 的既有构建提示仍存在,没有构建失败。
|
||||
|
||||
05:27:58 完成最后一次人工安装和启动。05:32 复核 Smail PID 为 `719778`,自动重启次数为 0,Nginx PID `578671`、active。回环 443(Web 和主域名 SNI)、8002、465、993、995 六次连接均通过系统信任链与主机名校验,使用 TLS 1.3,证书指纹一致。两个数据库 `integrity_check` 均为 `ok`;启用的 TOTP 数量为 0,未停用的外部邮箱绑定数量为 0。最后一次启动后的 systemd warning 级日志查询无记录。本机恢复 socket 保持 `0600 smail:smail`。
|
||||
05:27:58 的续期修复安装后,05:32 复核 Smail PID 为 `719778`,自动重启次数为 0,Nginx PID `578671`、active。回环 443(Web 和主域名 SNI)、8002、465、993、995 六次连接均通过系统信任链与主机名校验,使用 TLS 1.3,证书指纹一致。两个数据库 `integrity_check` 均为 `ok`;启用的 TOTP 数量为 0,未停用的外部邮箱绑定数量为 0。该次启动后的 systemd warning 级日志查询无记录。本机恢复 socket 保持 `0600 smail:smail`。06:19 的更新部署及其最终复核见末节。
|
||||
|
||||
最后一次部署前备份:`/var/backups/smail-full-test-20260920/pre-cwd-fix/`,含三个旧程序及停服时的配置、数据、证书归档。同级 `pre-auto-dns/`、`pre-renewal/`、`pre-rebind/` 保留前序状态。测试日志和测试二进制保留在 `/var/tmp/smail-cloud-tests-20260920/`、`/var/tmp/smail-tls-20260920/`,不属于运行依赖;没有擅自删除验收证据。FDM、Scert、MySQL 和 PostgreSQL 未因最后一次 Smail 更新而停启;Nginx 在真实换证时平滑重载,最终程序更新没有再次重载。
|
||||
最新部署前备份:`/var/backups/smail-full-test-20260920/pre-public-search/`,含三个旧程序及停服时的配置、数据、证书归档。同级 `pre-cwd-fix/`、`pre-auto-dns/`、`pre-renewal/`、`pre-rebind/` 保留前序状态。测试日志和测试二进制保留在各轮 `/var/tmp/` 测试目录,不属于运行依赖;没有擅自删除验收证据。FDM、Scert、MySQL 和 PostgreSQL 未因最后一次 Smail 更新而停启;Nginx 在真实换证时平滑重载,最终程序更新没有再次重载。
|
||||
|
||||
公网恢复入口已通过正式配置流程设置 `http.publicHttpsPort=443`;`/public-password-recovery` 跳转到 `https://web.solit.cn/rest/`,不再暴露内部 8002 端口,恢复页面返回 200。
|
||||
|
||||
@ -237,3 +240,44 @@ smail/
|
||||
- [✓] 发布压缩包重新列出目录,只有三个程序和四个运行目录,没有部署或续期脚本。
|
||||
|
||||
原始复核结果保存在本地 `test-log/tls-acceptance/final-audit.json`;辅助程序仅经 SSH 在内存中执行只读核验,不是服务器部署或运行依赖。浏览器复核时间为 `2026-09-20T05:51:46+08:00`。本节没有扩大先前的通过范围:三个外部邮箱的真实收件与绑定、外部邮件客户端网络路径、自然到期长期调度、Windows 提权 IPC 和外部插件业务仍需另行验收。
|
||||
|
||||
## 06:02—06:25 最新全量与公网邮件闭环
|
||||
|
||||
### 独立云端全量
|
||||
|
||||
源码 `88649c8d130d5dbc0325904285c208581da4d316` 的 66 个 Linux amd64 测试程序,在服务器 `/var/tmp/scl20` 独立执行,06:12:26 完成。systemd 记录墙钟耗时 6 分 10.700 秒、CPU 时间 3 分 1.976 秒、内存峰值 384 MiB,退出成功。所有测试子进程使用非特权 UID/GID 65534,每包独立临时目录;沙箱禁止访问运行目录、恢复 socket 目录和原始备份。MySQL/PostgreSQL 使用专用测试凭据,没有清空运行库。
|
||||
|
||||
结果为 66 包退出成功、1971 个 PASS 标记、0 FAIL、5 SKIP。前述五个跳过项不变。已逐包核对清单、二进制摘要、源码归档摘要、退出码及日志计数;真实 MySQL、PostgreSQL、两者间迁移及日志数据库集成均有实际 PASS 记录。
|
||||
|
||||
本地 `test-log/cloud-latest-20260920/verified.json` 保存复核结果;证据归档 `evidence.tar.gz` 的 SHA-256 为 `3118e86306a7a3212c02f332459a8a66fe63ca32f1dea9cb237e8e5520652c0c`。本次全量含之前续期及配置修复。后续 `eb5063a` 只修改 IMAP 搜索及其测试,完成两个受影响包回归,不表述为该提交又重跑 66 包。
|
||||
|
||||
### 公网路径与修复
|
||||
|
||||
05:59 本机 Node TLS 客户端对 Web 443、SMTP 465、IMAP 993、POP3 995 分别使用域名和公网 IP 加正确 SNI 连接,共 8 次成功,均启用默认信任链和域名校验,TLS 1.3,证书指纹与线上一致。证据:`test-log/public-tls-latest.json`。系统 DNS 仍为现有网络路径,未修改 DNS、代理或防火墙。
|
||||
|
||||
06:09 首次真实 SMTP 发送成功,但 IMAP 按 Message-ID 查询为空。只读数据库确认邮件已入收件箱,排除只入队未投递。源码 `matchesHeader` 缺少 `message-id` 分支;新增回归在旧代码失败,补齐分支后通过,覆盖完整值、大小写、子串、旧邮件备用标识和跨用户隔离。云端 list 包 9 个 PASS 标记、IMAP 包 40 个 PASS 标记,均无失败和跳过。
|
||||
|
||||
修复构建于 06:19:47 部署。测试客户端曾因缺少 Origin 头被同源保护拒绝,补齐后正常;首次正文校验未解码 MIME Base64 也曾失败,修正客户端解码后通过。这两项属于测试客户端问题,未削弱服务端保护或更改邮件内容。失败证据保留。
|
||||
|
||||
06:21:34—06:21:41,从 Windows 本机通过公网域名完成新邮件闭环,账号为本轮普通测试用户,邮件只投递到其自有站内邮箱:
|
||||
|
||||
| 步骤 | 耗时 | 结果 |
|
||||
| --- | ---: | --- |
|
||||
| 正式 API 密码登录 | 463 毫秒 | 成功 |
|
||||
| 临时开启协议并创建客户端授权 | 640 毫秒 | 成功 |
|
||||
| SMTP 465 认证及发信 | 3602 毫秒 | 认证成功,DATA 接受 |
|
||||
| IMAP 993 查询及读取 | 616 毫秒 | Message-ID 匹配,解码正文匹配 |
|
||||
| POP3 995 读取 | 840 毫秒 | 同一 Message-ID、正文匹配 |
|
||||
| 撤销后重试 SMTP 认证 | 538 毫秒 | 返回 535,旧授权不可用 |
|
||||
|
||||
三个邮件入口均使用 TLS 1.3、默认 CA 和域名验证,证书 DER SHA-256 为 `117d6f2b5b147ea7b98f84d44b22cd1580ffd489eddfdb680d8372f60bc6f2ba`。最终邮件 Message-ID:`<public-b5529d78-68a3-44f0-9cec-242d73a268c6@solit.cn>`。数据库同时存在发件成功记录和收件箱记录;没有删除测试邮件。
|
||||
|
||||
闭环证据:`test-log/public-mail-bdc12c69-9fc2-4d36-a1cf-2b1cb3eb34e0.json`。云端回归与安装证据本地副本:`test-log/public-mail-fix-build/evidence.tar.gz`,SHA-256 `bf2bb8e5be83a984ea12b671db300b3d67bdbdd80020a9a1ab6c757987b8822b`。临时授权只在内存使用,已撤销;测试协议开关全部恢复,测试会话已注销。本次是自有域内邮箱的公网客户端收发,不能替代 163 等外部邮件运营商的投递验收。
|
||||
|
||||
### 最新运行及浏览器复核
|
||||
|
||||
06:23:58 只读复核:Smail PID `723515`、active、自动重启 0,Nginx PID 仍为 `578671`,证书同步监听 active;三个程序摘要与收据完全一致,两库完整性均为 `ok`,有效客户端授权数量为 0,普通测试用户三个协议开关均关闭。本机恢复 socket 为 `0600 smail:smail`,本次启动后的 warning 日志无记录。六次回环证书验证全部通过。证据:`test-log/public-mail-fix-build/runtime-audit.json`。
|
||||
|
||||
06:22:51 实际浏览器页面 HTTPS 安全上下文正常,ping 200、301 毫秒,强制安全设置提示可见,无横向溢出。06:24:59 在同一正式浏览器会话中注销后,用用户指定的超级管理员账号密码重新登录:注销 146 毫秒,登录 317 毫秒,HTTP 200、业务错误码 0、角色 `super_admin`。未修改账号密码。06:29:45 清理该页 Cache Storage 并重新加载后,ping 200、290 毫秒,强制提示仍可见,无横向溢出,浏览器可见资源状态没有 4xx/5xx。
|
||||
|
||||
仍需另行完成:三个指定 163 邮箱真实收件及绑定、自然进入证书续期窗口后的长期调度、Windows 提权 Named Pipe、依赖外部服务的插件业务。本轮没有把这些项目标记为通过。
|
||||
|
||||
Loading…
Reference in New Issue
Block a user