Форматы записи TLS-сертификатов
Небольшой комментарий о привычных форматах и способах записи TLS-сертификатов (SSL-сертификатов, как почему-то некоторые продолжают называть). Такой сертификат представляет собой публичный электронный документ, состоящий из множества полей. Внутри эти поля записываются в так называемой ASN.1-структуре, которая, в общих чертах, является иерархией вложенных строк байтов. Общий принцип кодирования здесь такой: строка всегда начинается с префикса, точно задающего тип поля данных и длину данных, а оставшиеся байты – несут сами полезные данные. С базовыми, независимыми от платформы, способами записи связаны разные тонкости, исторически сложившиеся “допущения”, а также и всякие прочие спецификации, например, DER (Distinguished Encoding Rules). Однако реальные хитрости и сложности, происходящие из интерпретации упомянутых схем/спецификаций, возникают только у разработчиков программного обеспечения, которое существенным образом использует данные TLS-сертификатов, но не у пользователей. Например, содержимое файла сертификата в удобном формате PEM выглядит, примерно, так (но тут, для удобства, удалена большая часть строк):
-----BEGIN CERTIFICATE----- MIIEDjCCAvagAwIBAgISBB+ebYSbzCVbUmAq3rUH97bcMA0GCSqGSIb3DQEBCwUA MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD [...] JaRB6DTHZdmM0MzOf6ltVn48cE8LVUuTAM7cFcw+Z1a40XlrMj0nY6Et+QDTZ1n+ 2QZDaj5N+G21wxqvpj29BusHurW0xpFIM/Iv2+A8sX+IWQ== -----END CERTIFICATE-----
Никакой сложности или “криптографии” конкретно тут, в способе записи сертификата, нет. Если не использовать нарочито строгие формулировки, то PEM – это просто текстовый формат с base64-кодированием, переводами строк на заданной границе и строками-разделителями, которые определяются пятью символами “минус” с BEGIN/END. В данном случае:
"-----BEGIN CERTIFICATE-----"
и
"-----END CERTIFICATE-----".
Между этими строками находится просто base64-запись байтов сертификата, закодированного в DER (можно считать, что в “бинарном” виде, а не в “тексте”). Если взять байты сертификата, закодировать их в base64, поместить результат в текстовый редактор, дописать “BEGIN…END” в заданном формате с минусами, добавить переносы строк, то получится PEM. И наоборот. (Исключения, наверное, можно попробовать придумать, но они будут экзотическими.) Естественно, так как сертификат содержит внутри электронную подпись, то значения всех его битов – важны: если что-то изменится, то подпись перестанет сходиться (или вообще проверяться, если испорчена сама запись подписи).
Преобразовать сертификат между текстовым PEM и “бинарным” DER можно при помощи OpenSSL:
PEM -> DER $ openssl x509 -in cert.pem -out cert.der -outform DER DER -> PEM $ openssl x509 -in cert.der -out cert.pem -inform DER -outform PEM
(Опция “-inform DER” во втором случае нужна потому, что openssl x509 по умолчанию ожидает формат PEM.)
В сертификате при этом ничего не изменяется, никаких особо сложных операций не выполняется, а OpenSSL здесь нужен только как удобная утилита “всё в одном”. Аналогичного эффекта, действуя через командную строку, нетрудно добиться и сочетанием cat с base64 -d.
Адрес записки: https://dxdt.ru/2023/12/11/11856/
Похожие записки:
- "Вес" значений омонимов в текстах для LLM
- ChatGPT и Volkswagen
- Байты ключей в квантовом компьютере
- Перспективный ИИ в "разработке кода"
- TLS для DevOps
- Правила пакетной фильтрации и "постквантовое" ClientHello
- TIKTAG и процессоры с кешированием
- ML-KEM на тестовом сервере TLS
- CVE-2024-3094 про бэкдор в liblzma и теория ИБ
- Обновление описания TLS
- Реплика: особенности DNSSEC
Написать комментарий