课题研究域名数据与威胁监测子课题02 · 第3页 / 共8页
02子课题 · 证书透明度日志监控

证书透明度日志监控第3页:数据采集、接入与数据治理

数据是监测管道的燃料。本页解决KQ-1(时效与完整性):系统梳理九类数据源及其时效/成本特征;给出RFC 6962动态日志(get-sth/get-entries游标式拉取+密码学完整性校验)与Static CT静态日志(checkpoint+tiles分片增量diff)双协议采集方案;解析CertStream流式消息格式与生产注意事项;设计规范化存储模型、索引策略、precert/final去重规则;估算在“日均千万级条目”新常态下的存储成本;最后厘清CT数据在《网络安全法》《数据安全法》《个人信息保护法》框架下的合规边界。

数据源全景get-entriestilesCertStreamcrt.sh去重规范化数据合规研究状态:研究中
所属阶段数据工程与治理
目标受众数据工程师、平台架构师、SOC建设者
关键输出双协议采集器 / 规范化数据模型 / 去重规则

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页所述"审计者"角色;
  • 到期与变更跟踪:日志按时间分片到期(停收新条目),列表新增/移除须自动同步,避免采集中断造成盲区。
crt.sh检索示例:查询某品牌相关证书并提取变体域名
# 检索含关键词的证书(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日志日新增条目为千万级。量级测算:

千万级/日
全球CT日志新增条目
LE一家2025年末日签常达1000万张,含双记录后全网条目更高
2类协议
采集面:RFC 6962 + Static CT
采集层双协议、归一化模型统一(见§03 info-box)
<30分钟
端到端时效目标
证书签发→告警触达(预算分解见第5页§02)
24h→≤1min
MMD的演进
传统日志24小时;Chrome新政策:RFC6962日志≤4h、静态日志≤1min
  • 存储估算:规范化记录约0.5—1KB/条→日增数GB至十GB级,年累计数TB级;原始JSONL更大,需冷热分层(全量30天热区+归档);
  • 降本策略:非关注域名(不在任何品牌词库/白名单交集内)仅存指纹+SAN+时间三元组,全量证书体只保留命中检测规则的部分。

MMD≠监测时效:24小时(现收紧至4h/1min)是日志对CA的合规承诺窗口,不是监测者的时间预算。品牌监测的商业价值依赖分钟级发现——管道时效必须自建,任何"日志反正会公开"的延迟心态都会让钓鱼站点在告警前完成收割。

本节参考来源(第3页)

以下均为真实可查来源(规范原文、官方文档、开源项目仓库)。

[1]

RFC 6962 §4(get-sth/get-entries等HTTP API):rfc-editor.org/rfc/rfc6962

[2]

C2SP tlog-tiles(tiles/checkpoint监控规范)与static-ct-api:c2sp.org/tlog-tiles、c2sp.org/static-ct-api

[3]

crt.sh(Sectigo运营,支持identity查询/JSON输出/exclude=expired):crt.sh

[4]

CertStream生态:原项目github.com/CaliDog/CertStream;社区Rust实现certstream-server-rust(活跃维护分支):github.com/burakozcn01/certstream-server-rust(支持RFC 6962+Static CT双协议、SHA-256跨日志去重、断点位点持久化;项目站点certstream.dev)

[5]

Google Cloud公开数据集(含CT数据):console.cloud.google.com/marketplace;Cloudflare Radar CT统计:radar.cloudflare.com/certificate-transparency

[6]

Let's Encrypt里程碑数据(2025-12-09十周年回顾):letsencrypt.org/2025/12/09/10-years;CT日志EOL计划(2025年8月发布,官方博客):community.letsencrypt.org/t/243769(内含EOL计划原文链接)

[7]

Chrome CT Log Policy(MMD≤4h/静态≤1min、可用性99%):googlechrome.github.io/CertificateTransparency/log_policy.html

[8]

Meta CT监测API停止服务(据开源社区项目维护者讨论公告,2025年底):github.com/projectdiscovery/subfinder/discussions/1722(维护者确认Meta于2025年底停止该工具服务),最终以Meta官方说明为准

[9]

浏览器日志列表公开端点: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。