Scert/doc/SSL服务程序需求确认文档.md

55 KiB
Raw Blame History

SSL 服务程序需求确认文档

  • 文档状态:已根据需求确认单更新,73 项用户补充已填写;部分架构事项仍待评审
  • 创建日期:2026-08-25
  • 适用项目:SSL 证书管理服务程序
  • 文档用途:用于确认功能边界、技术方案和验收标准,确认后作为后续设计与开发依据
  • 项目名:Scert

本文档整理正式需求、待确认事项和开发任务,不代表所有方案已经最终确定。正式需求以已确认结果为准,未确认事项不得擅自假设。 填写规则:需求确认阶段,紧跟待确认项后的 【用户补充 U-编号】 为用户填写区;需求确认后,系统根据用户补充区同步更新正式需求、流程和验收标准。


一、需求确认清单

1.1 项目目标

  • 统一管理多个域名的 SSL/TLS 证书
  • 支持自动申请、自动续期和手动部署
  • 支持将证书部署到多台远程服务器
  • 支持部署完成后的证书校验
  • 支持邮件通知和操作日志
  • 支持命令行、Web 管理界面和桌面图形界面
  • 支持 Windows 和 Linux 运行环境
  • 已确认需求:第一阶段同时提供命令行、Web 管理界面和桌面图形界面;命令行仅负责初始化基础配置,初始化完成后日常管理通过 Web 界面进行。
    • 【用户补充 U-001】(请填写):
      • 补充内容:命令行系统需要实现,命令行只进行基础信息填写:web页面的域名、dns的配置、ssl证书部署的位置,Web 管理界面需要实现,桌面图形界面需要实现
      • 确认结果:已填写
  • 已确认需求:第一阶段同时支持 Windows 和 Linux 两条开发线。
    • 【用户补充 U-002】(请填写):
      • 补充内容:需要,两条线进行开发
      • 确认结果:已填写

