Skip to content

证书

TLS 证书的签发、续期与状态。

Updated View as Markdown

简要定义

证书就绪状态描述”HTTPS 是否可用”,它和应用运行状态、域名所有权状态是完全独立的维度——一个资源可以已经成功部署、健康检查全部通过,但证书还没就绪;反过来证书就绪也不代表应用一定健康。

为什么存在这个概念

如果证书状态和部署状态混在一起报告,用户没法判断到底该重新部署应用,还是该等待证书签发。把证书就绪拆成独立、可观察的状态,能让”HTTPS 打不开”这个问题精确定位到证书链、私钥匹配、Hostname 覆盖范围或过期时间中的具体一项。

证书就绪需要同时回答三个问题:Appaloft 是否有可用于这个 hostname 的证书材料?证书是否覆盖当前 hostname 且未过期?代理是否已经在用这份证书对外提供 HTTPS?签发或导入完成只表示候选材料已经安全存储;Appaloft 还会把候选证书应用到当前服务路由,并通过 hostname/SNI 直连代理核对实际返回的叶证书指纹。只有三项都通过,域名才会进入 ready

切换期间,当前可用证书继续服务。若材料应用、代理重载或指纹核对失败,Appaloft 会回滚候选配置,域名保持 pending/not-ready,不会用“已存储”冒充“已生效”。Docker Compose 路由只在能按 project/service 标签唯一定位一个服务容器时切换;多副本和暂不支持的运行目标会安全拒绝。

在 Web / CLI / API 中的体现

Appaloft 支持两种证书来源:

  • 自动签发或续期 — 提供 hostname 和所有权证明,由 Appaloft 负责签发流程。
  • 导入证书 — 提供证书链、私钥和相关元数据;私钥是 Secret,任何界面、日志或诊断信息都不会回显完整内容。

已有 TLS 域名可以在 Web 的域名绑定详情页切换策略,也可以运行 appaloft domain-binding configure-certificate-policy <domainBindingId> --policy auto|manual。 切换到 manual 后等待新的证书导入;切换到 auto 后等待签发。命令本身不会导入、签发或提前替换当前证书。

# 查看证书状态和签发历史(不会返回证书 PEM 或私钥)
appaloft certificate show <certificateId>

# 对签发/续期失败的证书重试(只重试证书环节,不会重新触发域名所有权验证)
appaloft certificate retry <certificateId>

# 撤销一个不再使用的证书
appaloft certificate revoke <certificateId>

常见误区

  • 把证书失败当成部署失败:应先确认应用运行状态和生成访问地址是否正常,再单独排查证书。
  • 认为删除域名绑定会自动撤销证书:两者是独立的生命周期,删除绑定不会自动 revoke 或 delete 证书,反之亦然。
  • 在续期失败后直接重新部署应用:续期失败通常和域名所有权、DNS 指向或证书材料有关,与应用本身无关。
  • 把导入成功当成代理已经切换:导入只完成候选材料存储;应等待代理激活和 SNI 指纹证明完成。

相关任务

进阶细节

续期失败时的排查顺序:确认域名所有权是否仍然有效 → 确认 DNS 是否仍指向当前代理入口 → 确认证书材料是否过期/链不完整/私钥不匹配 → 确认代理是否成功加载了新证书。certificate delete 只会把非 active 证书移出可见的活跃生命周期,并保留必要的审计历史,不会影响仍在使用中的证书。

Navigation

Type to search…

↑↓ navigate↵ selectEsc close