# IwoooS DNS / TLS / certbot 只讀清冊

| 項目 | 內容 |
|------|------|
| 日期 | 2026-06-11 |
| 狀態 | `repo_only_inventory_ready` |
| 工具 | `scripts/security/domain-tls-certbot-inventory.py` |
| Snapshot | `docs/security/domain-tls-certbot-inventory.snapshot.json` |
| Schema | `docs/schemas/domain_tls_certbot_inventory_v1.schema.json` |
| runtime gate | `0` |

## 1. 目的

公開入口的風險不只在 Nginx conf 本身，也包含 domain、TLS certificate path、ACME challenge path、admin route、WebSocket 與 upstream 的對應關係。本清冊把這些關係從已提交的 Nginx source-of-truth 轉成可重跑的只讀證據，讓 owner review 有一致欄位。

本階段不做 DNS 查詢、不連線 TLS、不執行 certbot、不 SSH、不讀 TLS private key 內容、不 reload Nginx、不改主機。

## 2. 目前 repo-only 摘要

| 指標 | 值 |
|------|----|
| Nginx source config | `3` |
| managed domain | `14` |
| TLS certificate path | `10` |
| ACME challenge domain | `7` |
| 需要 owner 確認的 certificate path 關係 | `4` |
| admin route domain | `1` |
| WebSocket route domain | `6` |
| owner request / received / accepted | `0 / 0 / 0` |
| runtime gate | `0` |

## 3. 需要 owner 確認的項目

以下不是判定錯誤，也不是 live TLS 失效結論；它只表示 repo template 的 `server_name` 與 certificate path 目錄名稱不同，需 owner 確認是否由 SAN、wildcard 或共用憑證合法覆蓋。

| domain | certificate path domain | 狀態 |
|--------|--------------------------|------|
| `gitea.wooo.work` | `sentry.wooo.work` | 需 owner 確認 |
| `langfuse.wooo.work` | `sentry.wooo.work` | 需 owner 確認 |
| `signoz.wooo.work` | `sentry.wooo.work` | 需 owner 確認 |
| `tsenyang.com` | `www.tsenyang.com` | 需 owner 確認 |

## 4. owner response 欄位

任何 domain / TLS / certbot 變更或確認，都至少要具備：

1. `owner_role_or_team`
2. `decision`
3. `decision_reason`
4. `affected_scope`
5. `redacted_evidence_refs`
6. `followup_owner`
7. `rollback_owner`
8. `maintenance_window`
9. `validation_plan`

## 5. 2026-06-14 Owner Confirmation Request

已新增 `docs/security/DOMAIN-TLS-CERTBOT-OWNER-CONFIRMATION-REQUEST.md` 與 `docs/security/domain-tls-certbot-owner-confirmation-request.snapshot.json`，將 4 個需確認的 certificate path 關係轉成 owner confirmation request 草稿。

目前固定為 `owner_confirmation_request_count=4`、`c0_owner_confirmation_request_count=4`、`required_owner_field_count=9`、`confirmation_question_count=5`、`rejection_guard_count=12`、`owner_response_received_count=0`、`owner_response_accepted_count=0`、`runtime_gate_count=0`。

此 artifact 只表示未來可向 owner 請求 SAN / wildcard / 共用憑證覆蓋關係的脫敏確認；不代表 request sent、recipient confirmed、owner response received / accepted、DNS query、live TLS probe、certbot renew、Nginx reload、host write、production write 或 runtime gate。

## 6. 指令

更新 snapshot：

```bash
python3 scripts/security/domain-tls-certbot-inventory.py \
  --root . \
  --generated-at 2026-06-11T18:40:00+08:00 \
  --output docs/security/domain-tls-certbot-inventory.snapshot.json
```

只輸出目前清冊：

```bash
python3 scripts/security/domain-tls-certbot-inventory.py --root .
```

## 7. 邊界

1. 本清冊不執行 DNS query。
2. 本清冊不做 live TLS probe。
3. 本清冊不執行 certbot renew。
4. 本清冊不讀 TLS private key 內容，只記錄 certificate / key path metadata。
5. 本清冊不 SSH、不 reload / restart Nginx、不修改主機、不改 DNS。
6. IwoooS UI 可顯示 domain / TLS 清冊，但不得把清冊可見視為 owner 已確認或 runtime 已授權。

## 8. 完成度

| 工作 | 完成度 | 說明 |
|------|--------|------|
| repo-only domain / TLS 清冊 | `100%` | 已從 Nginx source-of-truth 產出 domain、cert path、ACME、admin、WebSocket 與 upstream 摘要 |
| owner confirmation queue | `100%` | 已列出 4 個需確認的 certificate path 關係 |
| owner confirmation request artifact | `100%` | 已新增 request 草稿、snapshot 與 guard；request sent / received / accepted 仍為 0 |
| IwoooS 前台只讀呈現 | `待本輪部署驗證` | 只顯示摘要與邊界，不提供操作按鈕 |
| live DNS / TLS validation | `0%` | 尚未批准；不得用本清冊替代 live probe |
| certbot renew / Nginx reload | `0%` | 未授權，未執行 |

## 9. Preflight 銜接

`docs/security/PUBLIC-GATEWAY-PREFLIGHT-INVENTORY.md` 會把本清冊中的 domain、TLS certificate path、ACME、admin route 與 WebSocket 影響面，轉成 public gateway reload / route change 前的 route smoke 與 owner check 條件。

此銜接仍不代表 DNS 查詢、TLS probe、certbot renew、Nginx reload 或主機寫入已授權。
