Skip to content

Enforce TLS for public HTTP, WebSocket, and object-storage transport #80

Description

@ULookup

Target Version

3.0-dev。该版本线当前定义 Gateway、Push 和 Media 的公开传输边界;证据复核于提交 a75fc8721b99e5c0b4421d0c58b5618bbe71ff31

Evidence

  • gateway/source/gateway_server.h:84-88,207 使用明文 httplib::Server 监听 0.0.0.0:9000,仓库没有 TLS termination profile。
  • push/source/connection.hpp:3,13 使用 websocketpp::config::asio_no_tls,Compose 直接暴露 9001
  • common/infra/s3_client.hpp:61-65 可选择 HTTPS scheme,但无条件设置 verifySSL=false
  • docker-compose.yml 直接向宿主机暴露 Gateway、Push,以及 etcd、MySQL、Redis、RabbitMQ、Elasticsearch 和全部内部 RPC 端口。
  • 仓库没有证书注入、CA trust、WSS/HTTPS 验证、证书轮换或过期告警契约。
  • 因此 token、WebSocket auth、消息和 presigned object requests 在仓库提供的部署路径中没有可验证的传输机密性与服务端身份校验。

Problem or Goal

为所有公开客户端入口和对象存储链路建立可执行的 TLS 信任边界,使正式部署只接受 HTTPS/WSS,S3 HTTPS 必须校验证书,并把内部依赖/RPC 端口限制在非公开网络。

Scope

  • 为 Gateway HTTP 与 Push WebSocket 提供统一、可部署的 TLS termination 或原生 TLS profile。
  • 禁止正式 profile 直接暴露明文 HTTP/WS;定义可信代理头、客户端地址和升级连接边界。
  • S3 HTTPS 默认并强制验证 CA、hostname 和证书有效期,测试环境使用显式测试 CA。
  • 只公开必要的客户端端口;MySQL、Redis、RabbitMQ、etcd、ES 和 brpc 端口留在内部网络。
  • 定义证书/CA 的 Secret 注入、轮换、回滚、过期告警和启动失败行为。
  • 增加 TLS/WSS、无效证书、错误 hostname、明文降级和代理伪造测试。

Non-goals

Acceptance Criteria

  • 正式部署 profile 只向客户端提供 HTTPS 和 WSS;明文请求被拒绝或安全重定向且不携带凭据。
  • Gateway 与 Push 的认证、trace 和错误 envelope 在 TLS termination 后保持原契约。
  • S3 HTTPS 对不受信 CA、过期证书和 hostname mismatch 均 fail closed;正式配置不能设置 verifySSL=false
  • 公开网络无法直接访问数据库、缓存、MQ、etcd、ES 或 brpc 端口。
  • 私钥和 CA 通过 Secret 边界注入,文件权限、轮换和失败日志不泄露内容或指纹。
  • FN-SEC-07 覆盖 HTTPS/WSS 正常路径、明文降级、无效证书与代理头伪造。
  • runbook 包含签发、部署、轮换、回滚、过期告警和验证命令。
  • 安全扫描/contract 阻止 asio_no_tls、正式 verifySSL=false 和公开内部端口回归,或仅允许有审计的本地开发豁免。

Test-first Plan

预留 FN-SEC-07。先在隔离测试栈运行 HTTPS/WSS 与 S3 证书校验用例,当前预期 RED 是客户端入口仅支持明文、S3 接受未验证证书或内部端口可从宿主公开访问。最小 GREEN 先建立 TLS termination、WSS 和 S3 fail-closed,再运行完整 FN-SEC、BVT、WebSocket、Media 与部署 contract。

Risk and Security

错误的 TLS rollout 会造成全量连接失败、WebSocket 无法升级或 presigned URL 不可用。必须支持新旧证书短期重叠、分阶段验证和快速回滚,但不得在正式环境保留明文 fallback。代理头只信任明确 allowlist 的 termination hop;私钥、token、URL 和证书派生指纹不得进入日志。

Architecture Impact

Yes。新增公开 TLS termination/信任边界、证书 Secret 边界和内部网络隔离,改变部署拓扑但不改变业务服务所有权。

Core-flow Impact

Yes。HTTP、WebSocket 和对象直传的传输层与失败行为改变;认证身份、消息顺序、存储真相源和业务 payload 不变。

Required Skill Updates

  • .agents/skills/chatnow-orienting/references/technology-stack.md
  • .agents/skills/chatnow-orienting/references/repository-map.md
  • .agents/skills/chatnow-orienting/references/core-flows.md
  • .agents/skills/chatnow-testing/references/case-catalog.md
  • canonical security/deployment/operations runbook

Metadata

Metadata

Assignees

No one assigned

    Labels

    Severity/S0area/infra跨系统基础设施bugSomething isn't workingsecurity安全类缺陷(凭据泄露/鉴权绕过/fail-open)

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions