---
phase: 1
name: inventory-guidance
purpose: Phase 1 资产盘点阶段的 Agent 执行指引（SAN 闭包迭代 + DNS 探针 + 三档路径适配）
parent: ../SKILL.md
updated: 2026-04-23
---

# 📦 Phase 1 · 资产盘点指引

> 本文件是 Agent 在 Phase 1 的**执行指引**（不是 checklist）。Agent 按本文件的流程做闭包迭代、DNS 探针、基础设施反推，产出 **资产清单初稿**供客户确认。
> 路径分流（Fast / Standard / Full）的 Phase 1 执行粒度差异见本文件 §5。

---

## 1. Phase 1 的两条核心动作

资产盘点**不是一次性快照**，而是**图遍历直到不动点**（SAN 闭包发现，详见 [`SKILL.md § 0.1`](../SKILL.md)）。每一轮迭代包含两个核心动作：

1. **域名 → 证书**：对每个已知域名查询实际绑定的所有证书（公网 TLS 握手 + CT 日志 + 云 API 绑定关系）
2. **证书 → 域名**：对每张已发现证书读出 SAN 清单中的所有 FQDN 和通配符

### 收敛条件（E2-b′ 上限）

| 维度 | 默认上限 | 触达后的行为 |
|------|---------|-------------|
| 迭代深度 | ≤ 3 轮 | 停下，呈现当前发现清单，征询客户"是否继续深挖" |
| DNS zone 数 | ≤ 5 个 | 停下，呈现新发现 zone 列表，征询客户"是否纳入本次变更" |
| 证书数 | 软上限 ≤ 10 张 | 高亮提示，让客户判断是否存在"僵尸证书" |

**收敛判定**：某一轮迭代**没有**发现新的域名、新的证书、新的 zone → 宣告闭包收敛完成。

---

## 2. 按授权状态分支执行

### 分支 A（首选 · 客户授权了云 API 只读凭证）

1. 按 `SKILL.md § 0.1` 授权协议先说明 4 项，得到客户 "同意调用" 后
2. 调用 🟢 只读 API + 🟡 探测（CT 日志 / TLS 握手）
3. **DNS 探针子流程**（若客户亦授权了 DNS 只读 API）：
   - 按 `SKILL.md § 0.1` 作用域原则（N2′）组合待查询的 FQDN 清单
   - 明示客户："我将查询以下 FQDN 的 A/AAAA/CNAME/CAA/TXT 记录：[列表]"
   - 基于查询结果做基础设施反推，每条结论按 **【证据 / 推断 / 请确认】** 三段式交客户核验
   - 客户未确认前，DNS 反推结果均以 **【待确认】** 标记，不液化到资产清单
4. **闭包迭代中的跨 zone 分支**：若新发现域名位于已授权 zone 之外的新 zone，立即停下，要求客户对新 zone 单独授权或明示"不纳入本次变更"
5. 实时汇报每次调用的用途与结果摘要，不落盘凭证

### 分支 B（回退 · 零授权或自建 Agent 访不到）

1. 生成「只读命令清单」给客户本地执行
2. **DNS 降级项**：若客户愿意一次性提供 zone export / CSV，Agent 可做一次性基础设施反推（遵循 M1-b 透明度原则）
3. **闭包迭代仍然适用**：客户返回每一批执行结果后，Agent 对新发现的 SAN / 域名同样按 E3-c 批量勾选

### 混合模式（最常见）
- 公有云资源走分支 A；自建 Nginx/K8s 走分支 B
- DNS 按实际授权状态选分支
- 不同 zone 可独立选不同分支（例：`.com` 走 API、`.com.cn` 走一次性 CSV）

---

## 3. 证书类型对闭包遍历的影响

| 证书类型 | SAN 结构 | 闭包遍历行为 |
|---------|---------|-------------|
| **T1 单域名（SD）** | 1 个 FQDN | 最简单，仅需"域名 → 证书 → 可能的其他 SAN"一轮即可收敛 |
| **T2 通配符（Wildcard）** | 1 个通配符（可能附裸域） | **需要展开子域**（按 §4 通配符展开分层执行）|
| **T3 多域名（SAN / UCC · 单 zone）** | 多个确定 FQDN，同一 DNS zone | 每个 SAN 独立反查，**无需展开** |
| **T4 多域名跨 zone** | 多个确定 FQDN，跨 2+ DNS zone | 每个 zone 独立授权 + 每个 SAN 独立反查（跨 zone 硬边界，详见 §6）|

> ⚠️ **事实校准**：多域名证书（SAN/UCC）的 SAN 是多个**确定的 FQDN**，不是多个通配符。"多通配符混合"证书现实中非常少见，本 Skill 不按主流形态设计。

---

## 4. 通配符展开分层规则（E4-b · 仅 T2 触发）

发现一个通配符 SAN（如 `*.api.example.com`）时，按"CT 先行、DNS 精补"分层执行：

