SSL/TLS 証明書からサブドメインを発見する
発行されたすべての TLS 証明書は公開の Certificate Transparency (CT) ログに記録され、各証明書の SANs フィールドには対象ドメインが列挙されます。ターゲットドメインを CT で検索することは、ステージングホスト・内部パネル・開発環境など DNS スキャンでは見つからないものまで含めて、最も信頼できる受動的サブドメイン列挙手法です。
なぜ CT ログでサブドメインが見えるのか
CA は TLS 証明書発行時に複数の CT ログに送信する必要があります(Chrome と Safari は記録のない証明書を信頼しません)。証明書の Subject Alternative Names (SANs) 拡張には対象 hostname が列挙されます。証明書と SANs は両方、公開ログに永続的に記録されます。
結果:誰かが staging.example.com、internal.example.com、admin-old-2019.example.com に TLS 証明書を発行すれば、その hostname は永遠に公開発見可能になります — ホストが廃止されても、DNS が解決しなくても、証明書が失効していても。
ステップバイステップ
1. ブラウザで試す
下のフォームでドメインを検索 — CT Radar はそのドメインとサブドメインに発行されたすべての証明書を返します。
Try: ···
2. パイプ可能な出力に CLI を使う
# install $ go install github.com/imfht/ct-radar@latest $ export CT_RADAR_KEY=<your-key> # enumerate $ ct-radar example.com api.example.com admin.example.com internal.example.com staging.example.com dev-old.example.com ... 847 unique subdomains
3. httpx にパイプして稼働中のものを探す
$ ct-radar example.com | httpx -silent https://api.example.com [200] https://staging.example.com [403] https://admin.example.com [401] ... 124 live hosts
4. 能動的列挙と組み合わせる
# CT (passive) + subfinder (passive DNS) + amass (active brute force)
$ {
ct-radar example.com;
subfinder -d example.com -silent;
amass enum -passive -d example.com;
} | sort -u | httpx -silent
... 1,247 live hostsヒントと制限
- 証明書がなかったものは CT で見えない。HTTP のみの内部ホストやプライベート CA を使うものは出ません。CT と能動的 DNS 列挙を必ず組み合わせてください。
- ワイルドカード証明書はサブドメインを隠す。*.example.com の証明書はすべてをカバーしますが、具体的なものは何も明かしません。
- 古い証明書は宝。2018 年の失効証明書が、忘れられたまだ稼働中のステージングホストを指すことがあります。
- コードでワイルドカードをフィルタ。他ツールにパイプする際、*. で始まるエントリを除外 — ほとんどの probe ツールが壊れます。
- Let's Encrypt は 2025 に CT から撤退しましたが、すべての LE 証明書は他社の運営する ログにも同送されているため、LE 発行のサブドメインは依然見えます。