13 网络、代理与证书工具
网络、代理与证书工具解决的是“开发环境为什么访问不到、为什么证书不被信任、为什么同一服务在浏览器、CLI、IDE、容器和 CI 里表现不一致”。排障必须先证明故障发生在哪一层,再决定改 DNS、代理、信任库、客户端配置还是服务端,而不是轮流关闭证书校验和防火墙碰运气。
架构师看这一类工具,重点不是背命令,而是建立证据链:DNS 是否解析正确,TCP 端口是否可达,TLS/SNI/证书链是否匹配,HTTP 代理是否介入,业务请求是否带了正确身份,抓包证据是否可脱敏共享,临时隧道是否把本地敏感端口暴露到了公网。
从失败现象选择第一组证据
| 失败现象 | 首个入口 | 必须留下的证据 |
|---|---|---|
| 域名不解析、端口超时或路由异常 | 连通性 CLI | DNS 答案、目标 IP、TCP 结果、路由节点和执行网络 |
| Git、npm、Maven、Docker 或 IDE 只有部分可联网 | 系统与工具代理 | 每层代理来源、NO_PROXY、daemon / build / runtime 差异 |
| 浏览器正常而 Java、Node 或容器报证书错误 | OpenSSL、mkcert 与 keytool | SNI、证书链、指纹、信任库 alias 和回滚命令 |
| 需要观察或重放受控 HTTPS 请求 | Charles、Fiddler 与 mitmproxy | 代理路径、临时 CA、过滤条件、脱敏会话和清理记录 |
| 需要证明 DNS、TCP、TLS 在线路上的实际行为 | Wireshark | 网卡、过滤器、时间窗、五元组和脱敏 pcap |
| Webhook 或移动端需要短时访问本地服务 | ngrok、Cloudflare Tunnel 与 frp | 公开 URL、认证、允许路径、启动者、到期和关闭证据 |
开始操作前,应确认目标属于开发、测试、演示或授权排障环境,明确本机处于公司内网、VPN、代理、TUN、容器、WSL 还是 CI runner,并准备不含真实密码、token、Cookie 和业务数据的测试请求。抓包、临时 CA、代理和隧道都要在任务结束时从系统信任链、启动项、IDE 和团队模板中回收。
一次分层网络验证
每一次网络排障都应该留下最小证据包:执行了哪些命令,在哪个网络、哪个终端、哪个容器或哪个 IDE 里执行,目标域名和端口是什么,代理是否启用,证书链来自哪里,失败现象是解析失败、连接超时、连接拒绝、证书错误、代理认证失败、HTTP 错误还是业务错误。
团队治理原则
| 原则 | 判断标准 |
|---|---|
| 分层验证 | 浏览器通不代表 CLI 通,宿主机通不代表容器通,IDE 通不代表 Maven / npm / Docker 通 |
| 显式代理 | 每个工具都要能说清代理来源:系统、环境变量、工具配置、IDE 配置、daemon 配置或容器变量 |
| 证书可回滚 | 每一次导入根证书、抓包 CA 或企业 CA,都必须有 alias、路径、指纹、用途和删除命令 |
| 抓包最小化 | 只抓受控域名、短时间、小样本;导出 HAR、SAZ、flow、pcapng 和 key log 前必须脱敏 |
| 隧道默认危险 | 任何把本地端口映射到公网的工具,都要默认加认证、限定服务、限定生命周期并记录关闭动作 |
| 模板不带秘密 | 文档、脚本、截图、配置示例只写占位符和判断标准,不写真实 token、Cookie、证书私钥和内网域名 |
最容易制造假象和扩大事故的地方
系统代理不是全局真理
Windows 用户代理、WinHTTP、macOS 网络服务代理、Linux 环境变量、Git 配置、npm 配置、Maven settings.xml、Docker daemon、Docker build、容器运行时、IDE 插件和语言服务器都可能各走一套规则。团队文档不能写“配置系统代理即可”,必须逐层验证。
证书信任链有多个世界
浏览器信任不等于 Java 信任,Java 信任不等于 Node 信任,宿主机信任不等于容器信任,Docker 拉镜像信任不等于容器内应用信任。只要企业 HTTPS 拦截、本地自签、mkcert、抓包 CA 或内网 CA 参与,就要把 OS、浏览器、JDK、Node、Docker host、镜像和运行容器分开检查。
抓包文件就是敏感数据文件
HAR、SAZ、mitmproxy flow、pcapng、TLS key log、Charles session、Fiddler export 都可能包含 Authorization、Cookie、请求体、响应体、设备标识、内部域名和用户数据。它们不能当普通日志贴到工单和群聊里。
临时隧道会绕过很多默认防线
ngrok、Cloudflare Tunnel quick tunnel、frp 都能让本地服务被外部访问。它们适合 Webhook、移动端回调和短时演示,但不适合无认证暴露管理台、数据库、Redis、MQ、Jenkins、Kibana、Actuator、Swagger 或本地文件服务。
团队落地文件建议
docs/tools/network/
connectivity-checklist.md
proxy-layer-matrix.md
certificate-trust-boundary.md
capture-and-redaction-policy.md
tunnel-exposure-policy.md
scripts/network/
check-connectivity.sh
check-proxy-env.ps1
check-cert-expiry.sh这些模板只沉淀“怎么验证、怎么回滚、怎么脱敏、谁负责”,不沉淀真实代理账号、企业根证书私钥、抓包 CA 私钥、公网隧道 token 和生产内网地址。
