简要定义
证书就绪状态描述”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 证书移出可见的活跃生命周期,并保留必要的审计历史,不会影响仍在使用中的证书。