Skip to content

feat(tencent-ssl): add Tencent SSL Certificate service package#280

Open
dingzhejianjian wants to merge 4 commits into
chaitin:mainfrom
dingzhejianjian:dingzhejianjian-patch-2
Open

feat(tencent-ssl): add Tencent SSL Certificate service package#280
dingzhejianjian wants to merge 4 commits into
chaitin:mainfrom
dingzhejianjian:dingzhejianjian-patch-2

Conversation

@dingzhejianjian

@dingzhejianjian dingzhejianjian commented Jun 25, 2026

Copy link
Copy Markdown

接入设备

腾讯云 SSL 证书服务(SSL Certificate),提供 SSL 证书的申请、查询、管理能力,支持免费证书和付费证书。

设备版本

SSL Certificate,API 版本 2019-12-05,端点 ssl.tencentcloudapi.com

认证方式

腾讯云 API 密钥(SecretId + SecretKey),TC3-HMAC-SHA256 签名

实现方法

RPC 方法 后端 API 类型 说明
ListCertificates DescribeCertificates 查询证书列表
GetCertificate DescribeCertificateDetail 查询证书详情

Review 修复

  • 目录结构调整:服务文件从根目录移至 services/ 下(遵循 OctoBus 标准布局)
  • Schema 补全secret.schema.json 增加 secretId 别名声明

联调证据

证据一:MCP 工具列表(证明服务已注册到 OctoBus)

curl -s -X POST 'http://127.0.0.1:9000/capsets/ssl-dev/mcp' \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

Response:

{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "tools": [
      {"name": "tencent-ssl__ssl-live__list_certificates", "description": "Tencent_SSL.Tencent_SSL/ListCertificates"},
      {"name": "tencent-ssl__ssl-live__get_certificate", "description": "Tencent_SSL.Tencent_SSL/GetCertificate"}
    ]
  }
}

证据二:Connect RPC — ListCertificates(返回真实证书数据)

curl -s -X POST 'http://127.0.0.1:9000/capsets/ssl-dev/connect/ssl-live/Tencent_SSL.Tencent_SSL/ListCertificates' \
  -H 'Content-Type: application/json' \
  -d '{"limit":5}'

Response:

{
  "message":"1eb240dc-56fb-4943-b521-71e13f96c966",
  "data":[{"id":"******","domain":"be1com.top","certType":"SVR","status":"证书审核中","createTime":"2026-06-25 22:21:22"}],
  "total":1
}

成功查询到 1 个真实 SSL 证书(SVR 类型,审核中),API 认证通过。证书 ID 已脱敏。

证据三:GetCertificate(缺参 => 参数校验拦截)

curl -s -X POST 'http://127.0.0.1:9000/capsets/ssl-dev/connect/ssl-live/Tencent_SSL.Tencent_SSL/GetCertificate' \
  -H 'Content-Type: application/json' \
  -d '{}'

Response (HTTP 400):

{"code":"invalid_argument","message":"INVALID_ARGUMENT: certificate_id is required"}

测试结果

ℹ tests 10
ℹ pass  10
ℹ fail  0

目录结构

services/tencent__ssl/
├── service.json
├── package.json
├── proto/tencent_ssl.proto
├── bin/tencent-ssl.js
├── src/service.js
├── src/tencent-ssl.js
├── config.schema.json
├── secret.schema.json
├── README.md
└── test/tencent-ssl.test.js

@innomentats

Copy link
Copy Markdown
Member

Review 阻塞:服务包目录放错位置了。当前 diff 把 tencent__ssl/bin/tencent-ssl.js 和根 package.json 放在仓库根目录,而本仓库 service package 约定是在 services/<service>/services/bin/services/package.json 下维护。请移动到 services/tencent__ssl/ 并补充真实测试截图证据;目前 PR 里只有测试文本,没有可查看的截图或图片文件。

@monkeyscan

monkeyscan Bot commented Jun 26, 2026

Copy link
Copy Markdown

PR Title: feat(tencent-ssl): add Tencent SSL Certificate ser...

Commit: 8aaa4a6

本次 PR 仅包含两处配置修改,目的是注册新的 tencent-ssl 服务包:

  1. services/package.json:在 bin 字段新增 "tencent-ssl": "bin/tencent-ssl.js" 入口;在 files 白名单追加 "tencent__ssl""bin/tencent-ssl.js",确保 npm publish 时包含对应目录与入口文件。

  2. services/bin/octobus-tentacles.js:在 services 映射表中注册 "tencent-ssl",指定 entryFile"../tencent__ssl/bin/tencent-ssl.js"serviceModule"../tencent__ssl/src/service.js"

