crt.sh 是什么
在理解 crt.sh-skills 之前,先理解它封装的对象——crt.sh。
一句话
crt.sh 是一个由 Sectigo 运营的证书透明度(Certificate Transparency,CT)搜索引擎,把全球各大 CT 日志里收录的每一张 TLS/SSL 证书都索引进一张可搜索的表,任何人都能免费查。
它解决的问题
当你想知道:
- 某个域名曾经用过哪些证书?
- 某张证书是谁签的?
- 某个 CA 到底签发了多少张证书?
这些信息原本散落在几十个独立的 CT 日志服务器里——每个日志只记录追加进自己那部分的内容,接口各异、无统一查询入口。crt.sh 把它们汇聚成一张表,用一条 SQL 就能查。
>(一张大表)"] L2 --> C L3 --> C L4 --> C C --> Q["一条查询<
>例:?q=example.com"] Q --> R["证书列表 / 详情 / 统计"]
为什么叫"透明度"
证书透明度(CT)是一项公开审计机制:CA 每签发一张证书,就必须追加到至少两个公开 CT 日志。这样任何人都能审计"CA 到底签了什么"——防止 CA 偷偷签发恶意证书。crt.sh 就是这些日志的只读搜索引擎。
crt.sh 的核心能力
openssl为什么需要一个"封装层"
crt.sh 是个对人类友好的网页,但不是对程序友好的 API。直接对接它,你会撞上四堵墙:
墙一:没有官方 API 契约
它的"接口"就是网页 URL 参数(?CN=example.com&exclude=expired),返回的是 HTML 表格,部分端点才返回 JSON。
墙二:HTML 解析负担重
证书详情页 ?id= 只返回 HTML,要把 SHA 指纹、SAN、SCT 这些字段从 HTML 里抠出来——结构还随版本变。
墙三:URL 参数格式微妙
exclude=expired 而非 excludeExpired=on,deduplicate=Y 而非 deduplicate=on,搜索类型本身就是参数名(?CN= 而非 ?searchtype=CN&...),踩坑成本高。
墙四:AI 工具接不上
AI agent 没法直接"操作网页",需要稳定的工具调用接口。
crt.sh-skills 就是来推倒这四堵墙的——把这些能力封装成四种形态:
没有官方 API 契约"] W2["🚧 墙二
HTML 解析负担重"] W3["🚧 墙三
URL 参数格式微妙"] W4["🚧 墙四
AI 工具接不上"] end WALL -->|推倒| L3["crt.sh-skills 封装层"] L3 --> F1["🤖 Skills
给 AI 看的说明书"] L3 --> F2["🔌 MCP
20 个结构化工具"] L3 --> F3["⌨️ CLI
26 条人类命令"] L3 --> F4["📦 SDK
20 个程序方法"] F1 --> CRT["🌐 crt.sh"] F2 --> CRT F3 --> CRT F4 --> CRT
让人类、脚本、AI 都能用同一种一致的方式访问 crt.sh。
接下来
看 这个项目解决什么 —— 用四个场景说清楚痛点,以及解决得如何。