管理端全部功能跑通

This commit is contained in:
robin
2026-02-27 10:35:22 +08:00
parent 4d275c921d
commit 150799f41d
263 changed files with 22664 additions and 4053 deletions

View File

@@ -0,0 +1,92 @@
# SNI隐匿开发计划HTTPDNS专项
## 0. 目标
在明文网络层DNS 与 TLS ClientHello中不出现真实业务域名真实业务域名仅出现在加密后的 HTTP 层Host / :authority中传输。
## 1. 固定原则
1. 只做 SNI 隐匿能力,不引入其他无关能力描述。
2. 客户端不走系统 DNS 解析业务域名。
3. TLS 握手阶段不发送真实业务域名 SNI。
4. CDN/WAF 节点必须支持“空SNI接入 + Host路由”。
5. 真实域名只在 HTTPS 加密通道内携带。
## 2. 端到端链路(目标形态)
1. App 调用 SDK请求解析业务域名。
2. SDK 从 HTTPDNS 获取业务域名对应的“接入 IP 列表”(不是业务域名 DNS
3. SDK 直连接入 IP 发起 TLS
- SNI 置空(或不发送)
- 不出现真实业务域名
4. TLS 建立后发起 HTTPS 请求:
- Host / :authority = 真实业务域名
5. CDN/WAF 节点在解密后读取 Host将流量路由到对应业务源站。
## 3. SDK 改造要求
### 3.1 连接行为
1. 提供“按 IP 直连”的请求通道。
2. TLS 握手时固定空 SNI不允许带真实域名。
3. HTTP 层强制写入真实 Host / :authority。
### 3.2 证书校验
1. 仍必须做证书链校验(不允许关闭 TLS 安全校验)。
2. 证书校验目标为接入层证书CDN/WAF 对外证书),而非业务源站证书。
### 3.3 多IP与容错
1. HTTPDNS 返回多个接入 IP 时SDK 按顺序/策略重试。
2. 连接失败可切换下一 IP。
3. 缓存与过期策略保持稳定,避免频繁抖动。
### 3.4 多端一致性
1. Android/iOS/Flutter 需保证一致行为:
- 空 SNI
- Host 注入
- 失败重试策略
2. 文档与示例代码同步更新。
## 4. CDN/WAF 节点改造要求
### 4.1 TLS 接入
1. 支持无 SNI ClientHello 的 TLS 握手。
2. 为接入域名部署有效证书(覆盖客户端连接目标)。
### 4.2 路由逻辑
1. 以 Host / :authority 作为业务路由主键。
2. 路由匹配前做标准化:
- 小写化
- 去端口
3. Host 未命中时返回明确错误4xx禁止兜底到默认站点。
### 4.3 回源行为
1. 节点到源站可继续使用 HTTPS 回源。
2. 回源主机名与证书校验按现有网关策略执行。
### 4.4 可观测性
1. 增加日志字段:
- `tlsSniPresent`(是否携带 SNI
- `host`
- `routeResult`
2. 可按“空SNI请求占比、Host路由命中率”监控。
## 5. 控制面(管理端)要求
1. 页面仅展示“已启用 SNI 隐匿空SNI不提供策略切换。
2. 集群侧需可检查“节点是否支持空SNI接入”。
3. 发布配置时支持灰度与回滚。
## 6. 验收标准
1. 抓包验证:
- DNS 明文流量中不出现真实业务域名
- TLS ClientHello 中不出现真实业务域名 SNI
2. 请求验证:
- HTTPS 请求 Host 为真实业务域名
- CDN/WAF 按 Host 正确路由
3. 稳定性验证:
- 多 IP 切换成功
- 节点故障时请求可恢复
## 7. 上线顺序
1. 先升级 CDN/WAF 节点能力空SNI接入 + Host路由
2. 再升级 SDK空SNI + Host注入
3. 最后按应用灰度开启,观察指标后全量。
## 8. 风险与约束
1. 若 CDN/WAF 不支持空 SNI链路会在握手阶段失败。
2. 若 Host 路由不严格,可能出现串站风险。
3. 若客户端错误关闭证书校验,会引入严重安全风险。