Добрый день.
В основной формат сертификата заложены только
обязательные поля которые должны быть абсолютно во всех сертификатах в
строго единичном количестве (независимо от их назначения сертификата, использования и т.д.). Состав обязательных полей определяется версией сертификата (первым полем сертификата). Тут допускается только минимальная пластичность, например, у разных криптопровайдеров может быть разное количество подполей оидов в параметрах открытого ключа, но само поле алгоритма открытого ключа или поле параметров открытого ключа или сам открытый ключ или наименование владельца сертификата обязательно указаны в сертификате V3.
Расширения - это "условно необязательная" информация, которая для каких-то сертификатов обязана присутствовать, для каких-то может присутствовать или отсутствовать, для каких-то обязана отсутствовать. Введены только на V2 или V3 сертификатах, впрочем, V3 самая распространенная. Грубо говоря, это весь "неформат с точки зрения стандарта".
Хотя конечно для каждого расширения есть собственное определение формата где-то еще, но это лишь означает, что одним обработчиком не отделаться и для каждого расширения нужен свой обработчик. В большинстве случаев (но не всегда) сертификаты V3 минимально имеют только расширение "Основные ограничения" и "Использование ключа". В общем случае, приложение обязано понимать все расширения с флагом критического расширения, остальные можно игнорировать.
К расширениям также относятся все массивы с переменным количеством строк и дополнительная информация, которая добавляется согласно изменениям законодательства. Например, в сертификате может быть не указано ни одного адреса по которому доступны списки отзыва сертификатов (типичный корневой сертификат), а может быть указано 4 таких адреса (допустим, 2 адреса в локальной сети некого ведомства и 2 адреса в интернете). Какие-то УЦ добавляют ссылку на сертификат издателя в сертификат клиента, какие-то добавляют OCSP ответчик, а какие-то вообще не указывают.
Есть сертификаты с 1-2 расширенными назначениями сертификата (аутентификация клиента, аутентификация сервера, защита электронной почты), а есть сертификаты с более чем 50 расширенными назначениями (для информационных систем Федерального Казначейства). Теоретически предел в районе 1023 оидов.
Как пример дополнительной информации, указываемой только в квалифицированных сертификатах, согласно закона: политики КС1, КС2, информация о СКЗИ владельца, информация о СКЗИ издателя.
Как свежий пример дополнительной информации: указание получен ли сертификат после 1 июля 2020 года владельцем при личном визите в УЦ или по Интернету с предъявлением прошлого сертификата или по биометрической информации.
Использовать соответственно тоже не просто: нужно определить размер расширений сертификата и по одному перебрать их смотря не дошли ли до конца размера. Для каждого определить оид, флаги. До этого момента есть автоматизация стандартными функциями, но можно и вручную перебирать. Далее по оиду приложение опознает что за расширение и нужно ли обрабатывать. Если нужно то расширение декодируется - для "стандартных" или "давно введенных" декодирование уже как правило есть в криптопровайдере, но вот для недавно введенных может понадобится свой декодер.
Отредактировано пользователем 31 октября 2020 г. 8:13:51(UTC)
| Причина: Не указана