38 lines
2.9 KiB
Markdown
38 lines
2.9 KiB
Markdown
# 反代跳转验收整改记录
|
||
|
||
## 问题与修复
|
||
|
||
2026 年 9 月 18 日 02:56 的远程核查发现,`test/deployment/verify_nginx_tls.py` 仅断言公网 80 跳转地址,对于应用 8001 只要求返回 308。因此线上仍跳转至内部 8002 时,整体输出仍为 `passed`。这属于验收覆盖缺口,不代表线上问题已经解决。
|
||
|
||
修改前提交并推送基线 `4c9490c`。本轮收紧验收:80 和 8001 均必须返回 308,且完整地址为 `https://mail.example.com/acceptance?x=1`,保留路径及查询参数;端口泄露、错误协议或域名、缺少 Location、错误状态均记录失败。失败明细写入 `failures`,整体 `status=failed`、进程退出码 1;仍完成其他传输检查以保留诊断证据。
|
||
|
||
本轮只修改验收工具,没有修改线上反代配置、应用或数据库,没有启动本机测试,没有暂停任何业务服务。
|
||
|
||
## 远程隔离回归
|
||
|
||
目录 `/var/tmp/smail-review-redirect-acceptance-20260918`。
|
||
|
||
- [✓] 新增 `test_nginx_redirect_acceptance.py` 六项用例通过,覆盖双端口正确跳转、内部端口泄露、公网入口错误、缺少 Location、错误状态、路径及查询参数丢失和错误域名。
|
||
- [✓] 单元 `smail-redirect-tests-20260918-0300.service` 成功结束,运行 478 毫秒,峰值 16.7 MiB、交换空间为零;持久日志为 `tests.txt`。
|
||
- [✓] 使用独立网络、只读系统、私有临时目录、64 MiB 内存硬上限,线上应用、管理 socket、Nginx 配置和正式 ACME 状态不可访问。模拟测试以 root 运行,不宣称非特权测试或真实部署验收。
|
||
|
||
本机与远程 SHA-256 一致:
|
||
|
||
- 检查器:`8d22762796747d52d63000e15a39a40cfb99e50b75cc1e833bf014ccc2fe6afd`。
|
||
- 回归文件:`4553ede3be564f3b2b9f59e743dd99bc0dc7acd3ff7e33acbfdafec814fec64b`。
|
||
|
||
## 线上负向验证
|
||
|
||
03:00:10(Asia/Shanghai)执行修正版只读检查,输出保留在 `live-result.json`,进程退出码为 1。
|
||
|
||
- [✓] 443、8002、465、993、995、25 和 587 的系统信任及证书一致性检查通过;25/587 明文阶段不暴露 AUTH。
|
||
- [✓] 公网 80 返回正确的公开 HTTPS 地址,未知 Host/SNI 拒绝,页面及探活接口可用。
|
||
- [!] 8001 实际返回 `https://mail.example.com:8002/acceptance?x=1`,严格检查正确报告 `public_redirect` 失败,整体不再误报通过。
|
||
|
||
这里只验证 TLS/STARTTLS,没有通过 587 发信,没有发送业务邮件。线上证书指纹仍为 `608fb55e3b8add3426a63f672debd86a58389a1a78d0961b9603b2e1abecae43`。收尾状态记录在 `services.txt`。
|
||
|
||
## 后续
|
||
|
||
- [ ] 按《完整候选反代隔离验收记录》对候选建立可回退备份并正式部署,通过正常配置入口设置公开端口,再运行严格检查。
|
||
- [!] 本次修复的是验收误判,线上跳转整改尚未生效;更不能据此宣称证书续期、浏览器业务或整体发布已经通过。
|