Infisical 如何发现内网现有服务上的证书并建立证书清单?
【免费下载链接】infisicalInfisical is the open-source platform for secrets, certificates, and privileged access management.项目地址: https://gitcode.com/GitHub_Trending/in/infisical
当你接手一套存量基础设施时,往往不知道内网各服务上到底部署了哪些 TLS 证书、哪些即将过期。Infisical 的 Certificate Discovery 功能通过扫描基础设施来自动发现这些证书,并把结果组织成"installations"(安装位置),帮助你建立可跟踪、可管理的证书清单。本文以 Network Discovery(网络发现)为路径,介绍如何创建一个针对内网 IP 段/域名的扫描任务、触发扫描、查看结果,以及把发现的证书纳入 Infisical 清单。
工作原理:扫描结果如何变成证书清单
根据 Certificate Discovery 概述:
- Discovery 任务扫描基础设施后,结果按installations组织——每个 installation 对应证书被发现的一个唯一位置(例如特定的"主机名 + 端口"组合)。同一个位置在多次扫描中的证书变化会被持续跟踪,便于观察时间维度上的变化。
- 发现的证书会按指纹(DER 编码证书的 SHA-256 哈希)与组织内已有证书清单做匹配。如果匹配上,installation 会链接到对应证书,形成"证书部署在哪里"的统一视图。
- 如果某次扫描在某位置发现了不同的证书,installation 会更新为新证书,旧的关联保留在扫描历史中。
- 如果发现的证书与任何已有证书都不匹配,可以将其导入清单,与通过 Infisical 签发的证书一起跟踪和管理。
目前支持的发现类型是 Network Discovery(通过 TLS 扫描网络端点);云厂商、文件系统等发现类型文档注明将在后续版本中加入。
前提:Infisical 如何触达内网
扫描内网(私网 IP 段)时,Infisical 需要能访问这些端点。文档给出两条路径,按部署形态二选一:
- Infisical Gateway:使用部署在你内网中的 Gateway 代理流量,可触达互联网无法直接访问的私有网络。这是文档推荐的私有网络方案。
- 自托管实例的环境变量:如果是自托管 Infisical,可以在实例上设置
ALLOW_INTERNAL_IP_CONNECTIONS为true(默认为false),让 Discovery 任务走直连出口直接扫描私有网络,无需 Gateway。
设置该环境变量前需要注意文档中的警告:它会放宽 SSRF 防护,允许私网 IP 的同时还会禁用该直连路径上的 DNS-rebinding pin 保护(校验与连接可能解析到不同 IP)。文档建议仅在信任能配置这些集成的用户时使用,并尽量用更窄的作用范围控制。如果只需要私有网络访问能力,优先考虑 Gateway,它在网络内部通过 agent 隧道转发流量,不需要在 Infisical 实例上开放任何内网 IP 段。
创建 Network Discovery 任务(UI 主路径)
按 Network Discovery 文档 的 UI 操作:
- 在Certificate Manager中进入Discovery,点击Add Job。
- 填写任务详情并点击Create:
- Name:任务的 slug 风格名称,例如
prod-tls-scan; - Description:可选描述;
- Targets:要扫描的域名、IP 地址或 CIDR 段,例如
example.com、192.168.1.1、10.0.0.0/24。至少需要一个 target(域名或 IP); - Ports:要扫描 TLS 证书的端口。不指定时默认为常见 TLS 端口;
- Gateway(可选):用于扫描私有网络的 Infisical Gateway;
- Auto Scan:启用后按可配置间隔自动周期扫描。
- Name:任务的 slug 风格名称,例如
- 点击Scan Now手动触发一次扫描,或在启用 Auto Scan 时等待下一次自动扫描。
触发与验证扫描
扫描完成后,在任务详情中查看三类结果:
- Installations:发现证书的唯一位置列表,这就是你的证书部署清单的主体;
- Certificates:证书详情,包括 common name、颁发者和到期时间;
- Scan History:所有扫描的状态与时间戳日志。
判断扫描是否按预期工作,就看 Installations 中是否出现你预期内的主机/端口位置,以及 Certificates 中列出的是否为真实在服务上提供的证书。任务详情页、Discovery 页的Installations标签页、以及具体证书的详情页(显示该证书部署在哪些位置)都可以查看 installations。
通过 API 创建与触发(可选分支)
如果更习惯脚本化操作,Network 文档给出了 API 方式。创建任务时type为network-tls,targetConfig包含ipRanges、domains、ports字段,文档示例请求(示例结果来自文档原文,<access-token>需替换为你的访问令牌,gatewayId与目标值按实际环境替换):
curl --request POST \ --url https://app.infisical.com/api/v1/pki/discovery \ --header 'Authorization: Bearer <access-token>' \ --header 'Content-Type: application/json' \ --data '{ "name": "prod-tls-scan", "description": "Scan production network for TLS certificates", "type": "network-tls", "gatewayId": "550e8400-e29b-41d4-a716-446655440000", "isAutoScanEnabled": true, "scanIntervalInDays": 1, "targetConfig": { "ipRanges": ["10.0.0.0/24", "192.168.1.1"], "domains": ["example.com"], "ports": "443, 8443" } }'创建后通过 Trigger Scan 端点触发一次扫描:
curl --request POST \ --url https://app.infisical.com/api/v1/pki/discovery/<discoveryId>/scan \ --header 'Authorization: Bearer <access-token>'注意:API 参考页 Create 与 Trigger scan 中列出的 OpenAPI 路径为POST /api/v1/cert-manager/discovery-jobs和POST /api/v1/cert-manager/discovery-jobs/{discoveryId}/scan,与上文示例中的/api/v1/pki/discovery前缀不完全一致,两处文档存在这一差异,实际调用时以你环境 API 的实际响应为准核对。
发现证书如何进入清单
扫描结果转化为清单的逻辑(来自 Discovery 概述文档):
- 匹配:发现的证书按指纹与组织内已有证书比对,命中则 installation 链接到该证书,无需重复入库;
- 导入:未命中的证书可以导入清单,从此与 Infisical 签发的证书一样被跟踪和管理;
- 持续跟踪:后续扫描在同一位置发现证书变化时,installation 更新、历史保留,因此清单反映的是当前状态而不是某一次扫描的快照。
限制
Network discovery 任务的硬限制(来自 Network 文档):
- 单个 IP 数量上限:256
- 域名数量上限:20
- 端口数量上限:5
- CIDR 前缀最小
/24(256 个主机)
规划 IP 段和端口列表时需要满足这些约束,超出的范围要拆分为多个 discovery 任务。
下一步
清单建立之后,文档给出的延伸方向是:为发现证书配置到期提醒(Alerting,见 Alerting),以及将证书推送到云目的地(Certificate Syncs,见 Certificate Syncs)。
【免费下载链接】infisicalInfisical is the open-source platform for secrets, certificates, and privileged access management.项目地址: https://gitcode.com/GitHub_Trending/in/infisical
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考