Knowledge Base
Certificate Transparency (CT) — журнал выданных сертификатов
Certificate Transparency (CT Logs)
Категория: TLS / HTTPS · Риск: medium
Certificate Transparency (CT Logs)
Что такое CT
Certificate Transparency — открытая инфраструктура журналирования всех выданных TLS-сертификатов. Каждый браузер (Chrome с 2018, Safari с 2019) **отклоняет сертификаты**, не занесённые хотя бы в два независимых CT-журнала.
Зачем это важно для безопасности
1. **Обнаружение несанкционированных сертификатов**: если злоумышленник через социальную инженерию или взлом CA получит сертификат на ваш домен — он немедленно появится в CT-журнале 2. **Мониторинг поддоменов**: CT-журналы — главный источник для обнаружения новых поддоменов (инструменты: crt.sh, amass, subfinder) 3. **Compliance**: все публично доверенные CA обязаны логировать сертификаты в CT
Поиск всех выданных сертификатов
# Через crt.sh (публичный интерфейс к CT-журналам)
curl -s "https://crt.sh/?q=%.example.com&output=json" \
| jq '.[].name_value' | sort -u
# Вывод включает все поддомены, для которых был выдан сертификат:
# *.example.com
# admin.example.com
# vpn.example.com
# staging.example.com
Мониторинг новых сертификатов
Настройте автоматический мониторинг через certspotter (бесплатный):
# Установка
go install software.sslmate.com/src/certspotter/cmd/certspotter@latest
# Запуск мониторинга
certspotter -watchlist watchlist.txt -script /path/to/notify.sh
# watchlist.txt:
example.com
.example.com # включая поддомены
Или используйте SaaS-решения: [Cert Spotter by SSLMate](https://sslmate.com/certspotter/), [Facebook Certificate Transparency Monitoring](https://developers.facebook.com/tools/ct/).
Как проверить, что ваши сертификаты в CT
# Проверка через openssl — ищем SCT в сертификате
openssl s_client -connect example.com:443 2>/dev/null \
| openssl x509 -noout -text \
| grep -A 5 "CT Precertificate"
# Должны быть Signed Certificate Timestamps (SCT):
# CT Precertificate SCTs:
# Signed Certificate Timestamp:
# Version : v1 (0x0)
# Log ID : ...
Использование CT для инвентаризации поддоменов
import requests
def get_subdomains(domain):
r = requests.get(f"https://crt.sh/?q=%.{domain}&output=json", timeout=30)
names = set()
for cert in r.json():
for name in cert["name_value"].split("\n"):
names.add(name.strip().lstrip("*."))
return sorted(names)
Что делать при обнаружении чужого сертификата
1. Немедленно свяжитесь с CA (они обязаны отозвать сертификат за 24 часа согласно CA/Browser Forum Baseline Requirements) 2. Проверьте CAA-записи вашего домена 3. Изучите логи авторизации ACME
Связанные проверки
- [CAA-авторизация CA](/kb/dns/caa-certificate-authority-authorization)
- [OCSP Stapling](/kb/tls/ocsp-stapling)
- [Инвентаризация поддоменов](/kb/web_app_security/subdomain-takeover-inventory)