Поиск по прозрачности сертификатов

Каждый публично доверенный сертификат, когда-либо выданный для домена, записывается в публичные журналы — этот поиск читает их обратно для вас. Введите домен и посмотрите, что crt.sh записал для него и его поддоменов: кто выдал каждый сертификат, какие имена он покрывает и когда он был действителен. Это аудит, который находит сертификаты, о которых вы забыли, — и те, о которых вы никогда не просили.

Хотите, чтобы за этим следили непрерывно? Следите бесплатно с myeventwatch — оповещения об истечении срока и простое, карта не нужна.

Что измеряет поиск

Прозрачность сертификатов превращает выпуск сертификатов из частной сделки в публичную запись. Когда центр сертификации выпускает сертификат для публичного имени, он отправляет сертификат в несколько журналов CT, а браузеры отклоняют сертификаты, не попавшие в журналы. Побочный эффект — подарок защитникам: полная история выпуска каждого домена находится в открытом доступе и ждёт, пока её прочитают. Страница вызывает GET /api/check/cert-search на сервере sysosx, который делает один запрос к crt.sh — публичному индексу этих журналов — для домена и всего, что под ним, нормализует ответ, сортирует его от самых новых и кэширует на час. Показывается до 200 записей; домен с большим числом получает уведомление об усечении и истинное общее число, а не молчаливое обрезание.

Читайте результат как инвентарь, а не как вердикт. Продуктивный вопрос для каждой записи — «какая из наших систем это запросила?». Современные инфраструктуры выпускают сертификаты из большего числа мест, чем думают их владельцы: веб-хост, CDN, почтовый провайдер, конструктор сайтов маркетинговой команды, ingress Kubernetes в кластере, который кто-то поднял в прошлом году. Большинство из них законны, и некоторые в любом случае станут для вас новостью — что само по себе полезно, потому что инвентарь сертификатов, которого вы никогда не видели, не может быть частью чьего-либо плана продления или отзыва. Самые важные записи — те, которые никто не может сопоставить с системой: неизвестный издатель, неизвестный поддомен, дата выпуска без развёртывания рядом. Они редки, и именно их CT был задуман выявлять.

Три инструмента, три вопроса

Этот поиск отвечает на вопрос «что когда-либо было выпущено?». Проверка SSL отвечает на вопрос «что сервер предъявляет прямо сейчас?» живым рукопожатием — единственным способом узнать, что на самом деле получают посетители. Оценщик SSL отвечает на вопрос «насколько хорошо настроен TLS этого сервера?» — версии протоколов, прямая секретность, HSTS, с буквенной оценкой. А браузерный парсер сертификатов SSL читает файл сертификата, который у вас уже есть. Продление, которое есть в журналах, но никогда не было развёрнуто, появляется здесь, а не в проверке; сервер, предъявляющий старый сертификат, появляется в проверке, а не здесь. Когда они расходятся, каждый говорит свою правду — используйте тот, что соответствует вашему вопросу.

Частые вопросы

Что такое прозрачность сертификатов, в одном абзаце?

С 2018 года браузеры требуют, чтобы публично доверенные сертификаты публиковались в журналах прозрачности сертификатов (CT) — публичных списках с только добавлением каждого сертификата, который выпускает CA. Журналы существуют для того, чтобы ошибочный выпуск не мог спрятаться: если появится сертификат для вашего домена, о котором вы никогда не просили, он виден всем, кто смотрит, включая вас. Этот инструмент смотрит от вашего имени через crt.sh, самый известный публичный индекс этих журналов.

Чем это отличается от проверки SSL и оценщика SSL?

Три разных вопроса. Проверка SSL спрашивает, какой сертификат сервер предъявляет прямо сейчас, в живом рукопожатии. Оценщик SSL проверяет, как настроен TLS этого сервера — протоколы, шифры, HSTS — и ставит ему оценку. Этот поиск спрашивает, что когда-либо было выпущено для домена, согласно публичным журналам. Он может выявить сертификаты, которые живые инструменты не могут: забытые сертификаты для staging, сертификаты от CA, которыми ваша организация больше не пользуется, и — случай, для которого был создан CT — сертификаты, о которых никто в вашей команде вообще не просил.

Почему это выполняется с сервера, а не в моём браузере?

Браузерный парсер сертификатов на этом сайте тоже предлагает поиск по crt.sh и прямо говорит, что его работа зависит от заголовков cross-origin у crt.sh — браузер может читать только то, что сторонний сервис разрешает ему читать. Серверный запрос не должен удовлетворять никакой политике cross-origin, поэтому поиск здесь работает одинаково каждый раз. Обмен — обычный: домен, который вы вводите, отправляется в crt.sh с сервера sysosx (и на час ответ кэшируется), о чём страница заявляет, а не скрывает.

Я вижу сертификаты, которые не узнаю. Стоит ли паниковать?

Пока нет. Большинство незнакомых записей обыденны: хостинг-провайдер или CDN, выпускающий от вашего имени (Cloudflare, балансировщик нагрузки, конструктор сайтов), центр сертификации, от которого ваша организация ушла, или система автоматического продления, которую кто-то настроил и забыл. Пройдитесь по списку по издателю и дате и сопоставьте каждую запись с системой, которой вы управляете, или провайдером, которому вы платите. Паника — ну, срочное расследование — для остального: сертификат от CA, которым никто не пользуется, покрывающий имена, которыми никто не управляет, выпущенный в момент, когда никто ничего не развёртывал. Это либо забытый уголок вашей собственной инфраструктуры, который стоит задокументировать, либо ошибочный выпуск, который CT существует, чтобы ловить, и его следует преследовать, пока он не будет объяснён.

Почему результат кэшируется на час, и почему поиск может не сработать?

Потому что crt.sh — бесплатный публичный сервис, заведомо медленный под нагрузкой, а история сертификатов меняется днями, а не минутами — час кэширования ничего не стоит в свежести и не даёт этому инструменту добавлять нагрузку на crt.sh: не более одного восходящего запроса на домен в час. Когда crt.sh недоступен или слишком медлен, поиск говорит об этом явной ошибкой, а не возвращает пустой список, потому что «сертификаты не найдены» и «поиск по журналам не удался» — противоположные выводы, и только один из них истинен.