经核查,命名规范(tencent-ssl vs tencent__ssl)、路径结构以及字段顺序均与项目中其他服务保持一致,变更完整且无行为风险。未发现可报告的缺陷。

@dingzhejianjian

Copy link
Copy Markdown
Author

已修正:

  1. 服务包目录已移入 services/tencent__ssl/
  2. services/package.json 恢复所有已有服务注册,仅追加 tencent-ssl
  3. services/bin/octobus-tentacles.js 恢复所有已有服务入口
  4. fetch 超时改用 AbortController
  5. 联调证据已补充真实请求/响应数据

@innomentats

Copy link
Copy Markdown
Member

整体上的文件布局还是不太对,参考一下其他已经 merge 的 pr ?

@innomentats
innomentats marked this pull request as draft June 26, 2026 12:22
@monkeyscan

monkeyscan Bot commented Jun 26, 2026

Copy link
Copy Markdown

PR Title: feat(tencent-ssl): add Tencent SSL Certificate ser...

Commit: ef20e60

本次 PR 主要完成了两项工作:1) 将 Tencent SSL 服务从根目录迁移到 services/ 目录下,并删除了根目录的 bin/octobus-tentacles.jspackage.json;2) 在 services/tencent__ssl/src/tencent-ssl.js 中为 fetchJson 函数引入了基于 AbortController 的超时机制,替换了原来无效的 timeoutMs 参数传递方式。此外,secret.schema.json 新增了 secretId 字段别名,与代码中已有的 firstDefined(bindings.secret_id, bindings.secretId) 逻辑保持一致。

经审查,fetchJson 中的 AbortController 超时实现是标准做法:setTimeout 触发 controller.abort()finally 块负责 clearTimeout(timer),防止内存泄漏;signal 位于对象展开中间,不会与 buildTlsOptions 的返回值冲突(该函数仅返回 TLS 相关选项)。timeoutMs || DEFAULT_TIMEOUT_MS 的兜底逻辑与上游 resolveTimeoutMs 配合合理。secretId 别名的添加也与代码读取逻辑完全对应。

未发现引入的正确性缺陷、安全漏洞或行为回归。

@dingzhejianjian

Copy link
Copy Markdown
Author
1-1 1-23 1-4 1-5

@dingzhejianjian
dingzhejianjian marked this pull request as ready for review June 27, 2026 03:03
@monkeyscan

monkeyscan Bot commented Jun 27, 2026

Copy link
Copy Markdown

PR Title: feat(tencent-ssl): add Tencent SSL Certificate ser...

Commit: 41c05fc

该 PR 修改了 services/tencent__ssl/src/tencent-ssl.js 中的 mapHttpError 函数,去除了错误消息中包含的上游响应体(bodyText),以防止潜在的信息泄露风险。

变更内容:

  • 移除了将 bodyText 转换为字符串并拼接到错误消息中的逻辑
  • 所有 HTTP 错误状态现在仅返回 upstream http ${res.status},不再包含上游响应正文

评估:

  • 这是一个明确的安全修复,防止上游 API 的敏感信息通过错误消息泄露给客户端
  • 函数签名仍保留 bodyText 参数以保持向后兼容,未使用但无害
  • 错误处理逻辑(状态码映射到错误码)未改变,行为一致
  • 未发现引入回归或缺陷

@monkeyscan

monkeyscan Bot commented Jun 27, 2026

Copy link
Copy Markdown

PR Title: feat(tencent-ssl): add Tencent SSL Certificate ser...

Commit: 2610076

本次PR修改了 services/tencent__ssl/src/tencent-ssl.js 中的 fetchJson 函数:

  1. res.text()mapHttpError() 以及返回值逻辑移入 try 块内部,使响应体读取也能受到 AbortController 超时保护和统一的异常捕获。
  2. catch 块中新增 GrpcError 透抛判断,避免来自 mapHttpErrorparseJson 的 gRPC 特定错误码被二次包装为 UNAVAILABLE
  3. 清理了函数外层的 let res 声明,代码结构更集中。

整体来看,这是一项正确的缺陷修复:之前 res.text() 位于 try/catch/finally 之外,若读取响应体时发生异常(如超时中断)会成为未处理异常;移入 try 块后能被统一捕获并包装为 UNAVAILABLEGrpcError 的透抛也保持了错误语义的正确性。未发现引入新的行为缺陷或安全风险。

@monkeyscan

monkeyscan Bot commented Jun 27, 2026

