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

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

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

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

Зареєструйтеся на сповіщення в Категорія оголошень CT нашого форуму спільноти, щоб побачити основні повідомлення про наші CT.

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

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

Sectigo

Архітектура

Перевірте наш блог щоб побачити Як Let's Encrypt Runs CT Logs!

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

Let's Encrypt створив інструмент моніторингу журналів з відкритим вихідним кодом CТ, що називається 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

Надсилання сертифікатів до журналу 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.) для надсилання сертифікату до журналу 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