crt.sh API —— 有什么、没什么、用什么替代

在找 crt.sh API?没有 —— 至少没有官方版。这里说明实际能用什么、限制如何,以及一个有完整文档的 REST 替代方案。

crt.sh 没有官方 API

crt.sh 是一个单实例 PostgreSQL 数据库 + Perl CGI 接口,由 Sectigo 的 Rob Stradling 作为公共服务维护。没有公开 API 规范、没有 SDK、没有速率文档、没有 SLA。最接近程序化访问的方式就是在搜索 URL 后加 ?output=json

$ curl 'https://crt.sh/?q=example.com&output=json'
[{"issuer_ca_id": 16418, "issuer_name": "CN=Let's Encrypt R3, O=...", "common_name": "example.com", "name_value": "example.com\nwww.example.com", "id": 6735345729, ...}, ...]

这是非官方、未文档化且受速率限制约束的,每个源 IP 大约 5 次/分钟。重查询超时前会返回空结果或 502 错误。schema 可能毫无通知地变动。

常见 crt.sh API 绕路方法

社区已经造了一长串非官方 crt.sh API 包装器 —— Python(PaulSec/crt.sh、pycrtsh)、Go(knqyf263/crtsh)、Steampipe 插件、Rust crate,以及几十个一次性脚本。它们都会撞上同一个上游限制,crt.sh HTML 改了就坏。它们没有任何一个能解决速率限制、超时、契约不稳定的问题。

有些团队自建 PostgreSQL 副本同步 CT 日志全量,绕开公共 crt.sh。可行,但要付出数百 GB 存储、数周初次同步时间、持续的副本维护代价。

CT Radar API —— 有文档、稳定的 REST 替代

CT Radar 在 19 路活跃 CT log 上索引同样的 Certificate Transparency 数据,通过有文档、API key 鉴权的 REST 端点对外。免费档每天 100 次搜索;Pro 和 Enterprise 提高额度。默认输出 JSON,CLI 支持 NDJSON 用于流式管道。

curl

$ curl -s -H "X-API-Key: $KEY" \
    "https://cert.imfht.com/api/search?q=example.com" \
  | jq '.results[].domain'

Go CLI

$ go install github.com/imfht/ct-radar@latest
$ export CT_RADAR_KEY=...
$ ct-radar example.com | httpx -silent | nuclei -t exposures/

Python

$ pip install ct-radar
$ ct-radar example.com --json | jq '.results[].domain'

响应格式

{
  "query": "example.com",
  "count": 23,
  "total": 487,
  "truncated": false,
  "results": [
    {
      "id": 287345672094,
      "domain": "api.example.com",
      "issuer": "Let's Encrypt R3",
      "fingerprint": "ab12cd34...",
      "valid_from": "2026-01-15T00:00:00Z",
      "valid_to": "2026-04-15T23:59:59Z"
    }
  ]
}

申请 API key

用 GitHub 登录。免费档即时生效,不用信用卡。

申请 API key →