Copy link
Copy Markdown

PR Title: feat(tencent-ssl): add Tencent SSL Certificate ser...

Commit: 4b38184

本次 PR 对 services/tencent__ssl/src/tencent-ssl.js 做了两处修复:

  1. unwrapString 函数增加递归深度上限(depth > 10 时返回空字符串),防止因循环引用对象导致栈溢出。
  2. mapHttpError 中单独处理 HTTP 429(Too Many Requests),将其映射为 UNAVAILABLE 错误码,而非原来的 FAILED_PRECONDITION

整体改动较小,属于防御性修复。

@dingzhejianjian
dingzhejianjian marked this pull request as draft June 29, 2026 02:30
@dingzhejianjian
dingzhejianjian marked this pull request as ready for review June 29, 2026 04:04

@dingzhejianjian dingzhejianjian left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ 已完成手动验证。服务注册正常,ListCertificates 返回证书数据,GetCertificate 缺参正确拦截。

@innomentats

Copy link
Copy Markdown
Member

Reviewer note: this PR currently has merge conflicts with the target branch, so it cannot be merged or reviewed safely in its current state.

Please rebase or merge the latest base branch, resolve the conflicts, and make sure GitHub Actions pass again. I am marking/keeping this PR as draft until the conflicts are resolved.

@innomentats
innomentats marked this pull request as draft June 30, 2026 15:37
@monkeyscan

monkeyscan Bot commented Jun 30, 2026

Copy link
Copy Markdown

PR Title: feat(tencent-ssl): add Tencent SSL Certificate ser...

Commit: 5afe4c8

本次 PR 仅修改 services/bin/octobus-tentacles.js,主要变更内容为:

  1. 在 services 注册表中批量新增 20+ 个服务条目,涵盖多种安全产品、防火墙、WAF、消息机器人及威胁情报源(如 cloudatlas、dbaudit、defectdojo、elastic-kibana、hermes-gateway、imperva-waf、sangfor-xdr、telegram-bot-api、volcengine-cloud-firewall、misp、opencti 等)。
  2. 将原有位于底部的 tencent-ssl 条目移至顶部(同时从底部移除),并追加 tencent-bhalibaba-sasmispopencti 至末尾。
  3. 所有新增条目均遵循既有命名与路径约定:../vendor__product_version/bin/service-name.js../vendor__product_version/src/service.js

经检查,未发现重复的 service key、语法错误或路径格式异常。所有变更均为静态配置新增/调整,无控制流、无输入处理逻辑,无明显的正确性、安全性或回归风险。

@monkeyscan

monkeyscan Bot commented Jun 30, 2026

Copy link
Copy Markdown

PR Title: feat(tencent-ssl): add Tencent SSL Certificate ser...

Commit: 74e0b3a

