diff --git a/docs/Nginx反代与证书部署说明.md b/docs/Nginx反代与证书部署说明.md index cd9392d..c0dbbc5 100644 --- a/docs/Nginx反代与证书部署说明.md +++ b/docs/Nginx反代与证书部署说明.md @@ -1,8 +1,16 @@ # Nginx 反代与证书部署说明 -> 当前状态(2026-09-18):按用户要求,服务器外部 Python/lego 续期程序及 timer 已移除。项目自身托管使用内置续期;手动与代理托管不由 Smail 自动续期。下文的外部脚本与定时任务是历史记录,不再作为部署步骤。最新实现和验收边界见《证书托管续期策略验收》。 +> 当前状态(2026-09-20):外部 Python/lego 续期程序及 timer 已移除。项目自身托管使用内置 ACME 与 AliDNS,手动与代理托管不由 Smail 自动续期。下文 2026-09-17、18 的外部脚本与定时任务是历史记录,不作为部署步骤。最新实现和验收边界见《云端全项目测试报告》。 -## 最新整改状态 +## 当前证书同步方式 + +Smail 项目托管证书由程序自行签发、续期和事务保存。需要 Nginx 终止公网 TLS 时,使用仓库原生 systemd 模板 `deploy/systemd/smail-tls-sync.path`、`smail-tls-sync.service` 监听根配置提交,调用编译后的 `smail-config --root /opt/smail --export-project-tls /etc/nginx/smail/tls.pem`,再检查并平滑重载 Nginx。它们只同步项目已生成的证书,不执行 ACME 签发,也不引入 Python 或 shell 脚本运行依赖。发布包仍只有三个程序与四个运行目录。 + +同步目的目录由 root 管理,合并证书文件权限为 0600;Nginx 的 `ssl_certificate` 和 `ssl_certificate_key` 均引用该文件。后台为 `https://web.solit.cn`,上游仍为 `https://127.0.0.1:8002`,以 `web.solit.cn` SNI 和系统 CA 校验,不关闭 `proxy_ssl_verify`,不开放内部端口。 + +2026-09-20 真实换证已自动触发同步,Nginx 主进程未停止或重启。自然到期长期调度和其他站点长连接连续性未因此计为通过。下面各节保留历史拓扑、证书和故障记录。 + +## 2026-09-18 整改记录 远程主机 2026-09-18 00:22 已将 Nginx 证书路径迁移为 `/opt/smail/ssl/custom.crt`、`custom.key`,不再直接使用签发目录。只对 Smail 站点执行路径迁移和平滑重载,正式证书、应用程序、其他站点配置未改动。58 次双站 HTTPS 探测和预先建立的下载连接通过,七个 TLS/STARTTLS 入口再次通过。 diff --git a/docs/云端全项目测试报告.md b/docs/云端全项目测试报告.md index 31004ec..a8ca824 100644 --- a/docs/云端全项目测试报告.md +++ b/docs/云端全项目测试报告.md @@ -4,11 +4,11 @@ ## 结论与任务状态 -已完成全项目自动化测试、发现问题的修复、Linux 构建和云端部署,并完成核心账号安全及邮件协议实机验证。当前没有未解决的自动化测试失败,但仍有真实外部邮箱收件、客户端网络路径和无人值守续期等未通过项,不能据此宣布整个项目最终验收通过。 +已完成一轮全项目自动化测试、发现问题的修复、Linux 构建和云端部署,并完成核心账号安全及邮件协议实机验证。接续补齐了内置 AliDNS 挑战、生产续期入口和 Nginx 自动换证同步,新增修改完成受影响包回归。当前没有未解决的自动化测试失败;真实外部邮箱收件、外部客户端网络路径和自然到期长期调度等仍未验收,不能宣布整个项目最终验收通过。 - [✓] 已按授权备份、清理 Smail 相关环境,重新初始化测试数据库。接续测试复用本轮数据库,没有重复清库。 - [✓] 修复测试发现的问题,相关包完成复测;最新程序已部署,云端和本地摘要一致。 -- [✓] 最新业务代码完成一次独立的 Linux 后端全量复测,66 个包均退出成功;测试程序摘要、逐包日志与汇总已交叉核对。 +- [✓] 续期补全前的业务代码完成一次独立的 Linux 后端全量复测,66 个包均退出成功;测试程序摘要、逐包日志与汇总已交叉核对。后续续期及配置校验修改按受影响包复测,不混称最新版重新完成 66 包全量。 - [✓] 三类账号登录、TOTP 选择、提醒行为、邮件验证码跨场景消费、密码重置和客户端凭据撤销完成相应实机验证。 - [✓] 项目部署包只包含三个程序与四个运行目录,没有加入 Python、部署或续期脚本。 - [✓] 本轮临时 TOTP、外部邮箱绑定均已停用,账号密码保持用户指定值。 @@ -16,7 +16,8 @@ - [✓] Web 及已启用邮件 TLS、STARTTLS 入口返回同一张覆盖根域名的泛域名证书。 - [!] 三个指定的 163 邮箱尚未完成真实收件和绑定验证。 - [!] 当前客户端到公网邮件端口的连接路径未通过,不能声称外网邮件客户端收发通过。 -- [!] DNS 无人值守续期及 Nginx 换证同步未通过。 +- [✓] 内置 AliDNS 在真实 staging CA 完成根域名及泛域名挑战、签发、记录清理;生产续期入口成功,配置变化自动触发 Nginx 同步与平滑重载。 +- [!] 尚未等待证书自然进入续期窗口,未完成内置定时调度的长期运行验收。 - [!] Windows 提权 Named Pipe、依赖外部服务的插件业务等不在本轮 Linux 实机通过范围内。 ## 本轮修复 @@ -30,6 +31,10 @@ | `7aec99d` | 密码重置同步撤销旧客户端授权码,补充事务回滚及用户隔离回归。 | | `e0baf27` | 未认证 POP3 的 QUIT 立即回复并关闭连接,不提交邮箱更新。 | | `310ad01` | 停用的外部邮箱允许所属用户重新绑定、切换用途;清除旧验证状态并要求重新验证。停用同时失效绑定和变更挑战,保留跨用户隔离及主要邮箱数量限制。 | +| `747f79a`、`951fdc0`、`1790e1f` | 加入内置 AliDNS 凭据配置、受控证书导出与同步;修复只读沙箱权限检查,并拒绝硬链接私钥。 | +| `62ed09f` | 修复 Nginx 配置检查在只读沙箱中无法打开 PID 文件的问题。 | +| `87cd28f` | DNS 清理改用受限凭据已有授权的记录列表接口,分页后精确核对 ID、名称、类型和值,只删除本轮创建的记录。 | +| `6920bff` | 续期后上一张证书的引用格式校验不再依赖当前工作目录权限,实际证书路径、权限及密钥匹配校验保留。 | 每轮代码修改前均保存中文 Git 基线并推送。一次文档基线推送出现认证失败,重试后成功。没有使用宽泛暂存或提交测试凭据。 @@ -40,16 +45,19 @@ | 范围 | 结果 | 证据 | | --- | --- | --- | | Linux 后端单次全量 | 66 个包均退出成功,1955 个 PASS 标记、0 个 FAIL 标记、5 个 SKIP 标记 | `/var/tmp/scf20/final-results/summary.json`、`results.json` 及逐包日志 | -| 前端 | 198 项通过,0 失败、0 跳过 | 本地 `test-log/run-2026-09-19T17-30-34-658Z-19808/frontend.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` | | 实际服务资源只读预检 | 通过,无失败项;不替代业务验收 | 云端 `final-resource-check.json` | -| 最后一次修改的本地受影响包 | externalemail、controllers、recovery、verification 均通过 | 本地 `test-log/run-2026-09-19T19-10-20-850Z-26796/backend.log` | -| 最后一次修改的 Linux 复测 | externalemail、controllers 均 EXIT=0 | 云端 `rebind/externalemail.log`、`rebind/controllers.log` | +| 邮箱重新绑定修复的本地受影响包 | externalemail、controllers、recovery、verification 均通过 | 本地 `test-log/run-2026-09-19T19-10-20-850Z-26796/backend.log` | +| 邮箱重新绑定修复的 Linux 复测 | externalemail、controllers 均 EXIT=0 | 云端 `rebind/externalemail.log`、`rebind/controllers.log` | +| 续期及配置校验最终本地回归 | config、ssl、controllers、cron_server 通过;smail-config 编译通过,无测试文件 | 本地 `test-log/run-2026-09-19T21-23-32-547Z-34536/backend.log` | +| 最终 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` | -最新一次全量运行时间为 03:58:42—04:05:54,systemd 记录耗时约 7 分 12 秒、内存峰值 256.5 MiB,结果为成功。66 个包来自同一源码快照,顺序执行,没有合并旧结果或以旧成功替换失败。PASS 标记包含父测试和子测试,不能表述为 1955 个独立案例;主包只有显式跳过的旧集成入口,退出成功不代表该入口已执行。 +上述 66 包全量运行时间为 03:58:42—04:05:54,systemd 记录耗时约 7 分 12 秒、内存峰值 256.5 MiB,结果为成功。66 个包来自同一源码快照,顺序执行,没有合并旧结果或以旧成功替换失败。PASS 标记包含父测试和子测试,不能表述为 1955 个独立案例;主包只有显式跳过的旧集成入口,退出成功不代表该入口已执行。 -测试源码快照为 `418435cb94f62a11e0f5de7fbd913a20f05f7c24`,与部署源码 `310ad01` 的后端、前端、对应测试、部署及插件目录无差异,后续提交只有文档和基线记录。实际测试子进程使用 `nobody`(UID/GID 65534),每包使用独立临时运行目录,没有指向 Smail 运行数据库。真实 MySQL、PostgreSQL 及跨库迁移集成用例全部执行通过。 +该次全量的测试源码快照为 `418435cb94f62a11e0f5de7fbd913a20f05f7c24`,与当时部署源码 `310ad01` 的后端、前端、对应测试、部署及插件目录无差异。实际测试子进程使用 `nobody`(UID/GID 65534),每包使用独立临时运行目录,没有指向 Smail 运行数据库。真实 MySQL、PostgreSQL 及跨库迁移集成用例全部执行通过。04:45 后新增续期实现及修复的验证范围为上表中的受影响包,最终部署源码为 `6920bff`。 已将云端原始证据下载到本地,核对 66 个包的集合无遗漏或重复、退出码全部为 0、每个测试程序 SHA-256 与本地构建收据一致、逐包日志计数与汇总一致。源码归档摘要也与构建收据一致。 @@ -143,13 +151,49 @@ DKIM 公钥 DER SHA-256:`df9958f7e8c20c7d7f8735bb062f7bd7485bbee3bbd254930d7ae ### 仍未通过的项目 -项目托管启用内置续期检查,手动及代理托管不触发 ACME,策略测试已通过。但 DNS 挑战当前仍依赖人工 TXT,Nginx 配置也固定引用具体证书文件,没有自动同步换证引用和重载。**无人值守续期仍未完成**。服务器没有启用 Smail、Certbot 或 ACME 外部续期 timer,本轮没有新增外部部署或续期脚本。 +项目托管启用内置续期检查,手动及代理托管不触发 ACME,策略测试通过。04:45 后已补齐 AliDNS 自动管理 TXT 及 Nginx 自动同步,实测结果如下。尚未验证自然到期后的长期调度。服务器不依赖外部部署或续期脚本,没有新增外部 ACME 定时器。 指定的三个 163 地址尚未完成真实收件及绑定验证,本轮没有向这些外部收件箱发送测试邮件。后续需由各邮箱持有人接收真实验证码,再通过正式绑定流程完成验证。 +## 04:45—05:40 内置续期与换证补充验收 + +### 实际 DNS 挑战与记录保留 + +通过正式配置接口、超级管理员重新认证及临时 TOTP,保存 `management=project`、`challenge=dns`、`dnsProvider=alidns`、`dnsZone=solit.cn`。两项凭据加密保存在配置中,公开接口不回填密文或明文。测试后已通过正式接口停用临时 TOTP。 + +第一次 staging 签发后的清理失败,原因是受限凭据无权调用 `DescribeDomainRecordInfo`,返回 `Forbidden.RAM`。该轮明确计为失败,原始日志保留;核对并清理该轮两个记录 ID 后,改用已获授权的 `DescribeDomainRecords` 分页精确查询,无须扩大云账号权限。 + +修复后第二次 staging 实测 33.39 秒完成 `solit.cn` 和 `*.solit.cn` 的新挑战、签发及清理。staging 证书只保留在测试内存,没有安装至线上。修复前后的四次最终库存均与原始 16 条记录逐条一致,既有记录全部保留,本轮新增挑战没有残留。原本已有的一条 `_acme-challenge` TXT 同样保留,不将“本轮无残留”描述为所有挑战 TXT 数量为零。 + +### 生产续期与 Nginx 自动同步 + +显式云端测试调用项目生产入口 `GenSSL(true)`,3.90 秒成功保存新证书,配置代次 3→4。生产 CA 复用了有效授权并跳过 DNS 挑战,不能声称该轮重新验证 TXT;真实新挑战由前述 staging 独立证明。为避免两个配置管理器并发,此次测试入口执行前短暂停止 Smail,完成后自动恢复,因此不作为邮件连接连续性或自然到期调度证明。 + +配置更新自动触发 `smail-tls-sync.path`;该原生 systemd 单元调用程序本体 `smail-config --export-project-tls`,原子更新 `/etc/nginx/smail/tls.pem`,再执行 `nginx -t` 和平滑 reload。没有 Python 或 shell 续期程序。Nginx 主 PID 始终为 `578671`,未停止或重启;本轮没有验证重载期间其他站点的长期连接连续性。 + +同步程序只接受项目受控平铺证书,拒绝符号链接、硬链接及不安全权限;相同内容不重复写入,失败保留原文件。同步服务的只读沙箱仅放行 `/etc/nginx/smail`、Nginx 日志及 `/run/nginx.pid`。之前只读目录 chmod 和 Nginx PID 文件访问失败均已修复并实机复测,日志保留失败与成功过程。 + +当前证书覆盖 `solit.cn`、`*.solit.cn`,到期时间 `2026-12-18T20:12:03Z`;DER SHA-256 为 `117d6f2b5b147ea7b98f84d44b22cd1580ffd489eddfdb680d8372f60bc6f2ba`。项目新旧两套证书均保留,Nginx 合并文件为 `0600 root:root`。Nginx 仍使用 HTTPS 8002 上游、`web.solit.cn` SNI 和系统 CA 校验。 + +### 续期后配置加载问题 + +库存复查发现 `config.Init()` 报 `invalid SSL configuration`。在相同配置下,旧测试程序从 `/opt/smail`、`/tmp` 成功,从 `/root` 切换为 `smail` 用户后失败。原因是上一张证书引用的格式校验调用当前目录绝对路径解析,受到无权访问的工作目录影响,凭据和证书本身未损坏。 + +新增非特权 Linux 回归先证明旧代码失败,再改为纯引用格式检查,保留平铺名称、成对 token、路径边界及实际文件校验。修复后受限目录场景、路径逃逸/错配拒绝、配置及证书全包回归均通过;相同线上配置从 `/root` 以 `smail` 身份读取库存也成功。原始失败日志 `dns-final.log` 与 `runtime/cwd-before.log` 均保留。 + +### 浏览器与证据归档 + +05:31 实际桌面浏览器检查 SSL 配置页:项目托管、DNS 验证、阿里云自动续期、托管域名正确显示。两项凭据输入框为空并显示“已设置”,公开接口没有密钥内容。视口 1277×613,无横向溢出、无 HTTP 4xx/5xx 资源;配置读取 67 毫秒。检查后停用临时 TOTP,05:32 确认强制安全设置提示恢复,`/api/ping` 200、155 毫秒。这是单次观测,不代表负载测试。 + +05:39 使用当前正式浏览器会话注销后,以用户指定的 `xuans` 账号密码重新登录:注销 162 毫秒、登录 465 毫秒,HTTP 200、业务错误码 0;认证成功后仍要求至少启用一种安全验证。测试开始时在未注销的强制设置会话内直接调用登录接口,被安全设置中间件拒绝,不能把该拒绝误判为密码错误;随后按完整注销、登录流程验证通过。没有修改账号密码。 + +云端原始证据:`/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、生产续期及库存已在独立日志中执行,不因全包运行时跳过而冒充该次全包已执行真实签发。自然到期长期调度、外部邮箱和外部邮件客户端等剩余边界不变。 + ## 最新交付与运行状态 -源码提交:`310ad0136e9794ccb67e2c92aec05e8c66f151ad`。运行版本:`test-25fa5dcf9844`。后续仅文档提交,不改变部署程序。 +源码提交:`6920bff39007c9a2305bb57c47bd27614e17a83c`。运行版本:`test-222651378aff`。后续仅文档和基线提交,不改变部署程序。 发布包:`out/release/Smail_linux_amd64.tar.gz`。文件结构: @@ -166,19 +210,15 @@ smail/ | 文件 | SHA-256 | | --- | --- | -| 发布包 | `998a4a13514d0d2b5ef4a2708e1f27790b673af03fa390aa4f527e4f2e4da858` | -| smail | `ca525d4fe98973fea2cfb496b37b714fb3aad27999bf73f674bfa27f1358c98e` | -| smail-admin | `4af8a7c872d75fa48a967377e404815b0f4f7346c8c209cebb880ecb6039966f` | -| smail-config | `95372303efd7b16e54c21bc6190f13da7cbcd05faeeeaab12386ece555484bb4` | +| 发布包 | `c93c621911fa70e5b98ce8853d9e4019c2289748a218c8ccc3d696ebc01fb991` | +| smail | `e7b6524f148ef01922e628802020c9288ee7b0f0a384c0192c9bd6a988907b96` | +| smail-admin | `1c78e5635d1e7fa4680db47d51d5293e2993b357627d56dbc633597f3f49996e` | +| smail-config | `044d9d5b34901c4f6a756b9105ca181fd0767d8e664d222e23ee33ecec79816b` | 本地构建收据:`out/release-receipts/Smail_linux_amd64.json`。三个云端文件均与收据一致。前端和内置插件构建完成;编辑器分块大于 500 KB 的既有构建提示仍存在,没有构建失败。 -03:15:29 完成最后一次人工安装和启动。Smail PID 为 `712357`,自动重启次数为 0,Nginx active。HTTPS 返回 200,系统证书验证结果为 0,观测约 60 毫秒。最终两个数据库 `integrity_check` 均为 `ok`;启用的 TOTP 数量为 0,未停用的外部邮箱绑定数量为 0。最后一次启动后的 systemd warning 级日志查询无记录。 +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`。 -最后一次部署前备份:`/var/backups/smail-full-test-20260920/pre-rebind/`,含三个旧程序及配置、数据、证书归档。测试日志和测试二进制保留在 `/var/tmp/smail-cloud-tests-20260920/`,不属于运行依赖;没有擅自删除这些验收证据。FDM、Scert、Nginx、MySQL 和 PostgreSQL 的其他业务未因最后一次 Smail 更新而停启。 - -03:40 接续复核时,Smail 仍为 PID `712357`,自动重启次数为 0,Smail/Nginx 均 active;从最后一次启动至此的 warning 级 systemd 日志无记录。本机重置 socket 仍为 `0600 smail:smail`。接续只补充实测与文档,没有重新清库或变更运行程序。 - -04:09 全量复测结束后再次核验:Smail 仍为 PID `712357`,自动重启次数为 0,Smail/Nginx 均 active,最后一次启动以来的 warning 级 systemd 日志无记录,三个运行程序摘要仍与构建收据一致,重置 socket 权限不变。04:08:55 浏览器检查确认 HTTPS 为安全上下文,`/api/ping` 返回 200、耗时约 160 毫秒,超级管理员强制安全设置弹窗可见,资源性能记录中没有 HTTP 4xx/5xx。浏览器证据:`test-log/cloud-audit-20260920/final-browser-check.json`。这次检查不替代完整浏览器回归或外部邮箱收件验收。 +最后一次部署前备份:`/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 在真实换证时平滑重载,最终程序更新没有再次重载。 公网恢复入口已通过正式配置流程设置 `http.publicHttpsPort=443`;`/public-password-recovery` 跳转到 `https://web.solit.cn/rest/`,不再暴露内部 8002 端口,恢复页面返回 200。 diff --git a/docs/泛域名证书根域名覆盖.md b/docs/泛域名证书根域名覆盖.md index a12aec2..1302a22 100644 --- a/docs/泛域名证书根域名覆盖.md +++ b/docs/泛域名证书根域名覆盖.md @@ -8,7 +8,7 @@ Web 地址允许使用主域名或一级子域名;多级子域名、其他主 根域名与泛域名可能在同一 `_acme-challenge` 主机名生成不同的 TXT 值。页面展示全部记录,必须同时保留,不能把其中一条覆盖成另一条。清理一个挑战时只清理对应记录。 -旧的仅泛域名证书缺少主域名覆盖,项目托管模式的证书检查会识别为覆盖不足,进入既有续期流程。手动及代理托管仍不自动续期。DNS 模式仍需要完成 TXT 设置;本次功能不新增 DNS 服务商凭据或外部续期脚本。 +旧的仅泛域名证书缺少主域名覆盖,项目托管模式的证书检查会识别为覆盖不足,进入既有续期流程。手动及代理托管仍不自动续期。DNS 手动模式需要自行设置 TXT;2026-09-20 后续实现加入了内置 AliDNS 自动管理及加密凭据配置,没有新增外部续期脚本。 ## 验证 @@ -28,4 +28,4 @@ Web 地址允许使用主域名或一级子域名;多级子域名、其他主 阿里云控制面及两个权威 DNS、Google 公共 DNS 均确认 `*` 泛解析生效;MX、SPF、DKIM、DMARC 保留,Smail 的 DKIM 公钥与运行密钥匹配。原始证据见《云端全项目测试报告》的接续实测表。 -DNS 挑战仍需人工设置 TXT;Nginx 当前引用具体版本的证书文件,项目换证后也没有自动同步引用和重载。因此真实签发已通过,无人值守续期闭环尚未通过。详见《云端全项目测试报告》。 +05:10 补充:内置 AliDNS 已完成真实 staging 的新挑战与清理,生产续期入口成功,配置变化自动触发 Nginx 原子导出及平滑重载。新证书覆盖范围不变,到期时间为 `2026-12-18T20:12:03Z`,DER SHA-256 为 `117d6f2b5b147ea7b98f84d44b22cd1580ffd489eddfdb680d8372f60bc6f2ba`。生产 CA 复用已有授权,不能将本轮生产签发当作新 DNS 挑战证据;自然到期长期调度尚未验证。详见《云端全项目测试报告》。 diff --git a/docs/证书托管续期策略验收.md b/docs/证书托管续期策略验收.md index 6e53fd8..43d9947 100644 --- a/docs/证书托管续期策略验收.md +++ b/docs/证书托管续期策略验收.md @@ -1,5 +1,7 @@ # 证书托管续期策略验收 +> 2026-09-20 更新:当前云端已使用项目托管、内置 AliDNS 自动挑战及 Nginx 原生 systemd 换证同步。真实 staging 新挑战、生产续期入口和自动同步均通过,仍未完成自然到期的长期调度验收。生产 CA 复用已有授权,未在该轮重新执行挑战。最新源码、实测证据和边界见《云端全项目测试报告》。下文 2026-09-18 的模式与未完成项保留为历史记录。 + ## 确认的需求 - 项目自身托管:使用项目内置 ACME 申请及自动续期。