允许生产环境 Agent 通过显式开关使用 HTTP 并发布新版 #181

Open
opened 2026-08-31 23:51:22 +08:00 by ila · 2 comments
Owner

原始需求摘要

  • 来源:用户会话,提出时间 2026-08-31(Asia/Shanghai)。
  • 需求:线上入口当前只有 HTTP,Android Agent 注册报“只允许通过 HTTPS”;确认放宽 Agent HTTP,并要求建单、实施、打包最新版及部署线上。
  • 安全确认:用户已明确回复“确认放宽 Agent HTTP”,接受 Device Token、任务内容和执行结果在 HTTP 链路上明文传输的风险。
  • Gitea 交互说明:当前会话未提供可调用的 Gitea MCP,按仓库规则回退 Gitea API。

目标

  1. 服务端通过显式环境开关允许全部 /api/agent/v1/** 接口在生产模式使用 HTTP;默认仍保持 HTTPS。
  2. Android Debug/Release 均允许配置 HTTP 或 HTTPS 服务端 Origin,并允许 HTTP 明文网络流量。
  3. 线上 185.216.248.75:9527 开启该开关。
  4. 递增 Android 版本号、构建新 APK,部署最新版服务端,并把新 APK 上传到 Admin Agent 版本且设为当前。

非目标

  • 不放宽 PDD 分享链接、SYB、OCR 或其他第三方服务的 HTTPS/主机安全约束。
  • 不改变设备 Token、权限、任务状态机、付款或订单安全门禁。
  • 不配置 TLS 证书或 HTTPS 入口。

前置依赖与并行性

  • 依赖当前 main 分支及 #180 已部署能力。
  • 服务端、Android 和共享文档属于同一安全契约变更,不拆分并行交付。

影响范围

  • server/:Agent 路由 HTTPS 中间件配置及测试。
  • android/:服务端 URL 校验、主清单网络策略、版本号及测试。
  • Wiki:Project Profile、Android Agent API Contract、Local Development and Verification、Deployment and Operations(按实际长期事实更新)。
  • 线上:服务环境变量、服务二进制、Admin Agent 版本。

方案

  • 新增 GOAUTO_ALLOW_INSECURE_AGENT_HTTP,仅值为 true 时在生产模式关闭 Agent HTTPS 强制检查;默认 false。
  • 四组 Agent 路由统一读取同一策略,覆盖注册/心跳、采集、采购、应用版本检查与下载。
  • Android ServerUrlPolicy 对所有构建允许 http/https,主清单显式允许 cleartext。
  • 升级 Android versionCode/versionName,避免已安装 48/0.9.35 的设备无法检测更新。
  • 自动化验证后更新线上 Wiki并同步镜像,再提交推送、构建与部署。

设计证据

非 UI 任务,不需要原型。安全、配置和 API 行为以本工单方案及更新后的长期 Wiki 为设计证据。

验收标准

  • 默认配置下,生产模式 HTTP Agent 请求仍返回 HTTPS_REQUIRED。
  • 显式开启开关后,HTTP 请求能进入注册及其他 Agent 业务处理,不再被 HTTPS 中间件拦截。
  • 受信任的 X-Forwarded-Proto: https 行为保持不变。
  • Android Release 接受 http://185.216.248.75:9527,仍拒绝账号、路径、查询参数和片段。
  • 新 APK 的 versionCode 大于 48,哈希和大小可核验。
  • 线上服务健康,HTTP 注册不再返回 HTTPS_REQUIRED。
  • 新 APK 出现在 Admin Agent 版本并设为当前。

验证

  • 服务端相关 Go 单测与构建。
  • Android URL 策略单测、Debug APK 构建;按环境能力补充 Release 构建。
  • 线上健康检查、HTTP 注册安全响应检查、数据库版本记录及 APK SHA-256 校验。
  • 不执行真实采购、下单或付款。

风险

  • HTTP 明文传输可能泄露或被篡改 Device Token、任务内容、设备状态和执行结果。
  • 开关必须默认关闭且仅由部署环境显式开启。
  • 发布与服务重启属于高风险操作;用户已在本次会话明确确认。

文档影响

有长期文档影响:生产 Agent 传输安全边界、配置项、共享接口与部署方式发生变化,必须更新对应线上 Wiki 并同步只读镜像。

## 原始需求摘要 - 来源:用户会话,提出时间 2026-08-31(Asia/Shanghai)。 - 需求:线上入口当前只有 HTTP,Android Agent 注册报“只允许通过 HTTPS”;确认放宽 Agent HTTP,并要求建单、实施、打包最新版及部署线上。 - 安全确认:用户已明确回复“确认放宽 Agent HTTP”,接受 Device Token、任务内容和执行结果在 HTTP 链路上明文传输的风险。 - Gitea 交互说明:当前会话未提供可调用的 Gitea MCP,按仓库规则回退 Gitea API。 ## 目标 1. 服务端通过显式环境开关允许全部 `/api/agent/v1/**` 接口在生产模式使用 HTTP;默认仍保持 HTTPS。 2. Android Debug/Release 均允许配置 HTTP 或 HTTPS 服务端 Origin,并允许 HTTP 明文网络流量。 3. 线上 `185.216.248.75:9527` 开启该开关。 4. 递增 Android 版本号、构建新 APK,部署最新版服务端,并把新 APK 上传到 Admin Agent 版本且设为当前。 ## 非目标 - 不放宽 PDD 分享链接、SYB、OCR 或其他第三方服务的 HTTPS/主机安全约束。 - 不改变设备 Token、权限、任务状态机、付款或订单安全门禁。 - 不配置 TLS 证书或 HTTPS 入口。 ## 前置依赖与并行性 - 依赖当前 main 分支及 #180 已部署能力。 - 服务端、Android 和共享文档属于同一安全契约变更,不拆分并行交付。 ## 影响范围 - `server/`:Agent 路由 HTTPS 中间件配置及测试。 - `android/`:服务端 URL 校验、主清单网络策略、版本号及测试。 - Wiki:Project Profile、Android Agent API Contract、Local Development and Verification、Deployment and Operations(按实际长期事实更新)。 - 线上:服务环境变量、服务二进制、Admin Agent 版本。 ## 方案 - 新增 `GOAUTO_ALLOW_INSECURE_AGENT_HTTP`,仅值为 true 时在生产模式关闭 Agent HTTPS 强制检查;默认 false。 - 四组 Agent 路由统一读取同一策略,覆盖注册/心跳、采集、采购、应用版本检查与下载。 - Android `ServerUrlPolicy` 对所有构建允许 `http`/`https`,主清单显式允许 cleartext。 - 升级 Android `versionCode`/`versionName`,避免已安装 48/0.9.35 的设备无法检测更新。 - 自动化验证后更新线上 Wiki并同步镜像,再提交推送、构建与部署。 ## 设计证据 非 UI 任务,不需要原型。安全、配置和 API 行为以本工单方案及更新后的长期 Wiki 为设计证据。 ## 验收标准 - 默认配置下,生产模式 HTTP Agent 请求仍返回 `HTTPS_REQUIRED`。 - 显式开启开关后,HTTP 请求能进入注册及其他 Agent 业务处理,不再被 HTTPS 中间件拦截。 - 受信任的 `X-Forwarded-Proto: https` 行为保持不变。 - Android Release 接受 `http://185.216.248.75:9527`,仍拒绝账号、路径、查询参数和片段。 - 新 APK 的 versionCode 大于 48,哈希和大小可核验。 - 线上服务健康,HTTP 注册不再返回 `HTTPS_REQUIRED`。 - 新 APK 出现在 Admin Agent 版本并设为当前。 ## 验证 - 服务端相关 Go 单测与构建。 - Android URL 策略单测、Debug APK 构建;按环境能力补充 Release 构建。 - 线上健康检查、HTTP 注册安全响应检查、数据库版本记录及 APK SHA-256 校验。 - 不执行真实采购、下单或付款。 ## 风险 - HTTP 明文传输可能泄露或被篡改 Device Token、任务内容、设备状态和执行结果。 - 开关必须默认关闭且仅由部署环境显式开启。 - 发布与服务重启属于高风险操作;用户已在本次会话明确确认。 ## 文档影响 有长期文档影响:生产 Agent 传输安全边界、配置项、共享接口与部署方式发生变化,必须更新对应线上 Wiki 并同步只读镜像。
Author
Owner

开始实施。代码基线:9cdb6bb(main)。用户已在 2026-08-31 会话中明确确认放宽 Agent HTTP 及最终线上发布;实现采用默认 HTTPS、仅 GOAUTO_ALLOW_INSECURE_AGENT_HTTP=true 时放宽全部 /api/agent/v1/** 的方案。

开始实施。代码基线:9cdb6bb(main)。用户已在 2026-08-31 会话中明确确认放宽 Agent HTTP 及最终线上发布;实现采用默认 HTTPS、仅 GOAUTO_ALLOW_INSECURE_AGENT_HTTP=true 时放宽全部 /api/agent/v1/** 的方案。
Author
Owner

实施完成,等待验收

实现

  • 服务端新增 GOAUTO_ALLOW_INSECURE_AGENT_HTTP:默认/无效值仍强制 HTTPS,仅显式 true 时放宽全部 /api/agent/v1/**。
  • 注册/心跳、采集任务、采购任务、Agent 版本检查与下载统一使用该策略;GOAUTO_TRUST_FORWARDED_PROTO 语义不变。
  • Android Debug/Release 均接受 HTTP 或 HTTPS Origin,主清单允许 cleartext;仍拒绝带账号、路径、查询参数或片段的服务端地址。
  • Android 版本升级为 0.9.36(versionCode 49)。
  • 第三方 PDD、SYB、OCR 等约束未放宽;未修改支付、订单或任务状态机。

验证

  • server: go test ./... 通过;go build ./... 通过。
  • android: testDebugUnitTest assembleDebug 通过;assembleRelease 通过。
  • python dev_scripts/harness.py check --strict 通过。
  • Wiki 在独立干净工作树执行一次 sync 和一次 sync --check;当前工作区的 docs/12-syb-erp-interface.md 用户改动未覆盖。
  • APK:0.9.36(49),6,242,150 bytes,SHA-256 cdaddea57306f1f149c3ca7657b9e7ed9e336e2b4d8811a99243616a334e6771,Android Debug 签名;Manifest usesCleartextTraffic=true。

长期 Wiki

  • Project-Profile revision 6207da4ffac6b5821eda7869b9ea335b7585826d
  • Business-Rules-and-Glossary revision a49579d398b21029aa23cb42201b54a3bed92643
  • Local-Development-and-Verification revision 0bb8d63fe2a3c6b1021bfa18800f5062de726868
  • Android-Agent-API-Contract revision b074c3ec1b7fc605af3cfa982b60a8e6b6ff3664
  • 新建 Deployment-and-Operations revision 80ae5c8cea87c624fff63ce3e302aa7bf204811e
  • Home revision d5a46210da9dffa27247d80b20ab31b40790e48a

Git 与线上发布

  • 提交并推送:7be57bf feat(agent): allow configured HTTP transport (#181)。
  • 线上发布目录:/home/goauto/releases/20260901-001504-7be57bf;服务二进制 SHA-256 146c3402b2f25af5697dee8d6b4cb14fd48fd678a5b0fd7385c4eea9abe25596。
  • goauto.service 为 active,内部健康接口 HTTP 200,进程环境已加载 GOAUTO_ALLOW_INSECURE_AGENT_HTTP=true。
  • 外部 HTTP 验证:注册/心跳返回 INVALID_REQUEST,采集/采购/版本接口无 Token 返回 DEVICE_TOKEN_INVALID;均已进入业务层,不再返回 HTTPS_REQUIRED。
  • 发布前后运行中采集任务 0、采购任务 0;首次即时健康探测触发自动回滚,调整为有限等待后成功切换,旧发布仍保留可回滚。
  • Admin Agent 版本:48 保留;49 已登记并设为当前。线上 APK SHA-256/大小与本地一致。

未验证与风险

  • 未在真实手机上安装 49,也未使用真实 Device Token 完成注册/心跳;需要用户在设备空闲时安装并连接 http://185.216.248.75:9527 验收。
  • HTTP 仍会明文传输 Device Token、任务内容、设备状态和执行结果;后续配置 HTTPS 后应关闭该开关。
  • 未执行真实采购、创建订单或付款。
## 实施完成,等待验收 ### 实现 - 服务端新增 `GOAUTO_ALLOW_INSECURE_AGENT_HTTP`:默认/无效值仍强制 HTTPS,仅显式 `true` 时放宽全部 `/api/agent/v1/**`。 - 注册/心跳、采集任务、采购任务、Agent 版本检查与下载统一使用该策略;`GOAUTO_TRUST_FORWARDED_PROTO` 语义不变。 - Android Debug/Release 均接受 HTTP 或 HTTPS Origin,主清单允许 cleartext;仍拒绝带账号、路径、查询参数或片段的服务端地址。 - Android 版本升级为 0.9.36(versionCode 49)。 - 第三方 PDD、SYB、OCR 等约束未放宽;未修改支付、订单或任务状态机。 ### 验证 - `server`: `go test ./...` 通过;`go build ./...` 通过。 - `android`: `testDebugUnitTest assembleDebug` 通过;`assembleRelease` 通过。 - `python dev_scripts/harness.py check --strict` 通过。 - Wiki 在独立干净工作树执行一次 `sync` 和一次 `sync --check`;当前工作区的 `docs/12-syb-erp-interface.md` 用户改动未覆盖。 - APK:0.9.36(49),6,242,150 bytes,SHA-256 `cdaddea57306f1f149c3ca7657b9e7ed9e336e2b4d8811a99243616a334e6771`,Android Debug 签名;Manifest `usesCleartextTraffic=true`。 ### 长期 Wiki - Project-Profile revision `6207da4ffac6b5821eda7869b9ea335b7585826d` - Business-Rules-and-Glossary revision `a49579d398b21029aa23cb42201b54a3bed92643` - Local-Development-and-Verification revision `0bb8d63fe2a3c6b1021bfa18800f5062de726868` - Android-Agent-API-Contract revision `b074c3ec1b7fc605af3cfa982b60a8e6b6ff3664` - 新建 Deployment-and-Operations revision `80ae5c8cea87c624fff63ce3e302aa7bf204811e` - Home revision `d5a46210da9dffa27247d80b20ab31b40790e48a` ### Git 与线上发布 - 提交并推送:`7be57bf feat(agent): allow configured HTTP transport (#181)`。 - 线上发布目录:`/home/goauto/releases/20260901-001504-7be57bf`;服务二进制 SHA-256 `146c3402b2f25af5697dee8d6b4cb14fd48fd678a5b0fd7385c4eea9abe25596`。 - `goauto.service` 为 `active`,内部健康接口 HTTP 200,进程环境已加载 `GOAUTO_ALLOW_INSECURE_AGENT_HTTP=true`。 - 外部 HTTP 验证:注册/心跳返回 `INVALID_REQUEST`,采集/采购/版本接口无 Token 返回 `DEVICE_TOKEN_INVALID`;均已进入业务层,不再返回 `HTTPS_REQUIRED`。 - 发布前后运行中采集任务 0、采购任务 0;首次即时健康探测触发自动回滚,调整为有限等待后成功切换,旧发布仍保留可回滚。 - Admin Agent 版本:48 保留;49 已登记并设为当前。线上 APK SHA-256/大小与本地一致。 ### 未验证与风险 - 未在真实手机上安装 49,也未使用真实 Device Token 完成注册/心跳;需要用户在设备空闲时安装并连接 `http://185.216.248.75:9527` 验收。 - HTTP 仍会明文传输 Device Token、任务内容、设备状态和执行结果;后续配置 HTTPS 后应关闭该开关。 - 未执行真实采购、创建订单或付款。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#181