Thousands of people around the world make our work possible. Donate today.

Журнал прозорості сертифіката (CT)

Останнє оновлення: | Переглянути всю документацію

Прозорість сертифікатів (CT) це система для реєстрації та моніторингу видачі сертифікатів TLS. CT значно підвищує здатність кожного контролювати та вивчати видачу сертифікатів, і ці можливості призвели до численних поліпшень екосистеми ЦС та безпеки Інтернету. В результаті СТ стрімко стає критичною інфраструктурою.

Let's Encrypt надсилає всі видані нами сертифікати до журналів CT. Ми також видаємо два щорічно розподілені журнали прозорості сертифіката з назвою Oak і Sapling. Усі публічні довірені центри сертифікації можуть реєструватися в наших журналах. Багато кореневих сертифікатів довірених центрів вже включено до наших журналів СТ. Якщо ви керуєте центром сертифікації, а вашого видавця немає у списку прийнятих видавців, будь ласка, повідомте про проблему тут.

Підпишіться на сповіщення в категорії оголошень CT на форумі нашої спільноти, щоб побачити основні оголошення про наші журнали CT.

Фінансування

Якщо ваша організація бажає допомогти нам продовжувати цю роботу, ви можете розглянути такі варіанти, як спонсорство або пожертвування.

Архітектура

Завітайте до нашого блогу, щоб побачити Як Let's Encrypt Керує CT Logs!

Моніторинг журналу

Let's Encrypt створив інструмент моніторингу журналів CT з відкритим вихідним кодом під назвою CT Woodpecker. Ми використовуємо цей інструмент для моніторингу стабільності та узгодженості власних журналів, і сподіваємось, що іншим він також стане в пригоді.

Журнали CT

Інформацію про різні стани життєвого циклу, через які проходить журнал КТ, можна знайти тут.

Виробництво

Тестування

Sunlight


Операції журналу

Щоб перелічити включені корені для певного журналу 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

Надсилання сертифікатів до журналу CT зазвичай обробляється центрами сертифікації. Якщо бажаєте поекспериментувати з цим, почніть з отримання довільного закодованого сертифіката 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+GmL7jskMYYTx6ns3y1YdESZb8+DzS/JBVG4=","timestamp":1576689972016,"extensions":"","signature":"BAMARzBFAiEA4OmuTcft9Jq3XLtcdZz9XinXCvYEY1RdSQICXayMJ+0CIHuujkKBLmQz5Cl/VG6C354cP9gxW0dfgMWB+A2yHi+E"}

Щоб підтвердити, що журнал CT підписано фрагментом Oak 2020, ми використовуємо поле id з наведеної вище команди та запускаємо його за допомогою наведеної нижче команди. Результатом цього буде вихідний ідентифікатор журналу CT.

$ base64 -d <<< "5xLysDd+GmL7jskMYYTx6ns3y1YdESZb8+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+0CIHuujkKBLmQz5Cl/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
2E:64:33:E4:29:7F:54:6E:82:DF:9E:1C:3F:D8:31:5B
47:5F:80:C5:81:F8:0D:B2:1E:2F:84