Журналы Certificate Transparency (CT)

Последнее обновление: | Вся документация

Внимание! Английская версия сайта была обновлена, перевод неактуален () Просмотреть на английском

Certificate Transparency (CT) — это система регистрации и мониторинга выдачи сертификатов TLS. CT значительно расширяет возможности любого отслеживать и изучать выдачу сертификатов, значительно улучшая экосистему Центров Сертификации и веб-безопасность. Система CT быстро становится критически важной инфраструктурой.

Let's Encrypt отправляет все выданные нами сертификаты для включения в журналы CT. Мы также работаем с двумя журналами CT, шардирующими свои данные по годам, под названием Oak и Testflume. Мы приглашаем все Удостоверяющие центры, работающие публично, использовать наши журналы. Многие корневые сертификаты сторонних ЦС уже добавлены в наши журналы СТ. Свяжитесь с нами по эл. почте для добавления новых корневых сертификатов в наши журналы, если ваши не были включены.

Зарегистрируйтесь для получения уведомлений в CT объявлениях нашего форума сообщества, чтобы увидеть основные объявления о наших журналах CT.

Финансирование

Мы хотели бы поблагодарить наших партнеров за щедрую финансировую поддержку нашего журнала CT. Если Ваша организация хотела бы помочь нам продолжить эту работу, пожалуйста станьте нашим спонсором или пожертвователем.

Sectigo

Архитектура

Посетите наш блог, чтобы узнать Как Let's Encrypt ведёт журналы CT!

Отслеживание журналов CT

Let's Encrypt создал CT Woodpecker — инструмент с открытым исходным кодом для отслеживания журналов CT. С помощью этого инструмента мы отслеживаем стабильность наших собственных журналов и их соответствие общепринятым стандартам, и мы надеемся, что он будет полезен другим.

Журналы CT

Официальное использование

Тестирование


Действия с журналами

Для перечисления добавленных корневых сертификатов в конкретный журнал СТ, выполните следующую команду в консоли:

$ for i in $(curl -s https://oak.ct.letsencrypt.org/2020/ct/v1/get-roots | jq -r '.certificates[]'); do
    echo '------'; base64 -d <<< "${i}" | openssl x509 -inform der -noout -issuer -serial
done

Добавление сертификатов в журналы СТ обычно выполняется Удостоверяющими Центрами. Если вы хотите поэкспериментировать, начните с получения PEM-зашифрованного сертификата с нашего любимого сайта. Скопируйте и вставьте следующую команду в консоль.

$ echo | \
openssl s_client \
    -connect "letsencrypt.org":443 \
    -servername "letsencrypt.org" \
    -verify_hostname "letsencrypt.org" 2>/dev/null | \
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > example.crt

Перед отправкой сертификата, его данные необходимо кодировать JSON в специальной структуре. Вы можете использовать генератор JSON, предоставленный https://crt.sh/gen-add-chain, для выполнения этой задачи. Утилита crt.sh возвращает JSON. Загрузите данные на свой компьютер, переименуйте файл, если необходимо, и введите следующую команду для выполнения операции дополнения цепочки (RFC 6962, раздел 4.1), чтобы отправить сертификат в журнал CT. Вывод будет содержать подпись, которая фактически является SCT. Подробнее о подписи в данный момент.

$ curl \
    -X POST \
   --data @example-json-bundle.json \
    -H "Content-Type: application/json" \
    -H "User-Agent: lets-encrypt-ct-log-example-1.0" \
   https://oak.ct.letsencrypt.org/2020/ct/v1/add-chain
{"sct_version":0,"id":"5xLysDd+GmL7jskMYTx6ns3y1YdESZb8+DzS/JBVG4=","timestamp":1576689972016,"extensions":"BAMARzBFAiEA4OmuTcft9Jq3XLtcdZz9XinXCvY1RdSQICXayMJ+

Let's Encrypt отправляет все выданные нами сертификаты для включения в журналы CT. Мы также сами ведём журналы CT и принимаем для включения в них сертификаты, выданные любыми доверенными центрами сертификации.

$ base64 -d <<< "5xLysDd+GmL7jskMYTx6ns3y1YdESZb8+DzS/JBVG4=" | xxd -p -c 64 | sed -e 's/.. &:/g' -e 's/:$//' | tr '[:lower:]' '[:upper:]'
E7:12:F2:B0:37:7E:1A:62:FB:8E:C9:0C:61:84:F1:EA:7B:37:CB:56:1D:11:26:5B:F3:E0:F3:4B:F2:41:54:6E

Используя поле подписи, мы можем проверить, что сертификат был отправлен в журнал. Используя наше Погружение в SCT, вы сможете уточнить это значение.

$ base64 -d <<< "BAMARzBFAiEA4OmuTcft9Jq3XLtcdZz9XinXCvYEY1RdSQICXayMJ+0CIHuujkBLmQz5Cl/VG6C354cP9gxW0dfgMWB+A2yHi+E" | xxd -p -c 16 | sed -e 's/.. &:/g' -e 's/:$//' | tr '[:lower:]' '[:upper:]'
04:03:00:47:30:45:02:21:00:E0:E9:AE:4D:C7:ED:F4
9A:B7:5C:BB:5C:75:9C:FD:5E:29:D7:0A:F6:04:63:54
5D:49:02:02:5D:AC:8C:27:ED:02:20:7B:AE:8E:42:81
format@@2E:33:29:7F:54:6E:82:DF:9E:9E:1C:3F:D8:31:5B
47:5F:80