1.2 域名和证书管理

  • 支持添加托管域名
  • 支持删除托管域名
  • 支持配置证书类型
  • 支持单域名证书
  • 支持泛域名证书
  • 证书默认存放在配置根目录下的域名目录中
  • 已确认需求:泛域名证书不包含根域名。
    • 【用户补充 U-003】(请填写):
      • 补充内容:泛域名不需要包含根域名
      • 确认结果:已填写
  • 已确认需求:证书按生产证书和开发证书分类管理;多域名 SAN 证书纳入第一阶段。
    • 【用户补充 U-004】(请填写):
      • 补充内容:确认启用
      • 确认结果:已填写
  • 已确认需求:删除域名时同时删除该域名的历史证书文件。
    • 【用户补充 U-005】(请填写):
      • 补充内容:需要
      • 确认结果:已填写
  • 已确认需求:同一域名允许保存多个证书版本;根目录使用 /ssl/{域名}/,按生产/开发环境和证书类型分目录,下设泛域名和单域名目录。
    • 【用户补充 U-006】(请填写):
      • 补充内容:允许,但同一个域名多个版本的证书的话,需要以文件夹区分,文件夹名是证书类型,目录结构为: /ssl/{域名}/ -*(泛域名) -{域名}(单域名 目录格式参考这个进行排布设计
      • 确认结果:已填写

已确认方向的证书目录结构

/ssl/{域名}/
├── wildcard/                   泛域名证书,例如 *.example.com
│   └── {日期}-Vx.x/             当前使用版本
├── single/                     单域名证书,例如 example.com
│   └── {日期}-Vx.x/             当前使用版本
└── san/{证书标识}/             多域名 SAN 证书
    └── {日期}-Vx.x/             当前使用版本

版本目录名称格式为 YYYYMMDD-Vx.x,例如 20260830-V1.0。同一天再次保存时递增版本号,例如 20260830-V1.1。生产和开发证书不再使用两套目录层级,统一由域名配置中的 ACME 环境字段区分申请环境。正式证书目录只保留当前使用版本;新证书保存成功后替换旧当前版本,旧文件仅在失败回滚所需时进入备份目录。

多域名 SAN 证书纳入第一阶段,证书以主域名作为管理归属,并保存完整的 SAN 域名集合。SAN 证书目录使用证书标识区分不同域名集合:

/ssl/{主域名}/
└── san/{证书标识}/
    └── {日期}-Vx.x/

其中 {证书标识} 必须能够稳定对应主域名和 SAN 域名集合;域名集合发生变化时更新当前证书版本目录,不在正式证书目录中保留历史版本。

【用户补充 U-074】(2026-08-30):将生产/开发目录和当前/历史版本目录合并简化;正式证书目录只保留当前使用版本,版本目录名称使用日期加 Vx.x。本补充作为当前实现约束,优先于本节之前关于双环境目录和正式目录保留历史版本的描述。

1.3 DNS 验证

  • 使用 ACME 协议申请证书
  • 支持 DNS-01 验证
  • 支持 Cloudflare API Token
  • 支持阿里云 DNS/RAM 凭据
  • 支持 DNSPod API Token
  • 预留其他 DNS 服务商适配接口
  • 支持 CNAME 委派方式
  • 已确认需求:配置 DNS API 凭据时允许在 CLI 和 Web 初始化界面中明文查看,便于用户核对输入内容;提交保存后不得将明文凭据写入普通配置文件、数据库字段、日志或命令行输出。
    • 【用户补充 U-074】(请填写):
      • 补充内容:配置时允许明文显示,存入数据库和调用时加密
      • 确认结果:已填写
  • 已确认需求:DNS API 凭据在线验证期间仅在内存中使用;验证成功后写入加密敏感信息存储并返回凭据引用,证书申请和续期时根据凭据引用解密后调用 Provider。
    • 【实现约束】:Web 和 CLI 不得把完整凭据写入响应、日志、错误信息、测试输出或备份;配置文件只保存 secret:// 凭据引用。
  • 第一阶段 DNS 验证方式支持 Cloudflare、阿里云 DNS、DNSPod、CNAME 委派、华为云、腾讯云、AWS Route 53、Google Cloud DNS,并预留其他服务商适配接口。
  • 已确认需求:第一阶段使用 Let's Encrypt 作为 ACME CA,并使用 go-acme/lego 负责证书申请、DNS-01 验证和自动续期。
    • 【用户补充 U-007】(请填写):
      • 补充内容:Let's Encrypt、ZeroSSL、Buypass Go SSL、SSL.com、Google Trust Services
      • 确认结果:已填写
  • 已确认需求:支持国内外主流 DNS 服务商,并通过适配器扩展。
    • 【用户补充 U-008】(请填写):
      • 补充内容:需要支持国内外主流dns服务商
      • 确认结果:已填写
  • 已确认需求:CNAME 委派默认自动创建;自动创建失败时提示用户手动创建。
    • 【用户补充 U-009】(请填写):
      • 补充内容:无需用户创建,自动创建失败时,提示用户手动创建
      • 确认结果:已填写
  • 已确认需求:自动检测 DNS Zone 和权限。
    • 【用户补充 U-010】(请填写):
      • 补充内容:需要
      • 确认结果:已填写
  • 已确认需求:默认使用一个 API 配置多个域名,并支持后续按域名覆盖配置。
    • 【用户补充 U-011】(请填写):
      • 补充内容:默认使用一个api配置多个域名
      • 确认结果:已填写
  • 已确认需求:支持 DNS 传播检测和超时设置。
    • 【用户补充 U-012】(请填写):
      • 补充内容:需要
      • 确认结果:已填写

建议的 DNS 验证抽象

DNS 验证方式
├── DNS API 自动管理
│   ├── Cloudflare
│   ├── 阿里云
│   ├── DNSPod
│   └── 其他适配器
└── CNAME 委派
    ├── 显示需要创建的 CNAME 记录
    ├── 检查 CNAME 是否生效
    └── 管理委派目标下的 TXT 记录

1.4 自动续期

  • 系统按续期调度策略检查托管证书状态:常规每 3 天检查一次;证书剩余有效期低于 10 天时每天检查一次
  • 证书接近到期时自动触发续期
  • 续期失败时保留原证书
  • 支持手动触发续期
  • 支持记录续期任务状态
  • 支持失败重试
  • 已确认需求:证书剩余有效期低于 6 天时开启自动续期。
    • 【用户补充 U-013】(请填写):
      • 补充内容:低于6天时开启自动续期
      • 确认结果:已填写
  • 已确认需求:剩余有效期低于 6 天时触发续期,剩余有效期低于 3 天时进入紧急重试。
    • 【用户补充 U-014】(请填写):
      • 补充内容:默认提前 6 天尝试,剩余 3 天进入紧急重试
      • 确认结果:已填写
  • 已确认需求:每 3 天检查一次;有效期低于 10 天时每天检查一次。
    • 【用户补充 U-015】(请填写):
      • 补充内容:每3天检查一次,有效期低于10天时,每天检查一次
      • 确认结果:已填写
  • 已确认需求:允许用户自定义续期时间和重试次数;默认重试 3 次,每次间隔 30 分钟,并发送邮件提醒。
    • 【用户补充 U-016】(请填写):
      • 补充内容:允许用户自定义续期时间和重试次数,默认重试3次,每次间隔30分钟,同时发送邮件提醒
      • 确认结果:已填写
  • 已确认需求:提供 ACME Staging 测试环境。
    • 【用户补充 U-017】(请填写):
      • 补充内容:需要
      • 确认结果:已填写
  • 已确认需求:申请任务串行执行,同时只运行一个申请任务;多个任务按提交顺序执行。
    • 【用户补充 U-018】(请填写):
      • 补充内容:需要,每次限制一个申请任务,用户提交多个任务时,按提交的顺序进行申请,避免申请失败出现
      • 确认结果:已填写

已确认的续期配置

常规检查间隔:每 3 天
临近到期检查:剩余有效期低于 10 天时每天检查
自动续期阈值:剩余有效期低于 6 天
紧急重试阈值:剩余有效期低于 3 天
默认最大重试次数:3 次
默认重试间隔:30 分钟
自定义配置:用户可以自定义续期时间和重试次数

1.5 多服务器部署

  • 一个域名可以关联多台服务器
  • 使用 SSH 密钥认证
  • 不使用服务器登录密码
  • 支持上传证书和私钥
  • 支持替换远程证书文件
  • 支持执行 Web 服务器或反向代理配置检查;默认适配 Nginx
  • 支持执行默认或用户自定义的 reload 命令
  • 支持部署完成后的远程 HTTPS 检查
  • 支持保留旧证书
  • 已确认需求:默认使用 Nginx;检测到其他 Web 服务器或反向代理时提示用户修改,并适配主流软件。
    • 【用户补充 U-019】(请填写):
      • 补充内容:默认使用Nginx,如果用户使用其他的,提示用户进行修改,同时适配当前主流的web服务器/反向代理软件
      • 确认结果:已填写
  • 已确认需求:支持自定义 reload 命令。
    • 【用户补充 U-020】(请填写):
      • 补充内容:支持自定义
      • 确认结果:已填写
  • 已确认需求:每台服务器允许单独配置证书路径,未配置时使用默认路径。
    • 【用户补充 U-021】(请填写):
      • 补充内容:允许单独配置,不配置就使用默认的路径
      • 确认结果:已填写
  • 已确认需求:每台服务器允许单独配置 SSH 用户、端口和密钥。
    • 【用户补充 U-022】(请填写):
      • 补充内容:允许
      • 确认结果:已填写
  • 已确认需求:记录 SSH 主机指纹。
    • 【用户补充 U-023】(请填写):
      • 补充内容:需要
      • 确认结果:已填写
  • 已确认需求:部署任务重试 3 次仍失败后,报告当前状态并通过邮件发送任务摘要。
    • 【用户补充 U-024】(请填写):
      • 补充内容:重试3次仍然失败后,将当前状态报告给用户,整理任务状态发送给用户使用邮件
      • 确认结果:已填写
  • 已确认需求:部署失败时自动回滚,避免影响生产环境。
    • 【用户补充 U-025】(请填写):
      • 补充内容:需要,避免影响生产环境
      • 确认结果:已填写

建议的部署流程

1. 本地校验证书和私钥
2. 生成部署版本目录
3. 推送到远程目录
4. 设置远程文件权限
5. 执行 nginx -t
6. 原子替换证书文件
7. 执行 nginx -s reload
8. 发起远程 HTTPS 校验
9. 校验失败时恢复旧版本
10. 记录每台服务器的结果

1.6 部署后校验

  • 校验本地证书文件存在
  • 校验证书格式有效
  • 校验证书和私钥匹配
  • 校验证书未过期
  • 校验证书域名匹配
  • 校验远程服务器实际返回的证书
  • 校验证书链和 TLS 握手
  • 已确认需求:部署后检查域名的所有 A 记录。
    • 【用户补充 U-026】(请填写):
      • 补充内容:需要
      • 确认结果:已填写
  • 已确认需求:部署后检查 AAAA 记录。
    • 【用户补充 U-027】(请填写):
      • 补充内容:需要
      • 确认结果:已填写
  • 已确认需求:远程 HTTPS 校验超时时间为 2 分钟。
    • 【用户补充 U-028】(请填写):
      • 补充内容:2分钟
      • 确认结果:已填写
  • 已确认需求:生产证书不允许使用自签名临时证书,测试证书允许使用。
    • 【用户补充 U-029】(请填写):
      • 补充内容:生产证书不允许,测试证书允许
      • 确认结果:已填写

1.7 用户自有证书

  • 支持上传已有证书
  • 支持上传私钥
  • 支持手动触发部署
  • 上传证书前进行格式检查
  • 检查证书和私钥是否匹配
  • 检查证书域名和有效期
  • 已确认需求:允许上传加密私钥。
    • 【用户补充 U-030】(请填写):
      • 补充内容:允许
      • 确认结果:已填写
  • 已确认需求:用户上传证书保留最新版本和一个最近的历史版本。
    • 【用户补充 U-031】(请填写):
      • 补充内容:保留最新的版本与一个最近的历史版本
      • 确认结果:已填写
  • 已确认需求:用户上传证书默认不参与自动续期,用户主动选择后才参与。
    • 【用户补充 U-032】(请填写):
      • 补充内容:默认不参与,除非用户选择参与
      • 确认结果:已填写
  • 已确认需求:证书文件最大 5 MB,压缩包最大 10 MB。
    • 【用户补充 U-033】(请填写):
      • 补充内容:证书文件限制最大5mb,压缩包10mb
      • 确认结果:已填写

1.8 邮件通知

  • 每次续期任务完成后发送通知
  • 任务成功时发送通知
  • 任务失败时发送通知
  • 支持多个收件人
  • 通知内容包含域名、任务状态、错误信息和时间
  • 已确认需求:同时保留 HTTP API 和 SMTP 通知方式;HTTP 通知通过调用外部邮件或消息服务 API 完成,Scert 不实现 SMTP、IMAP、POP3 邮件服务器端。
    • 【用户补充 U-034】(请填写):
      • 补充内容:http和smtp都保留,后期经过测试后决定保留具体方式
      • 确认结果:已填写

HTTP 通知接口已确认模板

请求方法:POST
请求地址:用户可自定义
请求格式:application/json
认证方式:Bearer Token、HMAC-SHA256、无认证均支持;无认证仅建议用于开发、测试或受控内网环境
请求头:支持 Scert 标准请求头和用户自定义请求头
事件模式:详细事件和统一事件均支持,默认使用详细事件
成功判定:HTTP 状态码 200-299
请求唯一标识:必须携带 request_id,接收方需要支持幂等处理
超时时间:默认 10 秒,可配置
失败重试:默认 3 次,间隔 30 秒、2 分钟、10 分钟,可配置
敏感信息:Token、签名密钥和密码不得写入日志

请求体至少包含:事件类型、任务状态、任务编号、域名、证书类型、运行环境、开始时间、结束时间、错误信息、重试信息和部署结果。用户可选择是否发送完整服务器部署明细、证书序列号和管理后台链接;上述内容默认支持配置。

HTTP 通知接口确认项:

  • 请求路径允许用户自定义。
  • 支持 Bearer Token。
  • 支持 HMAC-SHA256。
  • 保留无认证模式;该模式仅建议用于开发、测试或受控内网环境。
  • 同时支持详细事件和统一事件,默认使用详细事件。
  • 支持发送完整服务器部署明细。
  • 支持发送证书序列号。
  • 支持发送管理后台链接。
  • HTTP 状态码按 200-299 判定为成功。
  • 重试次数和间隔支持使用默认值,也支持用户自定义。
  • 请求字段统一使用英文。
  • 支持用户自定义请求头。

建议请求头:

Content-Type: application/json
Authorization: Bearer {token}
X-Scert-Event: certificate.renewed
X-Scert-Request-Id: {request_id}
X-Scert-Timestamp: {unix_timestamp}
X-Scert-Signature: sha256={hmac_signature}
  • 已确认需求:SMTP、IMAP、POP3 和 Web 管理后台的协议连接表仅作为外部邮件服务兼容性参考,不作为 Scert 实现邮件服务器端的要求;Scert 后续通过外部 API 接口调用邮件发送服务。
    • 【用户补充 U-035】(请填写):
      • 补充内容:协议表仅作参考,后续通过 API 接口调用外部邮件发送服务。
        协议 明文连接 STARTTLS/STLS 隐式 TLS 端口
        SMTP 接收 支持 支持 支持 25、465
        SMTP Submission 仅允许建立连接,不允许明文认证 支持 不在 587 上使用 587
        IMAP 不支持 不支持 支持 993
        POP3 仅允许建立连接,不允许明文认证 支持,命令为 STLS 支持 110、995
        Web 管理后台 HTTP 初始化期间支持 不适用 HTTPS 支持 80、443
      • 确认结果:已填写
  • 已确认需求:发件人显示名称默认为 Scert,发件人地址待测试后确定。
    • 【用户补充 U-036】(请填写):
      • 补充内容:发件人:Scert,地址等待我测试后决定
      • 确认结果:已填写
  • 已确认需求:通知发送失败时进行重试。
    • 【用户补充 U-037】(请填写):
      • 补充内容:需要重试
      • 确认结果:已填写
  • 已确认需求:支持按域名配置收件人,默认使用账户绑定的邮箱。
    • 【用户补充 U-038】(请填写):
      • 补充内容:支持,但是默认使用账户绑定的邮箱
      • 确认结果:已填写
  • 已确认需求:支持通知类型开关。
    • 【用户补充 U-039】(请填写):
      • 补充内容:支持
      • 确认结果:已填写

建议的通知状态

续期结果:成功、失败、错误、未知、根据具体报错进行通知:如dns错误、dns超时等
部署结果:全部成功、部分成功、全部失败、未执行
邮件结果:发送成功、发送失败、未配置
web页面:站内信提示全部的通知状态

1.9 Web 管理界面

  • 管理员登录
  • 查看所有托管域名
  • 查看证书类型
  • 查看证书到期时间
  • 查看剩余有效天数
  • 查看关联服务器
  • 查看最近续期状态
  • 添加和删除域名
  • 配置 DNS 验证方式
  • 配置部署服务器
  • 手动续期
  • 手动部署
  • 上传自有证书
  • 修改邮件配置
  • 修改证书存储路径
  • 查看操作日志
  • 已确认需求:管理后台不由核心服务单独终止 HTTPS,前端和后端均需纳入 HTTPS 安全部署;具体终止层待架构评审。
    • 【用户补充 U-040】(请填写):
      • 补充内容:由你确定边界
      • 确认结果:已填写
  • 已确认需求:支持多个管理员。
    • 【用户补充 U-041】(请填写):
      • 补充内容:支持
      • 确认结果:已填写
  • 已确认需求:支持一个超级管理员、多个管理员和多个普通用户的角色体系。
    • 【用户补充 U-042】(请填写):
      • 补充内容:需要:1个超级管理员,n个管理员,n个普通用户
      • 确认结果:已填写
  • 已确认需求:支持用户名加密码、邮箱加密码、邮箱加验证码、用户名加验证码等登录方式。
    • 【用户补充 U-043】(请填写):
      • 补充内容:需要:通过用户名+密码、邮箱+密码、邮箱+验证码、用户名+验证码
      • 确认结果:已填写
  • 已确认需求:5 分钟内登录失败 5 次后禁止登录 30 分钟。
    • 【用户补充 U-044】(请填写):
      • 补充内容:5分钟内失败5次禁止登录30分钟
      • 确认结果:已填写
  • 已确认需求:连续 30 分钟无操作时自动强制退出。
    • 【用户补充 U-045】(请填写):
      • 补充内容:30分钟未操作自动强制退出
      • 确认结果:已填写

1.10 命令行版本

  • 初始化配置
  • 添加域名
  • 删除域名
  • 手动续期
  • 手动部署
  • 查看域名状态
  • 查看证书信息
  • 查看日志
  • 修改系统配置
  • 与 Web 管理界面共享配置和数据
  • 已确认需求:CLI 通过 API 调用核心服务,不直接操作本地数据库。
    • 【用户补充 U-046】(请填写):
      • 补充内容:通过api调用服务
      • 确认结果:已填写
  • 已确认需求:初始化配置时使用交互式输入;初始化完成后不再使用交互式 CLI,转由 Web 页面操作。
    • 【用户补充 U-047】(请填写):
      • 补充内容:初始化配置时需要交互式输入配置信息,初始化完成后不需要交互式,转由web页面操作
      • 确认结果:已填写
  • 已确认需求:不支持 JSON 输出。
    • 【用户补充 U-048】(请填写):
      • 补充内容:不支持
      • 确认结果:已填写
  • 已确认需求:不支持脚本退出码。
    • 【用户补充 U-049】(请填写):
      • 补充内容:不支持
      • 确认结果:已填写
  • 已确认需求:支持任务等待和轮询。
    • 【用户补充 U-050】(请填写):
      • 补充内容:支持
      • 确认结果:已填写

1.11 桌面图形界面

  • 支持首次初始化
  • 支持配置管理员账号
  • 支持配置邮件服务器
  • 支持配置 DNS 验证
  • 支持配置证书存储路径
  • 支持打开 Web 管理界面
  • 已确认需求:桌面版作为 Web 管理界面的封装。
    • 【用户补充 U-051】(请填写):
      • 补充内容:是
      • 确认结果:已填写
  • 已确认需求:桌面版负责启动本地核心服务。
    • 【用户补充 U-052】(请填写):
      • 补充内容:是
      • 确认结果:已填写
  • 已确认需求:需要系统托盘。
    • 【用户补充 U-053】(请填写):
      • 补充内容:是
      • 确认结果:已填写
  • 已确认需求:需要显示后台任务状态。
    • 【用户补充 U-054】(请填写):
      • 补充内容:需要
      • 确认结果:已填写
  • 已确认需求:支持开机自启动,但由用户选择是否启用。
    • 【用户补充 U-055】(请填写):
      • 补充内容:需要,但是根据用户选择执行
      • 确认结果:已填写
  • 已确认需求:桌面版安装包格式为 exe。
    • 【用户补充 U-056】(请填写):
      • 补充内容:exe
      • 确认结果:已填写

1.12 平台支持

  • Windows
  • Linux
  • Linux systemd 服务
  • Windows Service 服务
  • 已确认需求:支持 Windows 10 和 Windows 11,目标构建架构为 amd64。
    • 【用户补充 U-057】(请填写):
      • 补充内容:win10
      • 确认结果:已填写
  • 已确认需求:第一阶段以 Ubuntu 22.04 + Nginx 作为 Linux 基础测试环境,并覆盖 Ubuntu 24.04 + Nginx、CentOS/Rocky Linux、Debian、Caddy、Apache 和其他主流反向代理软件的兼容性测试。
    • 【用户补充 U-058】(请填写):
      • 补充内容:Ubuntu20.04、debain11
      • 确认结果:已填写
  • 已确认需求:Linux 服务以 Ubuntu 22.04 的 systemd 版本作为最低 systemd 兼容基线,其他 Linux 发行版通过测试矩阵确认兼容性。
    • 【用户补充 U-059】(请填写):
      • 补充内容:需要支持到当前最新版
      • 确认结果:已填写
  • 已确认需求:暂不支持 ARM64。
    • 【用户补充 U-060】(请填写):
      • 补充内容:暂不需要,没有对应的环境进行测试
      • 确认结果:已填写
  • 已确认需求:支持主流 Windows、Linux、Web 服务器和反向代理软件。
    • 【用户补充 U-061】(请填写):
      • 补充内容:主流的win、Linux、web服务器/反向代理都需要支持
      • 确认结果:已填写
  • 已确认需求:支持在 Windows 上部署 Nginx,并根据用户需求启用。
    • 【用户补充 U-062】(请填写):
      • 补充内容:支持这个功能,但是根据用户需求启用
      • 确认结果:已填写

1.13 安全需求

  • 管理后台使用 HTTPS
  • 管理员密码使用安全哈希保存
  • Linux 私钥文件权限限制为 600 或更严格
  • Windows 使用等效 ACL 权限保护私钥
  • SSH 私钥加密存储
  • DNS API 密钥加密存储
  • SMTP 密码加密存储
  • 日志中禁止记录明文密钥
  • 已确认需求:敏感凭据在配置录入阶段允许明文显示,但仅限当前配置页面或当前交互输入过程;保存时使用 AES-GCM 等认证加密方式持久化,业务调用时按凭据引用解密,普通配置和数据库业务字段不保存明文。
    • 【安全边界】:明文只允许短时存在于进程内存;验证失败、取消配置或保存失败时不得留下可复用的普通配置记录;敏感信息文件和主密钥继续使用受限权限保护。
  • 所有重要操作记录审计日志
  • 已确认需求:使用主密码保护的加密配置。
    • 【用户补充 U-063】(请填写):
      • 补充内容:使用主密码保护的加密配置
      • 确认结果:已填写
  • 已确认需求:需要管理员恢复机制:超级管理员只能通过配套重置入口重置;管理员和普通用户可由超级管理员重置;普通用户可由管理员重置,且普通用户只能重置自身。
    • 【用户补充 U-064】(请填写):
      • 补充内容:需要:超级管理员只能通过配套的重置入口进行重置,管理员和普通用户可以通过超级管理员重置,普通用户可以通过管理员重置,普通用户只能重置本身
      • 确认结果:已填写
  • 已确认需求:支持敏感信息轮换。
    • 【用户补充 U-065】(请填写):
      • 补充内容:需要
      • 确认结果:已填写
  • 已确认需求:支持加密密钥备份。
    • 【用户补充 U-066】(请填写):
      • 补充内容:需要
      • 确认结果:已填写
  • 已确认需求:需要安全审计报告,且仅超级管理员和管理员可以查看。
    • 【用户补充 U-067】(请填写):
      • 补充内容:需要,但是只能超级管理员和管理员查看
      • 确认结果:已填写

1.14 可靠性和运维

  • 失败时保留原证书
  • 续期任务可重试
  • 部署任务可重试
  • 记录操作日志
  • 记录错误原因
  • 服务重启后可以恢复任务状态
  • 已确认需求:支持数据库备份。
    • 【用户补充 U-068】(请填写):
      • 补充内容:数据库备份
      • 确认结果:已填写
  • 已确认需求:日志保留 30 天,默认保留最新 30 天后删除旧日志。
    • 【用户补充 U-069】(请填写):
      • 补充内容:保留30天,默认保留最新的30天,然后删除旧的
      • 确认结果:已填写
  • 已确认需求:日志每天限制 5 MB。
    • 【用户补充 U-070】(请填写):
      • 补充内容:每天限制5mb
      • 确认结果:已填写
  • 已确认需求:支持日志轮转。
    • 【用户补充 U-071】(请填写):
      • 补充内容:需要
      • 确认结果:已填写
  • 已确认需求:支持配置导出和导入。
    • 【用户补充 U-072】(请填写):
      • 补充内容:需要
      • 确认结果:已填写
  • 已确认需求:需要灾难恢复流程。
    • 【用户补充 U-073】(请填写):
      • 补充内容:需要
      • 确认结果:已填写

二、第一阶段范围

以下范围已根据需求确认结果纳入第一阶段。具体实现仍需按照开发任务清单逐项完成并复审。

  • 已确认纳入:核心证书管理服务和统一配置、数据模型
  • 已确认纳入:数据库存储及任务、日志、证书版本数据管理
  • 已确认纳入:Let’s Encrypt ACME CA,并使用 go-acme/lego 负责证书申请、DNS-01 验证和自动续期
  • 已确认纳入:Cloudflare、阿里云 DNS、DNSPod、CNAME 委派、华为云、腾讯云、AWS Route 53、Google Cloud DNS 及其他服务商适配器
  • 已确认纳入:DNS-01 验证、DNS Zone 和权限检测、DNS 传播检测
  • 已确认纳入:CNAME 委派自动创建;自动创建失败时提示用户手动创建
  • 已确认纳入:单域名证书、泛域名证书(不包含根域名)、多域名 SAN 证书以及生产/开发证书分类
  • 已确认纳入:证书多版本保存、按证书类型分目录、失败时保留原证书
  • 已确认纳入:通过 SSH 密钥部署到多台服务器,支持独立配置路径、用户、端口和密钥
  • 已确认纳入:默认 Nginx,适配主流 Web 服务器和反向代理,并支持自定义 reload 命令
  • 已确认纳入:部署失败重试、自动回滚、A/AAAA 记录检查和远程 HTTPS 校验
  • 已确认纳入:HTTP API 和 SMTP 通知方式;SMTP、IMAP、POP3 协议表仅作为外部邮件服务兼容性参考,Scert 不实现邮件服务器端
  • 已确认纳入:MySQL 5.7 基础开发、MySQL 8.0 兼容性测试和 SQLite 单机/桌面/开发模式
  • 已确认纳入:Linux 默认目录 /ssl、/scert、/scert/conf、/scert/log、/scert/backups
  • 已确认纳入:Windows 按自定义安装目录使用 Scert\ssl、Scert\data、Scert\config、Scert\logs、Scert\backups
  • 已确认纳入:Linux 创建专用 Scert 服务运行用户;该用户专门管理证书目录,私钥由 Scert 和 root 共同受控管理
  • 已确认纳入:CLI 初始化、Web 管理界面和桌面图形界面
  • 已确认纳入:多管理员、超级管理员、管理员和普通用户角色权限
  • 已确认纳入:Windows 10/11、Ubuntu 22.04 + Nginx、Ubuntu 24.04 + Nginx、CentOS/Rocky Linux、Debian、Caddy、Apache 和其他主流反向代理测试范围
  • 已确认纳入:Linux systemd 服务、Windows Service 服务和桌面版 exe 安装包;systemd 以 Ubuntu 22.04 默认版本为最低兼容基线
  • 已确认纳入:以当前开发电脑工具链为开发基线,目标构建架构为 amd64;当前记录为 Go 1.26.2、Node.js 24.19.0、npm 11.17.0、Wails 2.11.0
  • 已确认纳入:用户自有证书上传、校验和手动部署;默认不参与自动续期

以下内容暂不纳入第一阶段或仍需后续确认:

  • [!] 自定义 ACME CA:第一阶段固定使用 Let’s Encrypt,后续预留扩展
  • [!] 高可用、多实例和集群部署
  • [!] ARM64 平台支持
  • 已确认:HTTPS 采用双模式;默认由核心服务直接终止 HTTPS,高级模式由 Nginx/Caddy 终止公网 HTTPS,核心服务使用内部 HTTPS

三、建议的系统模块

SSL 服务程序
├── 配置管理模块
├── 管理员认证模块
├── 域名管理模块
├── 证书生命周期模块
├── ACME 客户端模块
├── DNS 服务商适配模块
├── 续期调度模块
├── SSH 部署模块
├── Web 服务器和反向代理适配模块
├── 远程 HTTPS 校验模块
├── 自有证书导入模块
├── 邮件通知模块
├── Web API 模块
├── CLI 模块
├── 桌面客户端模块
├── 审计日志模块
└── 平台服务模块

业务逻辑只放在核心服务中,CLI、Web 和桌面客户端不重复实现证书申请及部署逻辑。


四、建议的证书任务状态

4.1 续期任务状态

pending       等待执行
running       执行中
succeeded     成功
failed        失败
partial       部分成功
cancelled     已取消
unknown       未知

4.2 部署节点状态

pending       等待部署
uploading     上传中
checking      配置检查中
reloading     重载中
validating    HTTPS 校验中
succeeded     成功
failed        失败
rolled_back   已回滚
rollback_failed 回滚失败

4.3 证书来源

acme          ACME 自动申请
uploaded      用户上传
imported      外部导入

五、关键业务流程

5.1 首次初始化流程

1. 启动程序
2. 检查是否已完成初始化
3. 未初始化时进入初始化向导
4. 配置管理后台域名
5. 配置管理员账号和密码
6. 配置证书存储根目录
7. 配置邮件服务器和通知方式(HTTP、SMTP)
8. 配置至少一种 DNS 验证方式
9. 验证 DNS 凭据、DNS Zone、权限和 DNS 传播能力
10. 检查管理后台域名解析
11. 使用 Let’s Encrypt 和 `go-acme/lego` 通过 DNS-01 申请管理后台证书
12. 校验并安装本地 HTTPS 证书
13. 启动前后端均纳入 HTTPS 部署的管理后台
14. 标记初始化完成

5.2 自动续期流程

1. 调度器按每 3 天一次的常规周期检查证书;剩余有效期低于 10 天时改为每天检查
2. 证书剩余有效期低于 6 天时创建续期任务;低于 3 天时按紧急策略重试
3. 申请任务进入串行队列,同一时间只运行一个申请任务
4. 检查 DNS 配置、DNS Zone、权限和 ACME 账户
5. 调用 `go-acme/lego` 使用 Let’s Encrypt 创建 ACME Order
6. 创建或委派 DNS TXT 记录
7. 等待并检测 DNS 记录传播
8. 执行 ACME DNS-01 验证并下载新证书
9. 校验新证书和私钥
10. 保存新的本地证书版本
11. 部署到关联服务器并执行 Web 服务器或反向代理检查、reload
12. 检查所有 A/AAAA 记录并执行远程 HTTPS 校验
13. 校验失败或部署失败时恢复旧版本
14. 按默认 3 次、每次间隔 30 分钟的策略重试;用户可自定义续期时间和重试次数
15. 写入任务和审计日志,并发送 HTTP/SMTP 任务通知

5.3 用户证书部署流程

1. 上传证书和私钥
2. 校验文件格式
3. 校验证书和私钥匹配
4. 校验证书域名和有效期
5. 保存为新版本
6. 用户手动确认部署
7. 部署到关联服务器
8. 执行目标 Web 服务器或反向代理检查和 reload
9. 执行 HTTPS 校验
10. 记录结果并发送通知

六、验收标准

6.1 核心功能验收

  • 能通过 CLI 完成首次初始化
  • 能通过 Web 管理界面完成首次初始化
  • 能通过桌面版完成首次初始化,并在初始化后打开 Web 管理界面
  • 能添加单域名
  • 能添加泛域名
  • 能通过 Let’s Encrypt 和 go-acme/lego 使用 DNS-01 成功申请证书
  • 能检测 DNS Zone、权限和 DNS 传播状态;CNAME 委派自动创建失败时能提示用户手动创建
  • 能保存证书、证书链和私钥
  • 能按生产证书、开发证书、单域名、泛域名和 SAN 证书保存多个证书版本;泛域名证书不包含根域名,SAN 域名集合变化时创建新的证书版本
  • 能通过 SSH 部署到多台目标服务器,并按服务器独立配置路径、用户、端口和密钥
  • 默认能部署到远程 Nginx,并能适配主流 Web 服务器和反向代理
  • 能执行目标 Web 服务器或反向代理的配置检查和 reload,且支持自定义 reload 命令
  • 能在部署后通过 HTTPS 校验
  • 能按每 3 天检查、低于 10 天每天检查、低于 6 天续期、低于 3 天紧急重试的策略自动续期
  • 默认失败重试 3 次、每次间隔 30 分钟,并允许用户自定义续期时间和重试次数
  • 能在失败时保留旧证书
  • 能在部署失败时回滚
  • 能通过 HTTP API 和 SMTP 发送成功、失败、错误、未知等任务通知;HTTP API 支持自定义地址、Bearer Token、HMAC-SHA256、无认证测试模式、详细/统一事件、完整部署明细、证书序列号、管理后台链接、自定义请求头和独立重试
  • 能上传自有证书并手动部署,且默认不参与自动续期
  • 能查看操作日志

6.2 安全验收

  • 未登录用户不能访问管理接口
  • 管理员密码不以明文保存
  • DNS 密钥、SMTP 密码和 SSH 私钥不出现在日志中
  • 私钥文件权限符合平台要求
  • 上传路径不能越权
  • 远程 SSH 主机指纹可验证
  • Web 管理后台强制 HTTPS
  • 续期和部署任务不能被未授权用户触发

6.3 平台验收

  • Windows 10 及以上环境可以启动核心服务
  • Linux 环境可以启动核心服务
  • Ubuntu 22.04 + Nginx 可以运行
  • Ubuntu 24.04 + Nginx、CentOS/Rocky Linux、Debian、Caddy、Apache 和其他主流反向代理通过测试矩阵验证
  • Windows 服务可以自动启动
  • Linux systemd 服务可以自动启动
  • 桌面版可以通过 exe 安装包安装,并能启动本地核心服务、显示系统托盘和后台任务状态
  • Windows 和 Linux 使用同一套业务配置模型

七、需求确认结果与待确认事项

本节已根据前述用户补充区更新。已确认内容作为正式需求依据,未确认内容不得在实现阶段擅自假设。

7.1 已确认的关键结论

  1. 第一阶段使用 Let’s Encrypt 作为 ACME CA,并使用 go-acme/lego 负责申请、DNS-01 验证和自动续期;其他 ACME CA 仅预留后续扩展能力。
  2. 第一阶段支持 Cloudflare、阿里云 DNS、DNSPod、CNAME 委派、华为云、腾讯云、AWS Route 53、Google Cloud DNS 及其他服务商适配器;CNAME 委派自动创建失败时提示用户手动创建。
  3. 第一阶段同时保留 HTTP API 和 SMTP 通知方式;SMTP、IMAP、POP3 协议表仅作为外部邮件服务兼容性参考,Scert 通过外部 API 调用邮件发送服务,不实现邮件服务器端。
  4. 管理后台采用双 HTTPS 模式:默认由核心服务直接终止 HTTPS;高级模式由 Nginx/Caddy 终止公网 HTTPS,核心服务使用内部 HTTPS。
  5. 续期策略为:每 3 天常规检查一次,剩余有效期低于 10 天时每天检查,低于 6 天触发续期,低于 3 天进入紧急重试;默认重试 3 次、每次间隔 30 分钟,用户可自定义续期时间和重试次数。
  6. 泛域名证书只申请 *.example.com 形式的泛域名,不自动包含 example.com 根域名。
  7. CNAME 委派默认由程序自动创建;自动创建失败时,必须向用户展示记录并提示手动创建。
  8. 第一阶段不限定远程目标为 Linux Nginx;默认支持 Nginx,并适配主流 Windows/Linux Web 服务器和反向代理软件。
  9. 桌面版采用 Web 管理界面封装,由桌面版启动本地核心服务,并提供系统托盘、后台任务状态和可选开机自启动。
  10. 协议连接表仅作为外部邮件服务兼容性参考;通知接口支持用户自定义地址、Bearer Token、HMAC-SHA256、无认证测试模式、详细/统一事件、自定义请求头、2xx 成功判定和可配置重试。
  11. 多域名 SAN 证书纳入第一阶段,使用主域名作为管理归属并保存完整 SAN 域名集合;域名集合变化时生成新的证书版本。
  12. 数据库支持 MySQL 和 SQLite;MySQL 5.7 作为基础开发和最低兼容版本,MySQL 8.0 作为兼容性测试版本,SQLite 用于单机、桌面和开发模式。
  13. Linux 默认使用 /ssl、/scert、/scert/conf、/scert/log、/scert/backups;创建专用 Scert 服务运行用户管理证书目录,私钥由 Scert 和 root 共同受控管理。Windows 按自定义安装目录使用 Scert\\ssl、Scert\\data、Scert\\config、Scert\\logs、Scert\\backups。

7.2 仍需确认或架构评审的事项

  • 已确认:U-004 多域名 SAN 证书纳入第一阶段,目录、申请、续期和部署规则已纳入正式需求。
  • 已确认:U-040 HTTPS 采用双模式,默认核心服务直接终止,高级模式由 Nginx/Caddy 终止公网 HTTPS,核心服务使用内部 HTTPS。
  • 已确认:平台测试范围为 Windows 10/11、Ubuntu 22.04 + Nginx、Ubuntu 24.04 + Nginx、CentOS/Rocky Linux、Debian、Caddy、Apache 和其他主流反向代理。

八、需求确认后的开发任务清单

阶段一:基础设计

  • 未开始:冻结第一阶段需求范围
  • 未开始:确定核心服务和数据模型
  • 未开始:确定配置文件和数据库方案
  • 未开始:确定敏感信息加密方案
  • 未开始:确定证书目录和版本结构
  • 未开始:确定任务状态机
  • 未开始:确定 Windows、Linux、Windows Service 和 Linux systemd 的运行适配边界
  • 未开始:建立 Windows 10/11、Ubuntu 22.04 + Nginx、Ubuntu 24.04 + Nginx、CentOS/Rocky Linux、Debian、Caddy、Apache 和其他主流反向代理测试矩阵

阶段二:证书申请

  • 未开始:实现 go-acme/lego ACME Issuer 和生命周期管理
  • 未开始:接入 Let’s Encrypt 生产环境和 ACME Staging 测试环境
  • 未开始:实现 DNS 服务商适配器接口
  • 未开始:实现国内外主流 DNS 服务商适配器
  • 未开始:实现 CNAME 委派自动创建、失败提示和传播检测
  • 未开始:实现 DNS Zone、权限和 DNS 传播检测
  • 未开始:实现证书保存和校验
  • 未开始:实现生产/开发证书分类及单域名、泛域名证书目录
  • 未开始:实现多域名 SAN 证书标识集合、目录、申请、续期、版本保存和部署关联

阶段三:续期和部署

  • 未开始:实现每 3 天检查、低于 10 天每天检查的调度器
  • 未开始:实现低于 6 天续期、低于 3 天紧急重试的续期任务
  • 未开始:实现申请任务串行队列和任务等待、轮询
  • 未开始:实现默认 3 次、每次间隔 30 分钟且可配置的失败重试
  • 未开始:实现 SSH 部署
  • 未开始:实现 Web 服务器和反向代理部署适配器,默认支持 Nginx
  • 未开始:实现远程配置检查、默认或自定义 reload 命令
  • 未开始:实现远程 HTTPS 校验
  • 未开始:实现版本化部署和回滚
  • 未开始:实现所有 A/AAAA 记录检查
  • 未开始:实现 HTTP API 和 SMTP 任务通知及通知失败重试

阶段四:管理界面

  • 未开始:实现管理员认证
  • 未开始:实现超级管理员、管理员和普通用户角色权限
  • 未开始:实现 Web API
  • 未开始:实现域名管理页面
  • 未开始:实现证书状态页面
  • 未开始:实现服务器配置页面
  • 未开始:实现任务和日志页面
  • 未开始:实现初始化向导

阶段五:平台和扩展

  • 未开始:实现 Linux systemd 适配
  • 未开始:实现 Windows Service 适配
  • 未开始:实现桌面版 Web 封装、核心服务启动、系统托盘和后台任务状态
  • 未开始:实现桌面版 exe 安装包和可选开机自启动
  • 未开始:实现用户证书上传
  • 未开始:实现数据库备份、配置导入导出和灾难恢复
  • 未开始:实现敏感信息轮换、加密密钥备份和安全审计报告
  • 未开始:实现外部邮件服务 API 通知、SMTP 通知和 HTTP 通知配置页面
  • 未开始:实现双 HTTPS 模式、Linux systemd 最低基线和 Windows Service 适配
  • 未开始:预留自定义 ACME CA、高可用、多实例和 ARM64 扩展

九、确认记录

日期 确认人 变更内容 结果
2026-08-25 用户与系统整理 根据用户补充 U-035 更新协议连接策略、端口和认证限制 73 项已填写

十、文档状态说明

  • [ ] 未开始
  • [~] 进行中
  • [x] 已完成,等待复审
  • [✓] 复审通过
  • [!] 暂缓或存在阻塞

需求确认后,已填写并整理的条目标记为 [x],等待复审;复审通过后标记为 [✓];暂缓、阻塞或仍需确认的条目标记为 [!]。开发任务清单中的任务在实际开发过程中按状态更新。

二十九、本轮安装部署流程补充(2026-08-26)

本节为本轮新增确认内容。为便于逐点对照,每一条用户需求后紧跟实现说明和当前状态;不删除前文既有需求。

29.1 命令行系统安装流程

  1. **用户补充:**安装 Scert 本体时,同时安装并打包 Scert-admin;Scert-admin 用于超级管理员密码重置。

    • **实现说明:**安装产物必须同时包含 scert 和 scert-admin 两个可执行文件;两个程序共享配置和数据,但作为独立服务运行。
    • 状态:[x] 已完成基础服务入口,安装器和服务注册尚未完成。
  2. **用户补充:**命令行安装启动时,只进行初始化配置:超级管理员用户名、密码、第三方邮箱和 Scert 主服务端口;密码重置功能不再配置独立端口。

    • 实现说明:scert init 使用交互式向导保存上述字段;系统根据 Web 管理域名或公网 IP 自动生成 https://域名或IP/reset 密码重置地址,不在公开地址中暴露主服务监听端口。初始化完成后日常管理转由 Web 页面,CLI 保留非交互式状态和自动化能力。
    • 状态:[x] 已完成配置模型和交互式基础流程,第三方邮箱真实适配尚未完成。
  3. **用户补充:**配置 DNS API 并进行验证测试。

    • **实现说明:**初始化配置必须记录 DNS 服务商、凭据引用和验证状态;验证未通过时不得将 setup_ready 标记为完成。明文密钥应进入加密凭据存储,不直接写入普通配置文件。
    • 状态:[x] 已完成状态门禁;真实 provider 连通性测试为后续任务。
  4. **用户补充:**配置 SSL 证书部署位置,默认使用 /ssl/{域名},用户可以自定义。

    • **实现说明:**配置模型保存证书根目录,证书任务根据域名和证书类型生成子目录;默认 Linux 根目录为 /ssl,Windows 默认根目录为安装目录下的 Scert\ssl。
    • 状态:[x] 已完成根目录配置基础能力;证书类型子目录和版本化落盘待证书模块实现。
  5. **用户补充:**提示用户配置 Web 页面域名;没有域名时允许使用公网 IP。

    • **实现说明:**Web 初始化目标只能二选一:域名或公网 IP。域名支持单域名、泛域名或 SAN;公网 IP 只按单 IP 标识处理,不支持把 IP 当作泛域名。
    • 状态:[x] 已完成配置校验基础能力;IP ACME 证书能力需单独验证后实现。
  6. **用户补充:**DNS API 配置完成且测试通过后再申请证书。

    • **实现说明:**初始化状态机顺序固定为:配置凭据 → DNS API 验证 → 申请 Web 证书 → 部署和校验 → 开放服务端口 → 标记初始化完成。
    • 状态:[x] 已写入流程约束;真实申请、部署和校验尚未完成。
  7. **用户补充:**SSL 申请成功后开放用户指定端口,并提示用户在安全组放行自定义端口。

    • **实现说明:**初始化程序自动检查并放行 Scert 主服务 TCP 端口。Windows 10/11 使用 Windows Defender 防火墙,Linux 支持已启用的 UFW 和 firewalld;规则名称固定、可追踪并支持重复执行。Scert-admin 不监听任何 TCP/UDP 端口,因此不创建额外防火墙规则。云厂商安全组不作为跨厂商自动修改对象,初始化完成后仍明确提示用户只需手动放行主服务端口。
    • **失败处理:**本机防火墙权限不足、命令执行失败或规则创建失败时,初始化必须返回中文错误,不得静默标记成功;如果配置保存失败,只回滚本次初始化新建的规则,不删除初始化前已经存在的规则。防火墙未启用时返回“无需创建规则”的明确状态,不主动启用系统防火墙。
    • 状态:[x] 已完成核心适配层、Web/CLI 初始化接入和自动回滚;Windows 10/11、Ubuntu 22.04/24.04、CentOS/Rocky Linux 实机安装流程仍需随安装器复审。

29.2 图形系统安装流程

  1. **用户补充:**图形安装包点击安装时,同时安装 Scert 本体和 Scert-admin。

    • **实现说明:**Windows 桌面安装包必须将两个可执行文件、配置模板、服务注册组件和卸载组件作为一个安装产物交付。
    • 状态:[ ] 安装包尚未实现。
  2. **用户补充:**安装完成后第一次启动时,显示与 CLI 等价的超级管理员配置向导。

    • **实现说明:**Wails 桌面端复用同一套初始化服务和校验规则,不复制业务逻辑;向导完成后可启动核心服务。Scert-admin 不随桌面端或系统自动启动,只有用户明确进入超级管理员密码重置流程时,才允许通过受控本地方式启动,并在操作结束后停止。
    • 状态:[ ] Wails 向导尚未实现。
  3. **用户补充:**桌面端增加“是否开启 Web 页面”按钮。

    • 实现说明:web.enabled 是持久化配置,关闭时桌面端仍可运行本地控制能力,但不启动 Web 管理监听;重新开启必须记录审计日志并重新检查端口和证书状态。
    • 状态:[x] 已完成配置字段和 CLI 参数;桌面端按钮尚未实现。

29.3 双服务和安全边界

  1. **用户补充:**Scert 与 Scert-admin 同包交付。

    • 实现说明:Scert 负责证书管理、Web API、/reset 路由和任务调度;Scert-admin 是不监听网络端口的临时入口激活器,只负责生成一次性校验码并维护短时激活租约。
    • 状态:[x] 已完成独立 Go 入口、无网络监听控制器和主服务 /reset 路由;完整密码修改接口尚未实现。
  2. 实现约束:Scert-admin 不监听任何 TCP/UDP 端口;Scert 主服务固定注册 /reset,但仅在 Scert-admin 运行并持有有效租约时显示重置页面,未激活、停止或租约过期时统一返回 404。

    • **说明:**启动 Scert-admin 时生成一次性校验码,状态文件只保存校验码的 SHA-256 摘要。租约有效期为 90 秒,每 30 秒刷新;正常停止时立即失效,异常退出后最迟在租约过期时失效。systemd 将单次运行最长时间限制为 30 分钟。
    • 状态:[x] 已完成 /reset 临时入口、租约、一次性校验码摘要和安全响应头;密码提交、校验码消费、密码摘要更新、频率限制及审计尚未实现。
  3. **用户补充:**Linux 上的 Scert-admin 不允许开机自启动,只能通过 systemctl start Scert-admin 和 systemctl stop Scert-admin 进行日常启停控制,其他控制命令不作为支持入口。

    • 实现说明:Scert-admin.service 不提供 [Install] 段,不配置自动重启和 ExecReload;安装器不得执行 systemctl enable、systemctl start 或 systemctl restart Scert-admin。安装或升级阶段仅允许为加载新 unit 执行一次 systemctl daemon-reload,日常运维文档只提供 start 和 stop。
    • **安全边界:**systemd 无法阻止 root 或等效权限操作者调用其他管理命令,因此同时依靠无独立网络监听、短时租约、30 分钟运行上限、未激活时返回 404、Restart=no 和 Scert 运行用户降低暴露面;不能宣称对 root 的所有 systemd 命令具有绝对阻断能力。
    • 状态:[x] 已新增 systemd 单元和服务管理说明,安装器及 Linux 实机复审仍待完成。

29.4 本轮暂不视为完成

  • [!] 真实 go-acme/lego 申请和 Web 证书部署。
  • [!] DNS API provider 的凭据加密存储和在线验证。
  • [!] Windows/Linux 安装器、Windows Service、Linux systemd 注册;本轮已完成 Scert-admin 手动启停单元草案,尚未完成安装器注册和 Linux 实机复审。
  • [!] Scert-admin 的完整密码重置协议和审计。
  • [x] 本机防火墙自动配置已完成代码和自动化测试;安装器提权与各目标系统实机复审待完成。
  • [!] 云安全组自动配置不纳入当前自动修改范围,继续由初始化界面提示用户手动放行。
  • [!] 公网 IP 证书在目标 CA 和 lego 版本上的兼容性验证。

三十、本轮 DNS 授权范围与 SSH 推送测试范围补充(2026-08-29)

本节记录本轮用户补充内容,保留前文历史测试记录,便于对照追踪。

30.1 阿里云 RAM DNS 授权范围

  • **用户补充:**本轮测试使用的阿里云 RAM 账号只允许控制以下 DNS 根域名:
    • epwn.uno
    • zedyj.cn
    • szqh.uno
  • **实现说明:**测试代码、示例配置和文档不得保存 AccessKeyId、AccessKeySecret 或其他敏感凭据;DNS 测试应验证授权边界,禁止将操作扩展到未授权域名。
  • 状态:[x] 已记录最新授权域名范围,真实 API 读取验证待在授权环境执行。

30.2 SSH 推送测试服务器

  • **用户补充:**在已有 192.168.2.3 测试机基础上,增加 192.168.2.4 作为证书推送测试机。
  • **实现说明:**测试范围同时覆盖 192.168.2.3 和 192.168.2.4;测试配置不得硬编码到生产配置,且每台服务器必须单独配置 SSH 用户、端口、私钥引用、主机指纹和远程证书路径。
  • 状态:[x] 已更新测试范围说明,实际连接、证书推送和服务重载验证待执行。

30.3 SSH 密钥配置引导

  • **用户补充:**为不熟悉 SSH 密钥生成的用户提供从生成密钥到粘贴公钥的完整指导,并支持更省事的操作方式。
  • **实现说明:**服务器配置页面增加 Windows、Linux/macOS 命令切换;支持复制密钥生成命令、复制公钥安装命令、选择本机私钥文件导入、私钥口令显示/隐藏,以及 Linux 和 Windows OpenSSH 授权位置说明。私钥只在页面内存中读取,保存时由后端加密存储。
  • 状态:[x] 已完成前端引导和中文说明文档,待前端构建和真实浏览器页面复审。