Skip to content

这个项目解决什么

crt.sh-skills 不是重新造一个 CT 搜索引擎,而是给 crt.sh 做一层全栈适配层。它解决的痛点可以用四个场景说清楚。

痛点一:程序化访问太脆

直接调 crt.sh 的网页端点,你会遇到一连串麻烦:

  1. 01
    详情页只返回 HTML
    ?id=12345 是 HTML,得自己写正则/gocolly 抠字段
  2. 02
    搜索类型即参数名
    写错大小写就查不到(?CN= 有效,?cn= 不一定)
  3. 03
    布尔参数格式特殊
    exclude=expired、deduplicate=Y,猜不对
  4. 04
    没有分页元数据
    得自己解析 HTTP Link header
  5. 05
    5xx 抖动频繁
    得自己写退避重试

本项目的 SDK 把这些全部封装:统一 buildQuery、HTML 详情页解析器 parseCertDetailHTMLLink header 分页解析、指数退避重试、强类型错误。你只管传 QueryParams,拿 []Certificate

一行对照

裸调 crt.sh:拼 URL → 发请求 → 读 HTML → 正则抠字段 → 处理重试 → 解析分页 → 容错 用 SDKclient.SearchCertificates(ctx, params) → 拿 []Certificate

痛点二:AI 工具接不上 crt.sh

Claude Code、Cursor 这类 AI agent 不能"点网页"。它们需要结构化的工具调用——明确的输入 schema、稳定的输出、可枚举的选项。

flowchart LR U["用户:帮我查 example.com 的证书"] --> AI["AI Agent"] AI -->|没有工具| X["❌ 只能建议你去网页查"] AI -->|有 MCP 工具| T["调用 search_certificates"] T --> SDK["SDK → crt.sh"] SDK --> R["结构化结果"] R --> AI --> U["✅ 用自然语言回答"]

本项目用两种形态满足:

🔌MCP Server
20 个工具,stdio/HTTP/SSE 传输,任何 MCP 兼容客户端即装即用
📖Skills
7 个 SKILL.md,告诉 AI 何时用哪个工具、参数怎么填、结果怎么读

痛点三:人类/脚本想要命令行

运维想 cron 里跑一条命令监控自家域名新签发的证书;安全研究者想把搜索结果导成 CSV 喂给 Excel。

crtsh-cli
$ crtsh-cli search example.com --exclude-expired --deduplicate
ID NOT_BEFORE NAME_VALUE
12345 2024-01-02 example.com, www.example.com
...
$ crtsh-cli search example.com -o csv > certs.csv
✓ 33 条已写入 certs.csv

26 条 CLI 命令,支持 JSON/表格/CSV 三种输出。

痛点四:Go 程序想嵌入

你想在自己的 Go 项目里集成 CT 查询能力。直接 import SDK,20 个方法 + 辅助函数 + 自动分页迭代器 IterateCertificates

go
client := crtsh.NewClient()
err := client.IterateCertificates(ctx, crtsh.QueryParams{Q: "example.com"}, func(c crtsh.Certificate) bool {
    fmt.Println(c.ID, c.NameValue)
    return true // 返回 false 提前停止
})

解决得如何:一张全景图

flowchart TB subgraph 用户["四类用户"] A["AI Agent"] H["人类/脚本"] G["Go 程序"] M["MCP 客户端"] end subgraph 封装["crt.sh-skills 四层"] S1["Skills<
>7 个 SKILL.md"] S2["MCP Server<
>20 工具"] S3["CLI<
>26 命令"] S4["Go SDK<
>20 方法"] end subgraph 核心["统一 SDK 核心 pkg/crtsh"] B["buildQuery 参数构造"] P["parser.go HTML 解析"] R["retry + 退避"] E["typed errors"] end A --> S1 M --> S2 H --> S3 G --> S4 S1 --> S2 S2 --> S4 S3 --> S4 S4 --> B B --> P B --> R P --> E 核心 --> CRT["crt.sh"]

关键点

四层共用同一个 SDK 核心。MCP 工具、CLI 命令、Skills 的能力都最终落到 pkg/crtsh 的方法上——这意味着加一个 crt.sh 能力,只需在 SDK 加一个方法,再在 MCP/CLI 各加一层薄封装,能力就同步贯通了。

量化指标

维度数量
搜索类型22可枚举
匹配模式7可枚举
结果分组模式3可枚举
排序方向3可枚举
证书 linter5可枚举
SDK 方法20程序
MCP 工具20AI
CLI 命令26人类
Skills7AI
信息页13宏观

想立刻跑起来?

快速开始