Skip to content

crt.sh 是什么

在理解 crt.sh-skills 之前,先理解它封装的对象——crt.sh

Certificate TransparencySectigo 运营免费 / 公开

一句话

crt.sh 是一个由 Sectigo 运营的证书透明度(Certificate Transparency,CT)搜索引擎,把全球各大 CT 日志里收录的每一张 TLS/SSL 证书都索引进一张可搜索的表,任何人都能免费查。

它解决的问题

当你想知道:

  • 某个域名曾经用过哪些证书
  • 某张证书是谁签的
  • 某个 CA 到底签发了多少张证书

这些信息原本散落在几十个独立的 CT 日志服务器里——每个日志只记录追加进自己那部分的内容,接口各异、无统一查询入口。crt.sh 把它们汇聚成一张表,用一条 SQL 就能查。

flowchart LR subgraph CT日志["全球 CT 日志(数十个)"] direction TB L1["Google Argon"] L2["Cloudflare Nimbus"] L3["Sectigo Sabre"] L4["..."] end L1 --> C["crt.sh 汇聚索引<
>(一张大表)"] L2 --> C L3 --> C L4 --> C C --> Q["一条查询<
>例:?q=example.com"] Q --> R["证书列表 / 详情 / 统计"]

为什么叫"透明度"

证书透明度(CT)是一项公开审计机制:CA 每签发一张证书,就必须追加到至少两个公开 CT 日志。这样任何人都能审计"CA 到底签了什么"——防止 CA 偷偷签发恶意证书。crt.sh 就是这些日志的只读搜索引擎

crt.sh 的核心能力

🔍证书搜索
按域名、CN、SAN、SHA 指纹、CA、邮箱等 22 个维度检索
📄证书详情
给定 crt.sh ID,看完整的签发者、有效期、SAN、SCT、吊销状态
⬇️原始证书下载
取 PEM 原文,可喂给 openssl
🌐ASN.1 / 层级 / 图谱
解码证书结构、查看签发链、查看关系图
📡Atom 订阅
订阅某个 identity 的新签发证书流
📤导出
JSON / CSV / Atom 三种格式导出搜索结果
📚信息页
CT 日志状态、OCSP 响应器、CA 披露、OneCRL 等 13 个页面
🏛️CA 调查
按 CA ID / CA Name 查签发了哪些证书
🔗Censys 联动
把 crt.sh 的查询转成 Censys 查询

为什么需要一个"封装层"

crt.sh 是个对人类友好的网页,但不是对程序友好的 API。直接对接它,你会撞上四堵墙:

墙一:没有官方 API 契约

它的"接口"就是网页 URL 参数(?CN=example.com&exclude=expired),返回的是 HTML 表格,部分端点才返回 JSON。

墙二:HTML 解析负担重

证书详情页 ?id= 只返回 HTML,要把 SHA 指纹、SAN、SCT 这些字段从 HTML 里抠出来——结构还随版本变。

墙三:URL 参数格式微妙

exclude=expired 而非 excludeExpired=ondeduplicate=Y 而非 deduplicate=on,搜索类型本身就是参数名(?CN= 而非 ?searchtype=CN&...),踩坑成本高。

墙四:AI 工具接不上

AI agent 没法直接"操作网页",需要稳定的工具调用接口。

crt.sh-skills 就是来推倒这四堵墙的——把这些能力封装成四种形态

flowchart LR subgraph WALL["直接对接 crt.sh 的四堵墙"] direction TB W1["🚧 墙一
没有官方 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
🤖Skills
告诉 AI 何时用、怎么用
🔌MCP
20 个结构化工具
⌨️CLI
26 条人类命令
📦Go SDK
20 个程序方法

让人类、脚本、AI 都能用同一种一致的方式访问 crt.sh。

接下来

这个项目解决什么 —— 用四个场景说清楚痛点,以及解决得如何。