logiover/certificate-transparency-monitor
GitHub: logiover/certificate-transparency-monitor
一个基于 Apify 的证书透明度日志监控工具,通过 crt.sh 无需 API Key 即可拉取 TLS 证书数据,用于子域名发现、资产监控和攻击面测绘。
Stars: 0 | Forks: 0
# 证书透明度监控 — CT 日志与子域名侦察 (crt.sh, 无需 API Key)
[](https://apify.com/logiover/certificate-transparency-monitor)
[](https://apify.com/logiover/certificate-transparency-monitor)
[](https://apify.com/logiover/certificate-transparency-monitor)
[](https://apify.com/logiover/certificate-transparency-monitor)
**用于安全、侦察和资产发现的免 Key 证书透明度情报。** **Certificate Transparency Monitor** 从 CT 日志 (crt.sh) 中拉取任意域名的 **TLS 证书**,并将每张证书转换为一行结构化数据,包含**颁发者、有效期窗口、SAN 主机名和序列号**。它提供四种运行模式:**watch**(监控过去 N 天内记录的新证书,用于日常监测)、**subdomains**(通过通配符查询发现某个域名下所有被颁发过证书的主机名)、**domain**(获取完整的证书历史记录)或 **bulk**(批量扫描整个监控列表)。
它是用于 CT 日志监控、子域名枚举、品牌冒充检测以及为 AI 安全 Agent 提供**当前基础设施数据**支撑的非官方 **crt.sh / CT 日志 API 层**。**无需 API Key,无需无头浏览器** — 您只需为保存的证书付费,未获取到任何证书的运行不收取费用。结果可导出为 JSON、CSV、Excel、JSONL 或 XML 格式。
## 📜 您将获得什么 / 输出字段 (每张证书 13 个字段)
每次运行都会**以一行对应一张证书的形式**输出数据:
| 字段 | 类型 | 描述 |
|-------|------|-------------|
| `query` | string | 使用的确切 CT 日志查询(一个域名,或子域名模式下的 `%.domain`)。 |
| `domain` | string | 发现此证书的目标域名。 |
| `certId` | integer | crt.sh 证书 ID。 |
| `commonName` | string | 证书的通用名称 (CN),例如 `*.stripe.com`。 |
| `nameValues` | array | 主题备用名称 (SAN) — 该证书有效的所有主机名。 |
| `issuerName` | string | 颁发机构 CA 名称 (Let's Encrypt, DigiCert, Google 等)。 |
| `serialNumber` | string | 证书序列号。 |
| `notBefore` | string | 有效期起始时间 (ISO 8601)。 |
| `notAfter` | string | 有效期截止/过期时间 (ISO 8601)。 |
| `entryTimestamp` | string | 证书被记录到 CT 日志的时间 (ISO 8601)。 |
| `loggedDate` | string | 日志记录的日期部分 (`YYYY-MM-DD`)。 |
| `isExpired` | boolean | 如果 `notAfter` 已成为过去时间,则为 `true`。 |
| `scrapedAt` | string | 数据抓取时间戳 (ISO 8601)。 |
数据集提供两种视图:**Overview**(每张证书的颁发者 + 有效期)视图和用于查看已发现主机名的 **Subdomains (SAN)** 视图。
## 💡 使用场景
- **新基础设施检测** — 每天对目标运行 `watch` 模式,当发现以前未见过的主机名记录了新证书时发出警报,从而在 DNS 或端口扫描之前捕获新服务、预发布环境和影子 IT。
- **子域名枚举** — 运行 `subdomains` 模式,通过 CT SAN 被动收集并构建完整的主机名清单,覆盖范围比 DNS 暴力破解更广。
- **品牌保护 / 相似域名检测** — 查询品牌字符串,以便在冒充域名(如 `stripe-login.com`、`secure-stripe.com`)被颁发证书的那一刻将其标记出来。
- **颁发者 / CA 跟踪** — 跟踪目标使用的 CA,并对异常情况发出警报(例如,突然转向经常用于网络钓鱼的廉价 CA)。
- **攻击面差异化对比** — 安排每周执行 `domain` 运行,对比证书集合,并将新增/移除的主机名作为攻击面的变化进行报告。
- **基于基础设施的 RAG** — 将证书源嵌入到向量存储中,并引用确切的证书来回答“X 主机名是什么时候首次出现的?”。
- **威胁情报流水线** — 将新证书馈送到 SIEM 中,并将颁发者/主机名模式与已知的攻击者 TTP 进行关联。
## 🚀 快速开始 — 四种运行方式
### 1. Apify Console (无需代码)
打开 Actor,点击 **Try for free**,然后点击 **Start** 使用默认输入拉取 `google.com` 的证书。接着选择一种**模式**,为其指定目标,然后再次运行。
▶️ **[在 Apify Console 中打开 Certificate Transparency Monitor](https://apify.com/logiover/certificate-transparency-monitor)**
### 2. Apify CLI
```
npm install -g apify-cli
apify login
apify call logiover/certificate-transparency-monitor \
--input='{ "mode": "subdomains", "domain": "stripe.com", "maxPerDomain": 2000 }'
```
### 3. API / curl (在一次调用中运行并获取结果)
```
curl -X POST "https://api.apify.com/v2/acts/logiover~certificate-transparency-monitor/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mode": "domain",
"domains": ["stripe.com", "linear.app", "vercel.com"],
"maxPerDomain": 1000
}'
```
### 4. apify-client (JavaScript & Python)
```
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('logiover/certificate-transparency-monitor').call({
mode: 'subdomains',
domain: 'stripe.com',
maxPerDomain: 2000,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```
```
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("logiover/certificate-transparency-monitor").call(run_input={
"mode": "subdomains",
"domain": "stripe.com",
"maxPerDomain": 2000,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["commonName"], item["nameValues"])
```
请查看 [`examples/`](./examples) 文件夹以获取更完整的 CLI、API、JavaScript 和 Python 代码片段。
## 📥 输入
选择一种 `mode`,然后提供相应的目标。其余选项均为可选 — **将输入留空即可拉取 `google.com` 的证书作为演示。**
| 字段 | 类型 | 默认值 | 描述 |
|-------|------|---------|-------------|
| `mode` | 下拉菜单 | `domain` | `domain` (单个/多个域名的所有证书),`watch` (N 天内的新证书),`subdomains` (通配符发现),`bulk` (多个域名)。 |
| `domain` | string | `google.com` | 用于 `watch` / `subdomains` 模式的单个域名。 |
| `domains` | array | — | 用于 `domain` / `bulk` 模式的域名。 |
| `daysBack` | integer | `7` | `watch` 模式向前回溯的天数 (1–365)。`1` = 今天的新证书。 |
| `maxPerDomain` | integer | `1000` | 每个域名保存的证书数量上限 (1–20000)。热门域名通常会有数万条记录。 |
| `excludeExpired` | boolean | `false` | 丢弃已超过其 `notAfter` 时间的证书(当前攻击面视图)。 |
| `dedupBySerial` | boolean | `true` | 根据序列号合并 precertificate 和最终证书的重复项。 |
| `useApifyProxy` | boolean | `true` | 通过 Apify 代理路由(有助于提高可靠性,并自动重试)。 |
## 📤 输出 — 示例记录
```
{
"query": "stripe.com",
"domain": "stripe.com",
"certId": 12345678901,
"commonName": "*.stripe.com",
"nameValues": ["stripe.com", "www.stripe.com", "api.stripe.com", "dashboard.stripe.com"],
"issuerName": "DigiCert TLS RSA SHA256 2020 CA1",
"serialNumber": "0abc123def456...",
"notBefore": "2026-06-28T00:00:00.000Z",
"notAfter": "2027-07-03T23:59:59.000Z",
"entryTimestamp": "2026-06-28T12:34:56.789Z",
"loggedDate": "2026-06-28",
"isExpired": false,
"scrapedAt": "2026-07-06T12:00:00.000Z"
}
```
## 🔌 集成与自动化
- **定时任务** — 在 Apify 上每天运行 `watch`,以捕获您目标的所有新证书。
- **Webhooks** — 在一次运行结束后,立即将新证书推送到 SIEM、Slack 或您的 API。
- **Google Sheets / Amazon S3 / 向量存储 / 数据库** — 通过 Apify 集成,将数据源导出到电子表格、S3 存储桶、embeddings 存储或数据仓库。
- **Zapier · Make · n8n · Pipedream · MCP** — 将其接入无代码侦察流水线,或将其作为 **MCP 工具** 暴露出来,以便安全 Agent 可以按需查询 CT 日志。
## 📦 导出格式
结果存储在 Apify 数据集中,并可导出为 **JSON、CSV、JSONL、Excel (XLSX) 和 XML** 格式,或通过 Apify API 实时读取。
## ❓ 常见问题解答
### 这个 Actor 需要任何 API Key 或登录吗?
不需要。它查询 **crt.sh**,这是一个公共的证书透明度日志搜索引擎,完全不需要密钥。无需账户、无需登录、无需无头浏览器 — 只需要一个 Apify 账户。
### 它是 crt.sh API 的替代品吗?
是的。crt.sh 没有用于自动化、干净且结构化的公共 API。这个 Actor 将 CT 日志搜索封装为一个可靠的、分页的、具备重试机制且字段规范化(如 SAN 拆分、去重、过滤)的层 — 是面向流水线和 AI Agent 的一种实用的 **crt.sh / CT 日志 API 替代方案**。
### 我可以通过证书透明度发现子域名吗?
是的 — 这就是 `subdomains` 模式。通配符查询可以通过 SAN (`nameValues`) 字段,展示出某个域名下所有曾经被颁发过证书的主机名。对于大型组织,这通常包含数百到数千个主机名。这种被动收集方式比 DNS 暴力破解覆盖范围更广。
### 我该如何监控新颁发的证书?
使用 `watch` 模式并将 `daysBack` 设置为 `1`,同时将 Actor 安排为每天运行;它只会返回过去 24 小时内记录的证书,让您在新基础设施出现时就能捕获它。
### 数据的时效性如何?
CT 日志是仅追加的,并且几乎是实时的 — 几分钟前记录的证书通常会在几分钟到几个小时内出现。
### 为什么有些证书会重复(在去重之前)?
CT 日志会记录每次证书颁发时的 precertificate 和最终证书,它们通常具有相同的序列号。`dedupBySerial: true`(默认值)会将它们合并为一行。
### 我该如何将证书导出为 CSV 或 JSON 格式?
运行 Actor,然后从 Apify Console 将数据集导出为 **CSV、JSON、Excel 或 XML**,或者通过 Apify API / MCP 实时拉取。
### 我可以获取多少数据?
`maxPerDomain` 最高可达**每个域名 20,000 张证书**,而 `bulk` 模式可以扫描整个列表。对于大型组织,一次 `subdomains` 通配符查询通常每次运行会产生数百到数千行记录。
### AI Agent 可以直接调用它吗?
可以 — 这是一个主要的设计目标。通过 MCP server 或 Apify 工具集成将其暴露出来;Agent 只需传入域名和模式,即可接收结构化的证书/子域名返回结果,而无需在 Agent 端进行任何 CT 日志抓取或 SAN 解析。
### 使用它合法吗?
CT 日志数据在设计上是公开的 — 这是 CA/Browser Forum 基准要求所强制规定的 — 并且证书持有者在颁发证书时同意将其记录在案。请将其用于合法的安全监控、资产发现、品牌保护以及基于已经公开的数据为 AI Agent 提供支撑,同时请尊重 crt.sh 的使用指南。
## 🔗 logiover 的相关 Actor
- ▶️ [**Subdomain Finder**](https://apify.com/logiover/subdomain-finder) — 多源子域名枚举 (主动 + CT),用于补充此数据源。
- ▶️ [**Bulk WHOIS / RDAP Lookup**](https://apify.com/logiover/bulk-whois-rdap-lookup) — 用于归因的域名所有权和注册数据。
👉 浏览 **[Apify Store 上的所有 logiover Actor](https://apify.com/logiover)**。
📄 **仅用于文档说明** — 此仓库包含使用文档和示例。Actor 本身在 Apify 平台上运行。 ▶️ **运行地址: **
采用 [MIT License](./LICENSE) 授权 · © 2026 logiover
标签:数据可视化, 逆向工具