01 · 数据源全景
CT监测可复用的数据源可分为四类:全量直连(官方日志API/静态tiles,自主可控、时效最好)、检索服务(crt.sh、Censys,适合回溯与调查)、流式管道(CertStream生态,适合实时告警)、批量分析(BigQuery公开数据集,适合研究)。组合使用、互为冗余是本页的核心建议。
| 数据源 | 类型 | 时效 | 成本 | 特点与适用 |
|---|---|---|---|---|
| 官方日志API(get-entries) | 全量直连 | 分钟~小时级 | 免费 | 覆盖单份RFC 6962日志全量历史;需自建管道与速率控制 |
| 静态tiles(checkpoint+tile/data) | 全量直连 | 分钟级 | 免费 | Static CT日志的标准读路径;CDN友好、可高并发增量diff |
| crt.sh(Sectigo运营) | 检索服务 | 近实时 | 免费 | Web检索+JSON API(identity匹配、通配后缀查询);历史覆盖最广,适合回溯调查与快速验证 |
| Censys Certificates | 检索服务 | 小时~天级 | 免费额度+付费API | 结构化检索与主机-证书关联,适合资产测绘联动 |
| CertStream(CaliDog生态) | 流式管道 | 近实时(秒~分钟) | 免费/自建 | WebSocket推送新日志条目;社区维护的Rust实现(certstream-server-rust)已支持双协议、跨日志SHA-256去重与断点位点持久化 |
| SSLMate Cert Spotter | 托管监控 | 近实时 | 开源(AGPL)+托管付费 | 面向域名持有者的证书监控告警,可作自建管道的参照实现 |
| Google BigQuery公开CT数据集 | 批量分析 | 天级更新 | 免费额度+查询计费 | 全量CT数据的分析型镜像,适合学术研究与大规律挖掘,不适合实时告警 |
| Cloudflare Merkle Town/Radar | 统计/检索 | — | 免费 | CT签发量宏观统计,适合态势指标(见子课题06) |
| Meta CT监测API | 已停止 | — | — | 原面向开发者的品牌证书监控服务,已停止服务(据开源社区项目维护者公告,Meta于2025年底下线)——教训:托管服务存在存续风险,关键监测能力应自建冗余 |
注:各服务条款与限额以官网为准;托管类数据源不可替代全量直连,二者应互为校验。另:Cloudflare Radar证书透明度监控面板已于2026年8月转为正式可用(GA),提供按日志、CA维度的签发与合规状态看板,可作态势指标(子课题06)的补充来源。
02 · RFC 6962日志直连采集
对每份目标日志(Chrome∪Apple日志列表内、状态为usable),采集器执行以下循环:
- 日志列表获取:采集范围以两份浏览器日志列表中状态为"活跃(usable)"的日志全集为基线——Chrome列表由Google发布(gstatic.com/ct/log_list/v3/log_list.json),Apple列表由Apple发布(valid.apple.com/ct/log_list/current_log_list.json);
- 进度锚点:周期调用
get-sth获取tree_size;以本地已入库的最大entry_index为游标; - 批量拉取:
get-entries?start=N&end=M顺序拉取,单批上限通常为1000条(以各日志实现为准);多日志间并行、单日志内限速,遵守运营方礼貌要求; - 断点续传:游标与原始响应持久化(磁盘/位点表),进程重启后从断点续传;异常跳批须回退重试;
- 完整性校验(三重):①按RFC 6962复算每条leaf_hash与MerkleTreeLeaf;②验证STH签名(get-roots获取日志公钥集);③与第二独立监控源比对STH(tree_size+根哈希一致),可发现日志分裂视图——该职能即第2页所述"审计者"角色;
- 到期与变更跟踪:日志按时间分片到期(停收新条目),列表新增/移除须自动同步,避免采集中断造成盲区。
# 检索含关键词的证书(identity 匹配 CN 与 SAN),JSON 输出 curl -s "https://crt.sh/?q=identity:examplebrand&output=json" \ | jq -r '.[].name_value' | sort -u | head -50 # 按域名后缀拉取(%. 为 crt.sh 通配后缀语法),配合 exclude=expired 过滤 curl -s "https://crt.sh/?q=%25.example.com&output=json&exclude=expired"
注:crt.sh适合调查与规则调试;生产告警链路不应依赖第三方检索服务的可用性。
03 · 静态日志(tiles)采集
Static CT日志的读路径完全静态化(C2SP tlog-tiles规范):日志发布checkpoint(含日志标识、树大小、根哈希与签名)与tile/data/N(第N片,固定256条)两类静态资源。采集要点:
- 增量diff:轮询checkpoint发现树增长→按需下载新tile→本地重组;checkpoint带有HTTP缓存语义,轮询成本低;
- 无状态高并发:tiles由对象存储/CDN承载,可多线程并行回扫历史,天然适合冷启动全量初始化;
- issuer去重:tiles内以issuer关键信息去重存储证书链,重构完整链需同时拉取issuer bundle(get-roots/issuer索引);
- 合入即终态:静态日志"先排序落片、后签发SCT",条目一旦发布即不可变——采集端无需处理v1的"MMD窗口内未合入"状态机。
双协议归一:无论RFC 6962还是Static CT,归一化后的内部数据模型应完全一致(见§05),采集层差异(游标 vs checkpoint/tiles)仅在适配器内消化——这使日志列表从动态向静态的整体迁移(如Let's Encrypt 2025-11至2026-02的切换)对下游检测透明。
04 · 流式接入与消息格式
实时告警链路推荐基于CertStream协议接入:服务器持续拉取多份日志,通过WebSocket向订阅者推送新条目。典型消息结构如下(字段名以实际实现为准):
{
"data": {
"update_type": "PrecertLogEntry", // 或 X509LogEntry
"leaf_cert": {
"subject": {"CN": "login-secure.example-brand.net"},
"extensions": {"subjectAltName": {"DNS": [
"login-secure.example-brand.net",
"www.login-secure.example-brand.net"]}},
"fingerprint": "9f:2a:...", "not_before": 1735689600, "not_after": 1743465600
},
"chain": [{"subject": {"CN": "E5"}, "issuer": {"CN": "ISRG Root X1"}}],
"source": {"name": "example-log", "url": "https://log.example/"},
"cert_index": 123456789, "seen": 1735689661.42
},
"message_type": "certificate_update"
}- 生产注意:断线指数退避重连;多日志推送可能乱序(以cert_index与CT时间戳排序);消费端背压(磁盘持久化位点,参考certstream-server-rust设计);
- 时间基准:统一使用SCT/日志时间戳(见第2页§02 info-box),不依赖推送到达时间。
05 · 存储与索引设计
推荐"原始层+规范化层"两层架构:原始JSONL完整入对象存储(取证与回放),规范化层入列式库(ClickHouse)或搜索引擎(OpenSearch/ES)支撑检索与聚合。
| 字段 | 说明 |
|---|---|
| sha256_fp | 证书DER的SHA-256(去重主键;precert与final不同指纹) |
| serial / issuer_cn / issuer_o | 序列号、颁发者信息(precert配对与团伙聚类的关键键) |
| subject_cn / san_list | 主题CN与SAN域名列表(检测主战场) |
| not_before / not_after | 证书有效期(DV普遍90天) |
| sig_alg / key_alg / key_bits | 签名与密钥算法特征 |
| log_id / entry_type / entry_index / ct_ts | 来源日志、条目类型(precert/final)、序号、CT时间戳 |
| wildcards / idn_raw / idn_unicode | 通配符标记;IDN双写(punycode与Unicode) |
| ingest_ts / source | 入库时间与采集通道(溯源) |
- 索引策略:san_list倒排(前缀/后缀分词)、sha256唯一索引、not_before+issuer组合索引支撑时序规则;
- IDN规范化:NFKC规范化+小写化+去尾部点;punycode与unicode双写,检测用unicode视图、溯源用原始值;
- 通配符处理:*.example.com拆解为example.com并置wildcard标志位,参与品牌匹配但不直接生成告警。
06 · 去重、规范化与数据质量
6.1 三类去重
| 去重类型 | 规则 | 保留策略 |
|---|---|---|
| 跨日志重复 | 同一张证书(precert或final)会被提交至多份日志 | sha256_fp去重;保留每份日志的(log_id,entry_index)溯源列表 |
| precert/final配对 | 同一次签发产生PrecertEntry+X509Entry两条记录 | 以issuer+serial+subject近似匹配配对;canonical视图取final(x509字段完整),时序分析用precert的更早ct_ts |
| 证书轮换 | 同域名换密钥重新签发 | 不去重——重复签发本身是高价值行为特征(第4页§04) |
6.2 数据质量SLO
- 解析失败率、字段缺失率、源断流时长纳入日常监控;每源维护"最近条目年龄"看板;
- 数据缺口回补:断流恢复后按游标/checkpoint回溯补齐,并在数据集中标记缺口区间,避免时序规则误判。
07 · 数据量级与成本估算
以Let's Encrypt为锚点(其官方十周年数据):2024年日均签发400万张以上,2025年9月末单日首次突破1000万张,此后日签发量常达千万量级;叠加precert/final双记录与全球其他CA,全网CT日志日新增条目为千万级。量级测算:
- 存储估算:规范化记录约0.5—1KB/条→日增数GB至十GB级,年累计数TB级;原始JSONL更大,需冷热分层(全量30天热区+归档);
- 降本策略:非关注域名(不在任何品牌词库/白名单交集内)仅存指纹+SAN+时间三元组,全量证书体只保留命中检测规则的部分。
MMD≠监测时效:24小时(现收紧至4h/1min)是日志对CA的合规承诺窗口,不是监测者的时间预算。品牌监测的商业价值依赖分钟级发现——管道时效必须自建,任何"日志反正会公开"的延迟心态都会让钓鱼站点在告警前完成收割。
08 · 法律合规与伦理
- 数据属性:CT日志为公开数据,且证书本身不含注册人联系方式(与WHOIS/RDAP因隐私保护(redaction)而信息萎缩形成鲜明对照)——这是CT相较注册数据源的合规优势;
- 关联数据边界:管道若叠加RDAP/被动DNS/URL情报富化,须分别遵守对应数据源条款;《个人信息保护法》框架下,应避免采集与分析无关的个人可识别信息;
- 内部域名泄露的双向性:企业私有子域进入公开CT日志是公认风险(缓解:内部系统使用内部CA,见第7页§07);同理,对外监测时获取的他方内部域名信息应按敏感信息管理,对外共享前最小化;
- 法规框架:采集、存储、分析、共享全流程遵守《网络安全法》《数据安全法》《个人信息保护法》,处置协同遵循《反电信网络诈骗法》(2022-12-01施行)。
本节参考来源(第3页)
以下均为真实可查来源(规范原文、官方文档、开源项目仓库)。
RFC 6962 §4(get-sth/get-entries等HTTP API):rfc-editor.org/rfc/rfc6962
C2SP tlog-tiles(tiles/checkpoint监控规范)与static-ct-api:c2sp.org/tlog-tiles、c2sp.org/static-ct-api
crt.sh(Sectigo运营,支持identity查询/JSON输出/exclude=expired):crt.sh
CertStream生态:原项目github.com/CaliDog/CertStream;社区Rust实现certstream-server-rust(活跃维护分支):github.com/burakozcn01/certstream-server-rust(支持RFC 6962+Static CT双协议、SHA-256跨日志去重、断点位点持久化;项目站点certstream.dev)
Google Cloud公开数据集(含CT数据):console.cloud.google.com/marketplace;Cloudflare Radar CT统计:radar.cloudflare.com/certificate-transparency
Let's Encrypt里程碑数据(2025-12-09十周年回顾):letsencrypt.org/2025/12/09/10-years;CT日志EOL计划(2025年8月发布,官方博客):community.letsencrypt.org/t/243769(内含EOL计划原文链接)
Chrome CT Log Policy(MMD≤4h/静态≤1min、可用性99%):googlechrome.github.io/CertificateTransparency/log_policy.html
Meta CT监测API停止服务(据开源社区项目维护者讨论公告,2025年底):github.com/projectdiscovery/subfinder/discussions/1722(维护者确认Meta于2025年底停止该工具服务),最终以Meta官方说明为准
浏览器日志列表公开端点:Chrome gstatic.com/ct/log_list/v3/log_list.json;Apple valid.apple.com/ct/log_list/current_log_list.json;端点字段结构说明见Andrew Ayer博客(2025-07-22):agwa.name。