安全与风控
用证书透明度日志(crt.sh +…
当需要监控组织域名是否被仿冒、发现未授权证书签发或做攻击面/钓鱼基础设施情报时,通过 CT 日志查询与实时监听来提前预警。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
用证书透明度日志(crt.sh + Ce通用
解决思路
- 用 crt.sh 的 JSON API 查询目标域名的历史证书:请求 https://crt.sh,参数 q=%.<domain>、output=json,默认加 exclude=expired 排除过期证书,超时设 30 秒。
- 对 crt.sh 返回的每条证书提取 common_name、name_value、issuer_name、not_before、not_after、serial_number、id,并用 tldextract 解析出证书主域名;若主域名与受监控域名完全一致则视为合法证书跳过。
- 对非完全匹配的证书打可疑标记:common_name 去掉点后包含目标域名去点字符串则标记 contains target domain string;包含品牌关键词则标记 contains brand keyword;issuer 中含 let's encrypt 则标记 free CA (Let's Encrypt);汇总为 flags 并保留 crt.sh 链接 https://crt.sh/?id=<id>。
- 用 Certstream 做实时监控:通过 certstream.listen_for_events(callback, url="wss://certstream.calidog.io/") 监听 certificate_update 消息,遍历 leaf_cert.all_domains 中的每个域名。
- 对每个实时域名做可疑判定:受监控域名的主体部分(如 mycompany)出现在域名中且不等于原域名;或用 Levenshtein.ratio 计算域名主体与受监控主体的相似度,达到阈值(如 0.75/0.8)且不相同则判为仿冒;或命中品牌关键词。
- 命中后生成告警记录,包含 domain、all_domains、issuer(leaf_cert.issuer.O)、fingerprint、not_before、detected_at 时间戳和 reason 原因说明,并打印 [ALERT] 日志;达到 max_alerts 上限时抛出 KeyboardInterrupt 停止监听。
- 用 CT 日志做子域名枚举:查询 q=%.<domain> 的 JSON 结果,把每条证书 name_value 按换行拆分,去掉前导 *. 和空白,保留以 .<domain> 结尾或等于 domain 的名称,去重排序得到子域名列表。
- 生成 CT 情报报告 Markdown:包含目标域名、生成时间、可疑证书数量与实时告警数量、可疑证书表格(Common Name/Issuer/Flags/crt.sh 链接)、实时告警表格(Domain/Issuer/Reason/Detected),并写入 ct_report_<domain>.md。
- 在报告中给出处置建议:把标记域名加入 DNS sinkhole / Web 代理黑名单;对确认的钓鱼域名提交下架请求;持续监控 CT 日志新证书;为自有域名配置 CAA DNS 记录限制签发;部署 DMARC 防止仿冒域名邮件伪造。
- 验证结果:crt.sh 能返回目标域名证书数据、能识别出仿冒模式的可疑证书、Certstream 能实时捕获新钓鱼证书、子域名枚举结果完整、告警带原因分类、报告含可执行建议。
适用边界 · 注意事项
- 没有明确要监控的自有域名与品牌关键词清单时,无法有效判定仿冒,误报会很高。
- 仅需一次性排查且不关心持续监控时,无需部署 Certstream 实时监听,直接查 crt.sh 即可。
- 目标域名未使用公开可信 CA 签发证书(如纯内网自签)时,CT 日志中不会有相关记录,方法不适用。