4.3 KiB
4.3 KiB
HTTP-01 验证部署说明
范围与前提
- 在托管域名的编辑窗口选择“HTTP-01(网站验证)”;历史域名和未指定方式的新域名默认 DNS-01。
- 单域名和不含泛域名的 SAN 证书可选择 HTTP-01。主域名或任何 SAN 包含泛域名均拒绝,不能自动降级或改用其他验证方式。
- 这是托管证书的验证方式,不改变管理后台首次初始化的 DNS 验证、管理证书信任或就绪检查要求。
- 域名的全部有效 A/AAAA 入口都必须将该域名 80 端口的挑战路径交给运行 Scert 的同一实例。多节点入口需统一反代到该实例,不能把挑战随机分配给独立进程。
- 不自动改动 DNS、不覆盖业务站点、不新增公网应用端口。证书推送服务器不是挑战服务,除非其对应站点明确反代挑战路径。
Nginx 接入
- 将
deploy/nginx/http-challenge.conf.example中的__UPSTREAM_PORT__替换为 Scert 回环 HTTPS 端口,将__MANAGEMENT_HOST__替换为上游管理证书覆盖的域名。所有占位符需替换后再加载。 - 将生成的片段放到仅管理员可写的绝对路径;在每个待签发域名已有的 80 端口 server 块中 include 此文件。没有站点的域名由管理员创建精确 server_name,不使用 default_server。
- 不允许保留 server 级的重定向 return 或会提前改写挑战的 rewrite;将普通 HTTPS 跳转移到
location /。挑战自身不依赖申请目标域名已经有 HTTPS 证书。 - 管理站点示例
Scert.conf.example新增__HTTP_CHALLENGE_SNIPPET_PATH__,填写上一步绝对路径。该示例只覆盖管理域名,不能当作所有托管域名已接入。 - 保留原始请求 Host;TLS 的 SNI 单独使用管理域名。保留
proxy_ssl_verify on和可信 CA,不通过关闭校验绕过上游错误。 - 检查 Nginx 配置后重载。未知令牌应直接返回 404、无缓存、无 SPA 页面或重定向。实际订单必须通过正常公共 DNS 执行签发,固定 IP、hosts 映射及内部测试不能替代生产验收。
安全与生命周期
- 挑战按订单、域名和令牌隔离,只允许 GET/HEAD,不使用客户端的 X-Forwarded-Host 决定域名。
- 签发结束、失败、取消均清理订单;存储上限 4096 条,单挑战有效期 15 分钟。进程重启后不恢复过期挑战,未完成订单按既有失败与重试机制处理。
- 应用常规访问日志不记录挑战令牌,Nginx 片段关闭挑战访问日志;未知请求不回显敏感内容。
- HTTP-01 不读取或校验 DNS 凭据,但不会放开项目证书管理、部署、重试及执行前的实时授权。
- API 字段为
challenge_type,允许dns-01或http-01。创建时缺省为 DNS-01;更新时省略字段保留现有方式;非法值拒绝。HTTP-01 保存时清空不适用的dns_provider。
当前验收边界
2026年10月4日03:55(UTC+8)补充:第一台已升级至系统设置权限修复版 c5774f3,Linux 全量、vet 与相关权限竞态通过;HTTP-01 实现未修改,升级后 80 未知挑战仍为无缓存四百零四。以下协议和 Nginx 历史证据保留,公共 CA 签发仍未验收。
2026年10月4日03:14(UTC+8):正式代码与前端已接入,前端 279 项、Linux 全量、vet 和专项竞态通过;真实独立 Nginx 十项、SQLite/MySQL 8.0.46/PostgreSQL 14.24 迁移专项通过。干净 9c26db0 官方 Linux 包已部署第一台,80 挑战路径内部检查通过;未知令牌无缓存 404,业务仍跳转 HTTPS,上游严格 TLS 不变。
第一台实际文件为 /etc/nginx/conf.d/scert-odacm.conf 和 /etc/nginx/snippets/scert-http-challenge.conf;仅接入管理域名对应 server,不表示其他托管域名已配置。Nginx reload 后最初请求曾由旧 worker 返回 301,随后重复检查已按新配置返回 404,原观察不隐藏。
正常公共 DNS 仍指第二台,尚未切换。真实 lego 客户端已在隔离 CA 完成单域名、SAN、拒绝及取消的协议回归和五轮竞态,验证注册签名、账户绑定挑战、CSR 与证书链,不替换签发器。隔离 CA 不是公共 CA,测试目录的传输重定向不属于公共 DNS 证据;公网签发和三库首次 Web 仍待完成,不关闭 P1-03 或整体验收。