crt.sh API — 何があり、何がなく、何を使うべきか
crt.sh API を探していますか?少なくとも公式は存在しません。実際に何があり、その制限、そして完全に文書化された REST 代替を紹介します。
crt.sh に公式 API はない
crt.sh は Sectigo の Rob Stradling が公共財として運営する、単一の PostgreSQL インスタンス + Perl CGI です。公開 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 あたり約 1 分間に 5 リクエスト のレート制限があります。重いクエリはタイムアウトする前に空結果または 502 エラーを返します。スキーマは予告なく変わる可能性があります。
よくある crt.sh API 回避策
コミュニティは多数の非公式 crt.sh API ラッパーを作ってきました — Python(PaulSec/crt.sh、pycrtsh)、Go(knqyf263/crtsh)、Steampipe プラグイン、Rust crate、その他数十のスクレイパー。すべて同じ上流制限に当たり、crt.sh の HTML が変わると壊れます。レート制限、タイムアウト、契約の不安定さを解決するものはありません。
一部のチームは公共 crt.sh を完全に避けるため、CT ログ全体の PostgreSQL レプリカを自前ホストしています。動作しますが、数百 GB のストレージ、数週間の初回同期、継続的なレプリケーション保守が必要です。
CT Radar API — 文書化された安定した REST 代替
CT Radar は 19 の活動中 CT ログにわたって同じ Certificate Transparency データを索引化し、文書化された API キー認証の REST エンドポイントで提供します。無料枠は 1 日 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"
}
]
}