5.8 KiB
初始化目录与代理校验
证书目录自动创建
第四步先校验证书目录,再验证实际写入。已有写权限时直接创建缺失目录;Linux 权限不足时调用随正式发布包安装的 Scert-storage.socket 和 Scert-storage.service。它们是正式产品组件,不是临时测试脚本。
- 主服务仍使用普通
Scert账户,不增加 root 身份、系统管理能力或整个文件系统的写权限。 - 目录服务仅监听
/run/scert-storage/prepare.sock,通过内核身份验证调用者;主服务也验证服务端为 root。 - 只接受证书路径,不接受 shell 命令、其他服务名称或任意配置位置。
- 默认批准
/ssl、/var/lib/scert/certificates,安装器的--certificate-dir可额外批准一个存储范围。输入其他路径不会自动扩大批准范围。 - 新目录由服务创建,最终目录归
Scert所有、权限为0700。不递归修改已有文件,不接管其他账户的目录。 - 特权操作的父目录必须仅 root 可写,逐层拒绝符号链接。已可写的证书子目录由普通账户直接创建,不需要特权操作。
- 通过 systemd 的
bind操作只开放所选目录,随后保存对应的ReadWritePaths,不重启初始化服务、不丢失在线验证会话。需要支持该操作的 systemd;不支持时明确失败,不降级放开权限。 - 安装器升级前须停止目录服务及 socket,正式主服务启动时会拉起 socket。无需手动创建用户填入的证书叶目录。
代理与证书信任
测试环境证书不受系统公共 CA 信任。当前代理管理模式要求管理域名及正式环境证书;测试环境和 IP 自签名管理入口应使用直接 HTTPS。前后端均在提交前拒绝不支持的组合,后端不会消耗验证令牌或申请证书。
正式代理模式申请候选证书后,先临时监听配置的上游 HTTPS 端口,再访问真实管理域名与代理公开端口。连续三次请求必须通过公共 TLS 验证,且返回本次随机生成的响应。代理返回 502、错误服务的 200、重定向、证书链不可信或端口不一致均不能提交初始化。
代理需要将管理入口路径转发到所选上游端口,包括 /.well-known/scert-setup/。预检不关闭 TLS 校验、不修改代理信任库、不使用环境代理、不强制解析到测试 IP。
预检通过后关闭临时监听,保存配置并启动正式应用;预检失败则保留初始化未完成状态,并回滚候选管理证书。该检查不能替代正式应用启动、续期、推送、重启及完整生产部署验收。
2026年9月27日实机复核
本轮为已有故障现场的恢复复测,没有清空数据库,不属于全新初始化验收。业务操作使用浏览器页面,SSH 仅用于部署、服务及文件核验;没有新增辅助验收脚本,也没有直接调用业务接口。
发布身份
- 已部署源码提交:
9ac222d6db61ce0daeecb846da42852778a1036c。 - 实机主程序 SHA-256:
c5f03a2c74a6a259ac07ab39d31239e267936a62b8f1d0de83bdef3f1c9549c1。 - 本节文档提交晚于部署提交,不表示重新构建或部署了不同的业务代码。
本轮确认结果
- [✓] 自动创建的证书目录
/ssl/scert-auto-0927为Scert:Scert 0700,父目录/ssl保持root:root 0755;持久授权仅包含所选目录,没有放开整个/ssl。 - [✓] 重启 Scert 后,目录权限及
ReadWritePaths保留,Scert、目录服务 socket 和 Nginx 均为运行状态;管理入口返回 HTTP 200,公共 TLS 校验结果为零。 - [✓] 重启后通过浏览器重新登录成功,首页仍显示托管域名正常及原有到期时间。
- [✓] Nginx 上游继续使用 HTTPS,并保留
proxy_ssl_verify on;未修改信任库或关闭证书校验。 - [✓] 上轮已保存证书但 SSH 推送失败,恢复服务器端口后,本轮仅点击“部署证书”,未重新导入。页面显示一台成功,域名从错误恢复正常。
- [✓] 第二台服务器实际 TLS 握手提供的证书序列号、到期时间和 SHA-256 指纹与导入证书一致;域名及证书链验证通过。此项为目标机实际 SNI/TLS 检查,不冒充公共 DNS 验收。
- [✓] 第二台已有六个服务的主进程和重启计数、Nginx 配置摘要、三组原业务证书及私钥摘要均与推送前基线一致;两个既有 HTTPS 站点仍返回 HTTP 200,TLS 校验结果为零。
- [✓] 按已获授权定点移除本轮安装器升级事务副本,未删除本地未跟踪文件、当前发布目录或其他业务文件。
本地回归范围
Windows 上重新运行 go test ./internal/bootstrap ./internal/certstorage ./internal/httpapi ./internal/admin,适用测试通过。目录服务的 Linux 专属测试在此平台不会执行,不能将此结果记为 Linux 权限测试通过。前端 npm test 共 141 项通过。
仍未完成的生产门槛
- 目录自动创建及代理模式防护代码已部署;完整首次生产初始化仍待实机复审。
- [!] 管理域名正式签发存在已记录的 ACME 限流:服务器日志时间为 2026年9月26日 14:18:53 UTC,
retry_after_seconds=73024。据此计算,最早重试时间为北京时间 2026年9月27日 18:35:57;此时间只代表该次响应的等待下限,不保证届时签发一定成功。本轮没有盲目重试签发。 - 全新正式签发、真实代理预检、初始化提交、正式应用启动和浏览器登录的连续链路尚未完成验收。
- 当前管理入口仍依赖此前人工恢复的正式证书,不能把入口可访问当作产品自动签发链路已通过。
测试环境与严格校验的代理管理入口不兼容时,产品会在提交前明确拒绝,要求选择正式环境或直接 HTTPS;不会静默切换环境、跳过验证或事后人工替换证书来宣称初始化成功。