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

API キーを取得

GitHub でサインイン。無料枠は即時有効、クレジットカード不要。

API キーを取得 →