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"
}
]
}