| 层 | 动作 | 授权要求 | 作用 |
|---|---|---|---|
| **L1 CT 日志反查** | 查询 crt.sh / Cert Spotter，列出曾被签发给通配范围内的所有 FQDN | 零授权（CT 是公共日志）| 广度发现，可跨 zone 自由查询 |
| **L2 DNS 探针** | 对 L1 发现的 FQDN，结合 `_acme-challenge` / A / AAAA 记录确认当前活跃状态 | **每个 zone 独立授权** | 精度补全，区分"历史签发但已下线" vs "当前活跃服务" |

---

## 5. 路径分流的 Phase 1 粒度适配

| 路径 | Phase 1 执行粒度 |
|------|-----------------|
| 🟢 **Fast Path** | 种子证书 SAN ≤ 3 且 zone = 1，跳过完整闭包迭代，只做一次性 SAN 展开 + 手工确认部署点（≤ 3 个） |
| 🟡 **Standard Path** | 完整闭包迭代（最多 3 轮），按分支 A/B 选择，DNS 探针按需启用 |
| 🔴 **Full Path** | Standard + 跨 zone 多源发现 + 影子证书溯源（详见 `02-scope-lock-and-reflow.md`）|

---

## 6. SAN 极少时的反向扩展启发式

当 SAN 数 ≤ 3 时，传统闭包发现 1 轮就收敛，价值大幅缩水。Agent 应启用**反向扩展启发式**：

- **启发式 1**：DNS zone 内同 IP 子域扫描（其他 FQDN 可能用同一张证书）
- **启发式 2**：CT 日志历史证书扫描（`qq.com` 历史签过哪些证书，可发现影子/兄弟证书）
- **启发式 3**：CT 日志旁系证书扫描（主站 + 移动站 + WAP 站常归同团队管，可能一起轮换）

触发条件：
- SAN ≤ 3 且无 Fast Path 准入限制 → 默认启用
- Fast Path 场景 → 询问客户"要不要我顺手做一下反向扫描（~5 min）"

---

## 7. 部分授权阻塞的降级策略

**场景**：多 zone 场景下，部分 zone 授权未就位（走审批 / 凭证丢失），但整体闭包不能干等。

**降级策略**：
- **已授权 zone**：正常闭包
- **未授权 zone（授权等待中）**：走 **CT log 外部视图**（crt.sh 查历史签发）替代 DNS 探针
- **未授权 zone（凭证彻底丢失）**：生成 "授权缺口报告"，上报客户侧决策（可能触发资产瘦身，详见 `02-scope-lock-and-reflow.md`）
- 资产清单中对应条目标记为 **【CT-only · 授权等待中】** 或 **【凭证丢失 · 需决策】**

---

## 8. Phase 1 交付产物（按路径分流）

### Fast Path 产物
```markdown
# 资产清单（Fast Path · Lite）
- 种子证书：[CN] / SAN: [...]
- 绑定点清单：3 项内
- 反向扫描结果（如启用）：X 条旁系，Y 条无关
- ⛔ 等客户确认，进入 Phase 4（Fast Path 直接跳 Phase 2/3/5）
```

### Standard Path 产物
```markdown
# 资产清单 v1.0
## 主证书
- [CN] / Issuer / SAN 清单 / 过期日 / 剩余天数

## 闭包发现结果
- 活跃 FQDN 清单（按 zone 分组）
- 基础设施反推结论（【证据 / 推断 / 请确认】格式）
- 新发现证书（按 E3-c 批量呈现）

## 待解悬项（L2 假设栏候选）
- [?] 客户未确认项
- [?] 未知来源的 CAA / ACME 记录等

⛔ 等客户确认后进入 Phase 2
```

### Full Path 产物
```markdown
# 资产清单 v1.0 + 扩展
## Standard 全部内容 +

## 资产分类（见 04-planning-playbook.md）
- A. 主品牌核心
- B. 主品牌边缘
- C. 收购遗留
- D. 影子资产
- E. 历史废弃

## 跨 zone 授权状态矩阵
| Zone | DNS 商 | 授权 | 闭包方式 |
|------|--------|------|---------|
| ... | ... | ✅/⏳/🔴 | DNS+CT / CT-only |

## 未知资产追踪表
| 未知项 | 发现方式 | 负责人 | 目标日 | 回填位置 |
| ... | ... | ... | ... | ... |

⛔ 等客户做 Scope Lock 仪式（见 02-scope-lock-and-reflow.md）后进入 Phase 2
```

---

## 9. 相关文件

- [`../SKILL.md`](../SKILL.md) — SAN 闭包发现与 DNS 探针的根本能力定义、复杂度分流三档
- [`02-scope-lock-and-reflow.md`](./02-scope-lock-and-reflow.md) — Phase 2 的 Scope Lock + 回流机制
- [`03-risk-assessment-playbook.md`](./03-risk-assessment-playbook.md) — Phase 3 风险评估方法论