本次 PR 仅修改 services/package.json,属于批量注册新服务集成的大规模清单变更。主要改动包括:

  1. "bin" 中新增 24 个 CLI 入口(如 tencent-sslalibaba-cloud-simple-application-server-firewalldefectdojoundici 相关服务等)。
  2. "files" 中同步补充对应的 bin/*.js 文件与 <vendor>__<product> 目录条目。
  3. 对已有条目(tencent-ssloctobus-tentacles)进行重新排序,疑似合并冲突(merge conflict)解决后的结果。
  4. 新增两个依赖并加入 bundledDependencies@alicloud/swas-open20200601@^4.0.0undici@^7.16.0

从 diff 内容看,bin key 与 bin path、files 中的 js 文件与目录名均一一对应,未发现条目缺失或不一致。新增依赖与新增服务之间的对应关系合理。未在 diff 范围内发现明显的行为回归、安全漏洞或数据完整性风险。files"tencent__ssl" 存在额外缩进,属于格式问题,但不影响功能。

@dingzhejianjian

Copy link
Copy Markdown
Author

手动验证结果 ✅

步骤 结果 说明
tools/list 返回 2 个 tool(get_certificate / list_certificates)
ListCertificates 返回证书数据(1条,domain: be1com.top)
GetCertificate 返回 INVALID_ARGUMENT: certificate_id is required

结论:3/3 通过,可进入 review。

@dingzhejianjian

Copy link
Copy Markdown
Author

手动验证结果(完整)

① tools/list

命令:

curl -s -X POST 'http://10.2.37.168:9000/capsets/ssl-dev/mcp' -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | python3 -m json.tool

返回:

{
    "id": 1,
    "jsonrpc": "2.0",
    "result": {
        "tools": [
            {
                "description": "Tencent_SSL.Tencent_SSL/GetCertificate",
                "inputSchema": {
                    "properties": {
                        "certificate_id": {
                            "type": "string"
                        }
                    },
                    "required": [],
                    "type": "object"
                },
                "name": "tencent-ssl__ssl-live__get_certificate"
            },
            {
                "description": "Tencent_SSL.Tencent_SSL/ListCertificates",
                "inputSchema": {
                    "properties": {
                        "limit": {
                            "description": "Wrapper message for `int64`.",
                            "type": ["string", "null"]
                        },
                        "offset": {
                            "description": "Wrapper message for `int64`.",
                            "type": ["string", "null"]
                        }
                    },
                    "required": [],
                    "type": "object"
                },
                "name": "tencent-ssl__ssl-live__list_certificates"
            }
        ]
    }
}

② ListCertificates

命令:

curl -s -X POST 'http://10.2.37.168:9000/capsets/ssl-dev/connect/ssl-live/Tencent_SSL.Tencent_SSL/ListCertificates' -H 'Content-Type: application/json' -d '{"limit":5}' | python3 -m json.tool

返回:

{
    "message": "8c8c97ef-a06f-4adb-8f78-c6a3f789e353",
    "data": [
        {
            "id": "YiQGLAOv",
            "domain": "be1com.top",
            "certType": "SVR",
            "status": "证书审核失败",
            "createTime": "2026-06-25 22:21:22"
        }
    ],
    "total": 1
}

③ GetCertificate(空参数测试)

命令:

curl -s -X POST 'http://10.2.37.168:9000/capsets/ssl-dev/connect/ssl-live/Tencent_SSL.Tencent_SSL/GetCertificate' -H 'Content-Type: application/json' -d '{}' | python3 -m json.tool

返回:

{
    "code": "invalid_argument",
    "message": "INVALID_ARGUMENT: certificate_id is required"
}

结论:3/3 全部通过,可进入 review。

@dingzhejianjian
dingzhejianjian marked this pull request as ready for review July 1, 2026 02:43
@dingzhejianjian
dingzhejianjian force-pushed the dingzhejianjian-patch-2 branch from 74e0b3a to 0626c59 Compare July 1, 2026 13:44
@monkeyscan

monkeyscan Bot commented Jul 1, 2026

Copy link
Copy Markdown

PR Title: feat(tencent-ssl): add Tencent SSL Certificate ser...

Commit: 0626c59

本次 PR 规模巨大(548 文件,+50k/-3k 行),核心变更是新增多个第三方服务集成包(Tencent SSL、Qingteng HIDS v5、Huorong Endpoint Security、DBAudit 等)并升级 SDK HTTP 工具链(引入 fetchWithTimeout、createTlsDispatcher、redactSensitive 等)。

审阅重点放在新增服务的网络层实现与 SDK 变更上。整体而言 SDK 侧改进较为扎实(标准 fetch 的 timeout/dispatcher 抽象、敏感信息脱敏),但多个新服务包在对接外部 HTTP API 时存在共性缺陷:对标准 fetch 的选项语义理解有误,导致超时与 TLS 跳过选项被静默忽略;个别服务还存在全局环境变量操作等并发安全隐患。

发现 3 个高置信度问题:1) DBAudit OpenAPI 客户端在 GET 请求中将 accessKeyId、accessSign 等敏感凭证拼入 URL 查询串,存在凭证泄漏风险;2) Tencent SSL 向标准 fetch 传入自定义 timeoutMs 与 TLS 布尔选项,二者均被忽略;3) Qingteng HIDS v5 同样传入无效 timeoutMs,且通过修改全局 process.env.NODE_TLS_REJECT_UNAUTHORIZED 跳过 TLS 验证,并发极不安全。建议优先修复上述安全与可靠性缺陷。

Comment thread services/tencent__ssl/src/tencent-ssl.js
@monkeyscan

monkeyscan Bot commented Jul 14, 2026

Copy link
Copy Markdown

PR Title: feat(tencent-ssl): add Tencent SSL Certificate ser...

Commit: 7b54f17

本次 PR 仅修改了 services/bin/octobus-tentacles.js 一个文件,目的是解决 tencent-ssl 的合并冲突并注册若干新服务(aliyun-waf3、dsensor、fofa-network-space-mapper、m01-intelligence、nsfocus-ngfw-v60-9900、riversec-waf-26-03、ruijie-behavior-firewall-r2-3-2-t0)。但在冲突解决过程中,文件末尾遗留了两处明显的 JavaScript 语法错误:1)在 wd-k01 之后、opencti 之前多出了一个孤立的 },;2)tencent-sslserviceModule 行末尾出现了双逗号 ,,。这两处错误会导致整个入口脚本解析失败,属于严重的功能正确性问题,必须立即修复。

@monkeyscan

monkeyscan Bot commented Jul 14, 2026

Copy link
Copy Markdown

PR Title: feat(tencent-ssl): add Tencent SSL Certificate ser...

Commit: 591e0db

该 PR 仅修改了 services/package.json,目的是解决合并冲突。变更内容主要包括:

  1. 新增服务入口:在 binfiles 字段中新增了 7 个服务的注册,包括 aliyun-waf3dsensorfofa-network-space-mapperm01-intelligencensfocus-ngfw-v60-9900riversec-waf-26-03ruijie-behavior-firewall-r2-3-2-t0

  2. 移除废弃服务:从 binfiles 字段中移除了 tencent-bhalibaba-sasmisp 三个不再需要的旧服务。

  3. 保留并重新排序:保留了 openctitencent-ssl,但调整了它们在 files 数组中的位置(tencent-ssl 被移动到了末尾)。

  4. 新增依赖:在 dependenciesbundledDependencies 中添加了 @alicloud/pop-core

整体评估:每个新增的 bin 条目都有对应的 files 条目,被移除的服务也在两个字段中被完整清理。package.json 的 JSON 语法正确,没有发现重复、遗漏或格式错误的问题。依赖的新增也遵循了与现有 @alicloud/swas-open20200601 一致的模式。这是一个结构清晰、正确的合并冲突修复。

Comment thread services/bin/octobus-tentacles.js
@dingzhejianjian
dingzhejianjian force-pushed the dingzhejianjian-patch-2 branch from 591e0db to a305d47 Compare July 14, 2026 02:54
@monkeyscan

monkeyscan Bot commented Jul 14, 2026

Copy link
Copy Markdown

PR Title: feat(tencent-ssl): add Tencent SSL Certificate ser...

Commit: a305d47

本次变更新增了 Tencent SSL Certificate 服务包,包含完整的 gRPC 服务定义、TC3-HMAC-SHA256 签名实现、API 调用封装及测试。同时修改了 octobus-tentacles 注册表和根 package.json。

整体评估:

  • 新增服务的业务逻辑和错误映射基本正确,测试覆盖较全。
  • 但存在两个需要修复的问题:
    1. fetchJson 向标准 fetch 传入了不被识别的 timeoutMs 和 TLS 跳过字段,导致配置的超时和 TLS 选项全部失效,请求可能永久挂起。
    2. services/package.jsonfiles 数组中因合并冲突残留了一条重复的 "aliyun__waf3" 条目。

其余部分(签名计算、日志、上下文合并、错误处理等)无明显缺陷。

Comment thread services/package.json
const reason = err?.cause?.message || err?.message || 'fetch failed';
throw errorWithCode('UNAVAILABLE', reason);
}
const text = await res.text();

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fetchJson 向标准 fetch 传入了无效的 timeoutMs 与 TLS 选项

fetchJsontimeoutMsbuildTlsOptions 返回的自定义字段(insecureSkipVerifyskipTlsVerify 等)直接展开传给标准 fetch(url, { ...init, timeoutMs, ...buildTlsOptions(bindings) })。Node.js 内置的 fetch(基于 undici)不认识这些字段,因此:1) 配置中的 timeoutMs(默认 10000 ms)完全不会生效,请求在网络异常或上游无响应时可能永久挂起;2) 即使 bindings 中启用了 TLS 跳过验证,相关字段也会被静默忽略,导致连接自签名/内部证书时失败。

Problem code:

Changed code at services/tencent__ssl/src/tencent-ssl.js:141

Recommendation:
应使用 AbortSignal.timeout(timeoutMs) 作为 fetch 的 signal 参数来实现超时;对于 TLS 跳过验证,应使用 undici 的 Agent 并设置 connect: { rejectUnauthorized: false },或通过环境变量控制,而不是传入不认识的布尔字段。

@monkeyscan

monkeyscan Bot commented Jul 14, 2026

Copy link
Copy Markdown

PR Title: feat(tencent-ssl): add Tencent SSL Certificate ser...

Commit: 0df0dd0

本 PR 修复了 services/package.jsonfiles 数组里 "aliyun__waf3" 条目重复的问题。变更仅删除了一行重复的条目,属于合并冲突残留清理。修复直接且正确,没有引入新的风险或副作用。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants