ЧТЗ_реестры_сертификатов_УКЭП_4.2.2_v01_draft

4.2.2 Создание распределённых реестров данных о сертификатах УКЭП и событиях жизненного цикла сертификатов УКЭП

Работы выполняются в соответствии с пунктами /4.2.2.1, 4.2.2.5, 4.2.2.11 Заявки № ИЭП-1 «Создание реестра сертификатов ключей проверки электронной подписи на базе технологии распределённого реестра».

Назначение работ. Ведение в распределённых реестрах данных о квалифицированных сертификатах ключей проверки электронной подписи, созданных аккредитованными удостоверяющими центрами и Головным удостоверяющим центром, функции которого осуществляет уполномоченный федеральный орган (далее — сертификаты УКЭП), и о событиях их жизненного цикла. Достоверная фиксация сведений о сертификатах УКЭП и событиях их жизненного цикла, а также возможность проверки статуса сертификата и статуса аккредитации выдавшего его удостоверяющего центра на любой момент времени в прошлом — условия признания действительности усиленной квалифицированной электронной подписи (статья 11 Федерального закона № 63-ФЗ). В отличие от сертификатов УНЭП (п. 4.2.3), для сертификатов УКЭП обязательна проверка аккредитации издателя сертификата: как при внесении сведений о сертификате, так и при определении его статуса на заданную дату.

Целевая модель. Данные о сертификатах УКЭП разделяются между двумя каналами распределённого реестра: приватным каналом сертификатов УЦ, содержащим сведения из сертификата (в том числе персональные данные владельца), сам сертификат и события его жизненного цикла, и публичным каналом сертификатов УЦ, содержащим открытый ключ, сведения о периоде действия сертификата и события его жизненного цикла. Внесение сведений выполняется через программный интерфейс (REST API) с разбором (парсингом) сертификата, форматно-логическим контролем, проверкой уникальности, проверкой цепочки доверия по реестру аккредитации и сертификатов УЦ и криптографическими проверками; перенос сведений в публичный канал выполняется автоматически сервисом-ретранслятором ЕСИА. Статус сертификата на заданную дату определяется по истории событий с учётом статуса аккредитации издателя.

Границы требования. В рамках реализации требования не предусмотрено:

  • ведение сведений о сертификатах УНЭП (выполняется в рамках п. 4.2.3);

  • ведение сведений об аккредитации удостоверяющих центров (выполняется в рамках п. 4.2.1);

  • изменение функциональности ЕПГУ и ИС ГУЦ (и ЕСИА);

  • ведение сведений об электронной подписи как самостоятельном активе.

Требования к функциям. В рамках данного требования необходимо:

  1. Реализовать ведение в приватном канале сертификатов УЦ записей о сертификатах УКЭП с составом полей согласно таблице 1.

  2. Реализовать процесс внесения сведений о сертификате УКЭП, обеспечивающий: приём сертификата в кодировках PEM и DER; декодирование и разбор (парсинг) сертификата; проверку существования сертификата и поиск сертификатов цепочки доверия в реестре аккредитации и сертификатов УЦ; форматную проверку сертификата; проверку уникальности; криптографическую проверку электронной подписи сертификата; полную криптографическую проверку цепочки доверия и статуса отзыва; запрос списка отозванных сертификатов из локального хранилища; регистрацию сертификата с созданием записи и события «начало действия сертификата»; возврат идентификатора записи.

  3. Обеспечить форматно-логический контроль сведений о сертификате УКЭП: проверки парсинга с ограничениями согласно таблице 2, фоновые семантические проверки и обязательные для сертификатов УКЭП проверки с формированием перечня предупреждений согласно таблице 3.

  4. Обеспечить ведение истории изменения статуса сертификата с составом полей согласно таблице 5 и ведение статусной модели сертификата согласно таблицам 6–7.

  5. Реализовать функцию изменения статуса сертификата с проверкой допустимости перехода по статусной модели, идемпотентностью и возвратом кодов ошибок.

  6. Реализовать функцию логической отмены сертификата.

  7. Реализовать метод получения данных сертификатов по заданному фильтру в приватном канале сертификатов.

  8. Обеспечить перенос сведений о сертификатах УКЭП и событиях их жизненного цикла в публичный канал сертификатов УЦ с составом полей согласно таблице 10.

  9. Реализовать представления данных о статусе сертификата УКЭП: историю статуса сертификата, статус сертификата на заданный момент времени, периоды действия сертификата, — с учётом статуса аккредитации издателя сертификата.

  10. Обеспечить формирование идентификаторов записей о сертификатах единым механизмом (п. 4.2.2.5).

4.2.2.1 Требования к ведению сведений о сертификатах УКЭП в приватном канале

Доступ к чтению и записи в приватном канале сертификатов УЦ имеют УЦ-владелец канала и ЕСИА. Приватный канал может содержать персональные данные владельца сертификата.

Запись о сертификате УКЭП в приватном канале содержит следующие сведения (таблица 1).

Таблица 1. Состав записи о сертификате УКЭП в приватном канале

Поле

Назначение

_id

Идентификатор записи в CouchDB; формируется чейнкодом при создании записи единым механизмом (п. 4.2.2.5)

hashTBS

Значение хэш-функции от TBS сертификата (ГОСТ Р 34.11-2012, 256 бит)

issuerUUID

UUID сертификата издателя; для самоподписанного сертификата issuerUUID = _id

ownerType

Тип владельца сертификата: individual_entrepreneur — индивидуальный предприниматель; foreign_entity_branch — филиал (представительство) иностранного юридического лица; legal_entity — юридическое лицо; official — должностное лицо; individual — физическое лицо; null — тип владельца не определён

version*

Версия формата сертификата

serialNumber*

Серийный номер сертификата

subjectPublicKeyInfo*

Сведения о ключе проверки ЭП владельца: algorithm, publicKeyParamSet, digestParamSet, subjectPublicKey

validityNotBefore*

Дата начала действия сертификата (время в формате UTC)

validityNotAfter*

Дата окончания действия сертификата (время в формате UTC)

issuer, subject

Сведения об издателе / о владельце: commonName* (обязательное), surname, givenName, countryName, stateOrProvinceName, localityName, streetAddress, organizationName, organizationUnitName, title, OGRN, SNILS, INN, INNLE, OGRNIP, emailAddress, telephoneNumber, businessCategory, dnQualifier, description, initials, generationQualifier, postalCode, unstructuredName, federalTresuaryRegisterID

subjectUniqueIdentifier, issuerUniqueIdentifier

Уникальные идентификаторы владельца / издателя

extensions

Расширения: subjectAltName, keyIdentifier, authorityCertSerialNumber, keyUsage, privateKeyUsagePeriod (privateKeyNotBefore, privateKeyNotAfter — время в формате UTC), policyIdentifier, identificationKind, subjectSignTool, issuerSignTool (signTool, cATool, signToolCert, cAToolCert), extKeyUsage, CRLDistributionPoints, authorityInfoAccess (accessDescription, freshestCRL)

algorithmSignature*

Идентификатор алгоритма ЭП сертификата

signatureValue*

Значение ЭП сертификата

certificate

Исходный сертификат

unknownOID

Перечень неизвестных объектных идентификаторов (OID) расширений

warnings

Перечень ошибок, найденных при форматной проверке сертификата (предупреждения)

isChecked

Флаг форматной проверки структуры сертификата (True / False)

logicalCancelFlag

Флаг логической отмены (True / False)

createdAtCC

Время создания записи в канале (время формирования пользователем запроса на внесение сведений в чейнкод; формат UTC)

* отмечены обязательные поля.

Внесение сведений о сертификате УКЭП выполняется методом создания записи о сертификате в приватном канале: POST /certificate/guc/create — для канала аккредитации и сертификатов ГУЦ, POST /certificate/qual/create — для приватных каналов квалифицированных сертификатов. На вход метода подаётся сертификат (certificate), на выходе возвращается идентификатор вида YYYY-MM-DDTHH:MM:SSZ;hashTBS — конкатенация даты начала действия сертификата (время в формате UTC), знака «;» и значения хэш-функции от TBS сертификата.

Процесс внесения сведений должен выполняться в следующей последовательности:

  1. Приём и декодирование сертификата: проверка непустого входа, ограничение размера входных данных, определение кодировки (PEM / Base64 / DER), декодирование.

  2. Парсинг сертификата: первичная проверка DER-структуры, построение ASN.1-дерева с контролем лимитов (таблица 2), разбор структуры X.509 (tbsCertificate, signatureAlgorithm, signatureValue, поля TBS, имя издателя и владельца, расширения, открытый ключ), вычисление хэша TBS (hashTBS, ГОСТ Р 34.11-2012, 256 бит).

  3. Проверка существования сертификата в реестре аккредитации и сертификатов УЦ; отказ при наличии записи с таким идентификатором и logicalCancelFlag = False.

  4. Форматная проверка сертификата.

  5. Для несамоподписанного сертификата — запрос родительских сертификатов из реестра аккредитации и сертификатов УЦ и проверка цепочки доверия; отказ при отсутствии родительского сертификата. Для корневого сертификата — проверка допустимости регистрации корневого сертификата в канале и наличия идентичного сертификата в локальном хранилище.

  6. Запрос списка отозванных сертификатов из локального хранилища; криптографические проверки (проверка электронной подписи сертификата средствами СКЗИ, полная криптографическая проверка цепочки доверия и статуса отзыва).

  7. Регистрация сертификата: создание записи о сертификате, создание записи в истории изменения статуса с событием «1» (начало действия сертификата) и updatedAt = validityNotBefore, установление полей isChecked и logicalCancelFlag в значение False, возврат идентификатора записи.

  8. Перенос сведений в публичный канал сертификатов (п. 4.2.2.3) — параллельно с внесением сведений в приватный канал.

Фоновые проверки сертификата выполняются после внесения записи о сертификате и формируют перечень предупреждений; по завершении проверок поле isChecked принимает значение True и выполняется перенос статуса в публичный реестр сертификатов.

Ограничения парсинга сертификатов приведены в таблице 2.

Таблица 2. Ограничения парсинга сертификатов

Параметр

Значение

max_asn1_depth — максимальная глубина вложенности ASN.1-дерева

16

max_total_nodes — максимальное количество ASN.1-узлов одного сертификата

10 000

max_name_rdn_count — максимальное количество RDN в полях issuer/subject

64

max_extensions_count — максимальное количество расширений

64

max_extension_size — максимальный размер одного расширения

8 192 байт

max_certificate_size — максимальный размер DER-представления сертификата

256 КБ

max_oid_length — максимальное количество компонент в OID

16

cert_id_hash_algorithm — алгоритм хэширования для идентификатора сертификата

ГОСТ Р 34.11-2012, 256 бит

Состав предупреждений форматно-логического контроля для сертификатов УКЭП приведён в таблице 3 (фоновые семантические проверки — общие для сертификатов обоих типов — и обязательные для УКЭП проверки).

Таблица 3. Предупреждения форматно-логического контроля сертификатов УКЭП

Проверка

Код предупреждения

Условие

Версия формата

QCERT_VERSION_NOT_V3

tbs.version ≠ 2

Серийный номер

QCERT_SERIAL_NOT_INTEGER, QCERT_SERIAL_NOT_POSITIVE

serialNumber не целое число; serialNumber ≤ 0

Алгоритм подписи

QCERT_SIGNATURE_ALGORITHM_MISMATCH, QCERT_SIGNATURE_ALGORITHM_NOT_GOST

несовпадение tbsCertificate.signature и Certificate.signatureAlgorithm; OID алгоритма подписи не из множества {1.2.643.7.1.1.3.2, 1.2.643.7.1.1.3.3}

Ключ проверки ЭП

QCERT_SPKI_KEY_EMPTY, QCERT_SPKI_ALGORITHM_INCOMPATIBLE

subjectPublicKey пуст; алгоритм открытого ключа несовместим с алгоритмом подписи (для 1.2.643.7.1.1.3.2 допустим ключ 1.2.643.7.1.1.1.1; для 1.2.643.7.1.1.3.3 — 1.2.643.7.1.1.1.2)

Тип владельца

QCERT_OWNER_TYPE_CONFLICTING_REGISTRATION_IDS, QCERT_OWNER_TYPE_UNDETERMINED, QCERT_SUBJECT_INDIVIDUAL_PROFILE_INVALID, QCERT_SUBJECT_LEGAL_ENTITY_PROFILE_INVALID, QCERT_SUBJECT_ENTREPRENEUR_PROFILE_INVALID, QCERT_SUBJECT_OFFICIAL_PROFILE_INVALID, QCERT_SUBJECT_FOREIGN_BRANCH_PROFILE_INVALID

взаимоисключающие идентификаторы (OGRN+OGRNIP либо OGRNIP+INNLE); тип владельца не определён; состав полей subject не соответствует требованиям к квалифицированному сертификату соответствующего типа владельца

Атрибуты имени

QCERT_NAME_ATTRIBUTE_FORMAT_INVALID

атрибут subject/issuer не соответствует требованиям к типу или длине значения (countryName — ровно 2 символа; OGRN — 13 цифр; SNILS — 11; INN — 12; INNLE — 10; OGRNIP — 15)

Страна

QCERT_SUBJECT_COUNTRY_NOT_RU, QCERT_ISSUER_COUNTRY_NOT_RU

country в subject / issuer не равно «RU» (с указанием типа владельца)

Полномочия издателя

QCERT_ISSUER_NOT_AUTHORIZED

issuer.ogrn отсутствует или отличается от {1047702026701, 1037700013020, 1047797019830, 1047707030513}

AKI

QCERT_AKI_SERIAL_MISSING

расширение AKI не содержит authorityCertSerialNumber

keyUsage

QCERT_KEY_USAGE_MISSING, QCERT_KU_ENCIPHERONLY_WITHOUT_KEYAGREEMENT, QCERT_KU_DECIPHERONLY_WITHOUT_KEYAGREEMENT

расширение keyUsage отсутствует; бит 7 установлен без бита 4; бит 8 установлен без бита 4

privateKeyUsagePeriod

QCERT_PKEY_USAGE_PERIOD_MISSING, QCERT_PKEY_USAGE_PERIOD_CRITICAL

расширение отсутствует; расширение критично (critical = true)

Политики сертификации

QCERT_CERT_POLICIES_MISSING, QCERT_CERT_POLICIES_NO_CLASS_OID, QCERT_CERT_POLICIES_CLASS_ACCUMULATION_VIOLATED

расширение certificatePolicies отсутствует; отсутствуют идентификаторы класса средства ЭП 1.2.643.100.113.1 … 1.2.643.100.113.6; нарушено накопительное правило (для класса N должны присутствовать идентификаторы всех классов 1…N-1)

identificationKind

QCERT_IDENTIFICATION_KIND_MISSING, QCERT_IDENTIFICATION_KIND_INVALID_VALUE, QCERT_IDENTIFICATION_KIND_CRITICAL

расширение отсутствует; значение вне множества {0, 1, 2, 3}; расширение критично

Средства ЭП

QCERT_SUBJECT_SIGN_TOOL_MISSING, QCERT_SUBJECT_SIGN_TOOL_FORMAT_INVALID, QCERT_SUBJECT_SIGN_TOOL_CRITICAL, QCERT_ISSUER_SIGN_TOOL_MISSING, QCERT_ISSUER_SIGN_TOOL_FORMAT_INVALID, QCERT_ISSUER_SIGN_TOOL_CRITICAL

расширение subjectSignTool/issuerSignTool отсутствует; тип или длина не соответствуют (UTF8String, subjectSignTool/signTool/cATool — от 1 до 200 символов, signToolCert/cAToolCert — от 1 до 100 символов); расширение критично

Сроки действия

QCERT_NOT_YET_VALID, QCERT_EXPIRED

время регистрации меньше tbs.validity.notBefore; время регистрации превышает tbs.validity.notAfter

Издатель и аккредитация

QCERT_PARENT_NOT_VALID_AT_ISSUANCE, QCERT_ISSUER_NOT_ACCREDITED_AT_ISSUANCE

сертификат издателя не был действителен на дату начала действия регистрируемого сертификата (notBefore); УЦ не имел действующей аккредитации на дату начала действия сертификата (notBefore) — проверка не выполняется для канала аккредитации и сертификатов ГУЦ и приватного канала сертификатов ГУЦ

Помимо перечисленных выполняются общие фоновые семантические проверки сертификата (для сертификатов обоих типов) с формированием предупреждений: корректность версии TBS и уникальных идентификаторов; корректность полей validity (формат дат, порядок интервала, кодирование времени); необычно малые/большие серийный номер, открытый ключ и срок действия; дублирование серийного номера и открытого ключа в канале; пустые имена и атрибуты; корректность расширений subjectAltName, extendedKeyUsage, authorityKeyIdentifier, subjectKeyIdentifier, basicConstraints; корректность значений OID, перечислимых и булевых полей; неизвестные критические расширения; соответствие признаков роли УЦ (cA, keyCertSign, pathLenConstraint); корректность keyUsage и privateKeyUsagePeriod.

Коды ошибок создания записи о сертификате в приватном канале приведены в таблице 4.

Таблица 4. Коды ошибок создания записи о сертификате в приватном канале

Код

Расшифровка

ERR-0010

Пустой запрос

ERR-0701

Размер входных данных слишком велик

ERR-0702

Множественные PEM-блоки

ERR-0703

Пустое тело PEM-сертификата

ERR-0704

Ошибка формата кодировки BASE64

ERR-0705

Ошибка декодирования PEM

ERR-0706

Пустая строка после очистки

ERR-0707

Ошибка DER-структуры

ERR-0708

Ошибка ASN.1 декодирования

ERR-0709

Превышение вложенности ASN.1 дерева

ERR-0710

Превышение размера DER-структуры

ERR-0711

Не является структурой X.509

ERR-0712

Некорректная структура TBS

ERR-0713

Некорректный тип данных ASN.1

ERR-0714

Нарушение структуры имени

ERR-0715

Нарушение структуры поля подписи ASN.1

ERR-0716

Нарушение структуры поля открытый ключ

ERR-0717

Ошибка декодирования расширения

ERR-0718

Ошибка извлечения TBS

ERR-0719

Некорректный размер TBS

ERR-0720

Ошибка расчёта значения хэш-функции от TBS

ERR-0721

Сертификат с таким _id уже существует в реестре

ERR-0722

Подпись сертификата не прошла криптографическую проверку

ERR-0723

Не найден ни один кандидат в родители и сертификат не может быть зарегистрирован как корневой

ERR-0724

Параметры сертификата не соответствуют допустимым параметрам корневого сертификата для данного канала

ERR-0725

В локальном хранилище не найден полностью идентичный сертификат

ERR-0726

Алгоритм подписи из signatureAlgorithm не поддерживается СКЗИ

ERR-0727

СКЗИ завершило проверку подписи с внутренней ошибкой

ERR-0728

Не удалось сформировать начальный json-объект регистрации сертификата

4.2.2.2 Требования к ведению событий жизненного цикла сертификатов УКЭП

Для каждого сертификата УКЭП ведётся история изменения статуса сертификата с составом полей согласно таблице 5 (таблица 2 в предыдущей редакции — примечание: здесь и далее нумерация таблиц черновика сквозная и уточняется при вставке в документ).

Таблица 5. Состав записи истории изменения статуса сертификата

Поле

Назначение

_id

Идентификатор записи об истории; формируется как комбинация uuid сертификата и суффикса HIST

history*

История изменения статуса сертификата (массив событий)

versionStatus*

Версия записи об истории изменения статуса сертификата

updatedAt*

Время вступления изменения статуса сертификата в силу (время в формате UTC)

event*

Событие изменения статуса сертификата: 0 — аннулирование сертификата; 1 — начало действия сертификата; 2 — прекращение действия сертификата; 3 — возобновление действия сертификата

reason

Причина изменения статуса сертификата (коды причин отзыва сертификатов; поле может быть пустым)

isCanceled

Флаг отмены события (True / False)

createdAtCC

Время создания записи в канале (время формирования пользователем запроса на внесение сведений в чейнкод; формат UTC)

* отмечены обязательные поля.

Статусная модель сертификата приведена в таблицах 6–7. Сертификат может находиться в агрегированных состояниях «Действует» и «Не действует». События и причины изменения статуса приведены в таблице 6.

Таблица 6. События и причины изменения статуса сертификата

Событие

Причины

0 — Аннулирование сертификата

регистрируется независимо от основного статуса; после аннулирования итоговый статус всегда «Не действует»; аннулирование не запрещает регистрацию последующих событий

1 — Начало действия сертификата

—

2 — Прекращение действия сертификата

reason = 0 — отозван по неустановленной причине; 1 — ключ подписи скомпрометирован; 2 — скомпрометирован ключ подписи УЦ; 3 — изменена принадлежность; 4 — сертификат заменён новым; 5 — прекращение деятельности; 6 — временно приостановлен; 9 — отозваны привилегии у владельца; 10 — скомпрометирован ключ атрибутного центра сертификации; истёк срок действия сертификата (код не указан)

3 — Возобновление действия сертификата

reason = 8 — удалён из списка отозванных сертификатов

Состояние «Не действует» включает также случаи: срок действия сертификата не наступил; срок действия сертификата истёк.

Таблица 7. Допустимые переходы между причинами изменения статуса

Строка

Причина в запросе 0

Причина в запросе 1

Причина в запросе 2

Причина в запросе 3

Предыдущее изменение статуса: 0

-

-

+

+

Предыдущее изменение статуса: 1

+

-

+

-

Предыдущее изменение статуса: 2

+

-

-

+

Предыдущее изменение статуса: 3

+

-

+

-

Последующее изменение статуса: 0

-

-

+

+

Последующее изменение статуса: 1

+

-

-

-

Последующее изменение статуса: 2

+

-

-

+

Последующее изменение статуса: 3

+

-

+

-

Изменение статуса отсутствует

+

-

+

+

«+» — переход допустим, «-» — переход недопустим. Изменения статуса, не предусмотренные таблицей, должны отклоняться. Идемпотентность запроса изменения статуса обеспечивается проверкой перехода по статусной модели.

Изменение статуса сертификата выполняется методом POST /certificate/guc/status-update (канал аккредитации и сертификатов ГУЦ) либо POST /certificate/qual/status-update (приватные каналы квалифицированных сертификатов) с указанием идентификатора сертификата (cert), времени вступления изменения в силу (updatedAt) и события (event). При выполнении метода должна проверяться допустимость перехода по статусной модели, а также что поле logicalCancelFlag сертификата имеет значение False. Результат изменения переносится в публичный канал сертификатов сервисом-ретранслятором.

Таблица 8. Коды ошибок изменения статуса сертификата

Код

Расшифровка

ERR-0010

Пустой запрос

ERR-0729

Отсутствует сертификат

ERR-0801

Отсутствует значение updatedAt

ERR-0802

У поля updatedAt некорректный формат

ERR-0803

Отсутствует значение event

ERR-0804

У поля event некорректный формат

ERR-0805

Невозможный переход по статусной модели

Логическая отмена сертификата выполняется методом POST /certificate/guc/certificate-cancel (канал аккредитации и сертификатов ГУЦ) либо POST /certificate/qual/certificate-cancel (приватные каналы квалифицированных сертификатов) с указанием идентификатора сертификата (cert). Метод применяется к сертификату с флагом logicalCancelFlag = False; в результате флаг устанавливается в значение True, и сертификат с флагом True переносится в публичный канал сервисом-ретранслятором.

Таблица 9. Коды ошибок логической отмены сертификата

Код

Расшифровка

ERR-0010

Пустой запрос

ERR-0730

Отсутствует отменяемый сертификат

ERR-0731

Ошибка разбора идентификатора cert

Метод получения данных сертификатов по заданному фильтру в приватном канале сертификатов: GET /certificate/qual/search?param=Значение для поиска, где param принимает значения: commonName, OGRN, SNILS, INN, INNLE, OGRNIP; фильтрация выполняется по равенству структур. Получение сведений об указанном сертификате выполняется методом GET /certificate/qual/{YYYY-MM-DDTHH:MM:SSZ;hashTBS}/info?logicalCancelFlag=False; при отсутствии флага поиска выдаётся информация по всем записям о сертификате в реестре.

4.2.2.3 Требования к ведению сведений о сертификатах УКЭП в публичном канале

Публичный канал сертификатов УЦ содержит сведения о сроках действия сертификатов, выданных удостоверяющим центром, и информацию об изменении их статусов. Доступ к записи в канале имеет ЕСИА; доступ к чтению — у всех участников канала. Персональные данные владельца сертификата и сам сертификат в публичный канал не переносятся.

Таблица 10. Состав записи о сертификате УКЭП в публичном канале

Поле

Назначение

_id*

Идентификатор записи в CouchDB; формируется чейнкодом единым механизмом (п. 4.2.2.5)

hashTBS*

Значение хэш-функции от TBS сертификата (ГОСТ Р 34.11-2012, 256 бит)

issuerUUID*

UUID сертификата издателя; для самоподписанного сертификата issuerUUID = _id

serialNumber*

Серийный номер сертификата

issuerOGRN*

ОГРН издателя; если поле ОГРН издателя в сертификате пустое, поле также пустое

subjectPublicKey*

Ключ проверки ЭП

validityNotBefore*

Дата начала действия сертификата

validityNotAfter*

Дата окончания действия сертификата

privateKeyUsagePeriod

Период действия секретного ключа (privateKeyNotBefore, privateKeyNotAfter, время в формате UTC)

isChecked*

Флаг форматной проверки структуры сертификата (True / False)

logicalCancelFlag*

Флаг логической отмены (True / False)

createdAtCC*

Время создания записи о сертификате в распределённом реестре

* отмечены обязательные поля.

Перенос сведений в публичный канал выполняется сервисом-ретранслятором ЕСИА: после внесения сведений в приватный канал сертификатов сервис-ретранслятор перехватывает событие о внесении, запрашивает копирование данных из приватного канала и вызывает внутренний метод чейнкода публичного канала на запись данных. Переносятся: _id, hashTBS, issuerUUID, serialNumber, issuerOGRN, subjectPublicKey, validityNotBefore, validityNotAfter, privateKeyUsagePeriod; при переносе формируются модель сведений о сертификате (с полями isChecked = False, logicalCancelFlag = False, createdAtCC) и модель истории с записью события «1» (начало действия сертификата). Изменения статуса и логическая отмена переносятся в публичный канал соответствующими внутренними методами чейнкода.

4.2.2.4 Требования к представлению данных о статусе сертификатов УКЭП

Представления данных о статусе сертификата УКЭП предоставляются через программный интерфейс публичного канала сертификатов УЦ.

Получение истории статуса сертификата: GET certificate-validity/qual/all?cert=YYYY-MM-DDTHH:MM:SSZ;hashTBS; возвращается история изменения статуса сертификата. Коды ошибок: ERR-0010 (пустой запрос), ERR-0729 (отсутствует сертификат).

Получение статуса сертификата на заданный момент времени: GET certificate-validity/qual/by-date?cert=YYYY-MM-DDTHH:MM:SSZ;hashTBS&time='YYYY-MM-DDTHH:MM:SSZ'. Возвращается результат по каждому сертификату цепочки доверия (target_cert, sub_ca, root_cert): идентификатор сертификата (certId), статус сертификата в цепочке (localStatus со значениями status True/False, details: notYetValid — срок действия ещё не наступил; issued — действует с момента выпуска; expired — срок действия истёк; annulled — аннулирован; revoked — действие досрочно прекращено/приостановлено; resumption — действие возобновлено; date — дата события, определяющего статус; reason — причина отзыва), статус аккредитации УЦ издателя (accreditationStatus), а также статус секретного ключа (privateKeyStatus, для проверяемого сертификата) и итоговый статус (resultStatus).

Статус сертификата на заданную дату определяется по истории изменения статуса сертификата: для даты проверки выбирается запись с максимальным значением updatedAt, не превышающим дату проверки; учитываются события «выпуск», «прекращение», «возобновление», «аннулирование», а также выход даты проверки за пределы периода действия сертификата. Статус аккредитации издателя определяется на дату начала действия сертификата (validityNotBefore) запросом к реестру аккредитации и сертификатов УЦ. Итоговый статус: если у всех сертификатов цепочки localStatus.status = true и accreditationStatus = true, то resultStatus = true; если хотя бы у одного сертификата localStatus.status = false или accreditationStatus = false, то resultStatus = false. Статус секретного ключа: True, если дата проверки попадает в период действия секретного ключа (включая границы); False — вне периода; если период не указан, статус ключа не указывается. Коды ошибок: ERR-0010, ERR-0729.

Получение периодов действия сертификата: GET certificate-validity/qual/periods?cert=YYYY-MM-DDTHH:MM:SSZ;hashTBS. Периоды действия вычисляются по истории изменения статуса: событие «1» (начало действия) задаёт период от validityNotBefore до validityNotAfter; событие «2» (прекращение) обрывает период; событие «0» (аннулирование) исключает все периоды действия с даты начала действия сертификата; событие «3» (возобновление) начинает новый период. Периоды действия целевого сертификата — пересечение периодов действия всех сертификатов цепочки доверия (начало — максимум начал периодов, окончание — минимум окончаний периодов), пересекающиеся и соприкасающиеся периоды объединяются. Если аккредитация издателя не действует на дату начала действия сертификата, периоды действия отсутствуют. Коды ошибок: ERR-0010, ERR-0729.

4.2.2.5 Требования к формированию идентификаторов записей о сертификатах

Идентификаторы записей о сертификатах формируются автоматически единым механизмом:

  • внешний идентификатор сертификата (cert) — конкатенация даты начала действия сертификата validityNotBefore (время в формате UTC, YYYY-MM-DDTHH:MM:SSZ), знака «;» и значения хэш-функции от TBS сертификата hashTBS (ГОСТ Р 34.11-2012, 256 бит);

  • идентификатор записи в CouchDB (_id) — формируется чейнкодом по данным сертификата: структура включает версию чейнкода, контрольную сумму, тип актива (для КСКПЭП — значение 2), идентификатор реестра, идентификатор издателя сертификата и идентификатор актива (74 младших бита хэша серийного номера сертификата); при формировании проверяется уникальность идентификатора, коллизии разрешаются повторным хэшированием с фиксацией в сервисной базе данных сервисного чейнкода;

  • идентификатор записи об истории статуса сертификата — комбинация uuid сертификата и суффикса HIST;

  • issuerUUID — uuid сертификата издателя; для самоподписанного сертификата равен _id.

Значение идентификатора одного актива одинаково для разных каналов.