ПМИ_реестры_сертификатов_УНЭП_А.3_v01_draft

А.3 Проверка создания распределённых реестров данных о сертификатах УНЭП и событиях жизненного цикла сертификатов УНЭП

Настоящая методика обеспечивает проверку реализации требований, изложенных в ЧТЗ п. 4.2.3, в соответствии с пунктами /4.2.2.1, 4.2.2.5, 4.2.2.11 Заявки № ИЭП-1.

Проверки выполняются вызовами методов REST API и наблюдением базы глобального состояния. Во всех шагах проверок действует единственная роль — демонстрирующий; иные роли не предусмотрены. Вызовы методов приватных каналов неквалифицированных сертификатов выполняются от имени УЦ-владельца канала; вызовы методов публичного канала — от имени участника канала, имеющего доступ на чтение. Функции доступны в среде развёртывания; IP-адрес среды указывается при подготовке испытаний и приводится в протоколе испытаний (Приложение Б).

Структура настоящего раздела повторяет структуру раздела А.2 с заменой каналов, методов и проверок на соответствующие сертификатам УНЭП; различия между разделами А.2 и А.3 явно указаны в проверках. Ключевое отличие сценария УНЭП: проверка аккредитации издателя не выполняется ни при внесении сведений о сертификате, ни при определении статуса сертификата на заданную дату и периодов действия.

Предварительные условия: развёрнут тестовый стенд; развёрнуты каналы неквалифицированных сертификатов (канал сертификатов издателей Госключ, приватный канал неквалифицированных сертификатов Госключ) и публичный канал сертификатов УЦ; демонстрирующему предоставлены тестовые сертификаты УНЭП (корневой и промежуточный сертификаты издателей Госключ, конечные сертификаты УНЭП — корректные и с заведомыми нарушениями формата), ключ доступа к REST API и учётные данные для подключения к базе глобального состояния (DBeaver).

А.3.1 Проверка создания записи о сертификате УНЭП в приватном канале

Проверка открывает сценарий испытаний сертификатов УНЭП: к её выполнению запись о тестовом сертификате в реестре отсутствует, поэтому регистрация проводится на корректном сертификате УНЭП, выданном в инфраструктуре Госключ. Подтверждается приём сертификата через REST API: корректный запрос обрабатывается, в ответе возвращается идентификатор записи вида «дата начала действия;hashTBS». Альтернативные шаги доказывают защиту от повторной регистрации (ERR-0721) и от пустого запроса (ERR-0010). Отличие от проверки А.2.1 — используемые методы: POST /certificate/unqual/create (приватный канал неквалифицированных сертификатов Госключ) и POST /certificate/goskey/create (канал сертификатов издателей Госключ, для сертификатов издателей).

№

Шаг

Ожидаемый результат

1

Действие: Выполнить запрос «Создать запись о сертификате в приватном канале» (POST /certificate/unqual/create), передав корректный сертификат УНЭП

HTTP 200; возвращён идентификатор вида YYYY-MM-DDTHH:MM:SSZ;hashTBS.

2

Действие: Выполнить запрос «Создать запись о сертификате в приватном канале» (POST /certificate/goskey/create), передав корректный сертификат издателя Госключ (SUB_CA)

HTTP 200; возвращён идентификатор вида YYYY-MM-DDTHH:MM:SSZ;hashTBS.

3

(альтернативный к шагу 1) Действие: Повторно выполнить запрос с тем же сертификатом

Запрос отклонён; возвращён код ошибки ERR-0721 (сертификат с таким _id уже существует в реестре).

4

(альтернативный к шагу 1) Действие: Выполнить запрос с пустым телом

Запрос отклонён; возвращён код ошибки ERR-0010.

А.3.2 Проверка форматно-логического контроля сведений о сертификате УНЭП

Проверка подтверждает, что сведения о сертификате УНЭП при внесении подвергаются декодированию, парсингу и форматно-логическому контролю: некорректное транспортное представление сертификата отклоняется с соответствующим кодом ошибки, а нарушения требований к формату неквалифицированного сертификата не блокируют регистрацию, но фиксируются перечнем предупреждений в записи о сертификате. Отличие от проверки А.2.2 — состав обязательных проверок: вместо проверок типа владельца и полномочий издателя (QCERT) для УНЭП определяется тип сертификата (ROOT_CA, SUB_CA, END_ENTITY) и проверяется соответствие профилю этого типа (UNQCERT). Предупреждения наблюдаются в записи о сертификате при проверке А.3.7.

№

Шаг

Ожидаемый результат

1

Действие: Выполнить запрос «Создать запись о сертификате в приватном канале», передав PEM-сертификат с искажённым телом BASE64

Запрос отклонён; возвращён код ошибки ERR-0704 либо ERR-0705.

2

Действие: Выполнить запрос «Создать запись о сертификате в приватном канале», передав сертификат УНЭП конечного пользователя (END_ENTITY) без обязательных расширений (extendedKeyUsage без OID 1.3.6.1.5.5.7.3.4, cRLDistributionPoints)

HTTP 200; возвращён идентификатор записи; в записи о сертификате (проверка А.3.7) поле warnings содержит предупреждения UNQCERT_END_ENTITY_EKU_EMAIL_PROTECTION_MISSING, UNQCERT_END_ENTITY_CRL_DP_MISSING.

3

Действие: Выполнить запрос «Создать запись о сертификате в приватном канале», передав сертификат, тип которого не удаётся определить по составу полей

HTTP 200; в записи о сертификате поле warnings содержит предупреждение UNQCERT_CERT_TYPE_UNDETERMINED.

А.3.3 Проверка проверки цепочки доверия при внесении сертификата УНЭП

Проверка опирается на записи реестра, созданные проверкой А.3.1, и подтверждает проверку цепочки доверия: для несамоподписанного сертификата родительские сертификаты запрашиваются — в отличие от проверки А.2.3 — в реестре сертификатов издателей Госключ, а при их отсутствии регистрация отклоняется. Второй шаг подтверждает проверку действительности издателя на дату начала действия сертификата (UNQCERT_PARENT_NOT_VALID_AT_ISSUANCE). Альтернативный шаг доказывает криптографическую проверку: сертификат с неверной электронной подписью отклоняется с кодом ошибки ERR-0722. Проверки аккредитации издателя, предусмотренные для УКЭП (А.2.3, шаг 2), для сертификатов УНЭП не выполняются.

№

Шаг

Ожидаемый результат

1

Действие: Выполнить запрос «Создать запись о сертификате в приватном канале», передав сертификат УНЭП, родительский сертификат которого отсутствует в реестре сертификатов издателей Госключ

Запрос отклонён; возвращена ошибка «Отсутствует родительский сертификат».

2

Действие: Выполнить запрос «Создать запись о сертификате в приватном канале», передав сертификат УНЭП, чей издатель не был действителен на дату начала действия регистрируемого сертификата

HTTP 200; в записи о сертификате поле warnings содержит UNQCERT_PARENT_NOT_VALID_AT_ISSUANCE.

3

(альтернативный к шагу 1) Действие: Выполнить запрос «Создать запись о сертификате в приватном канале», передав сертификат УНЭП с неверной электронной подписью

Запрос отклонён; возвращён код ошибки ERR-0722.

А.3.4 Проверка изменения статуса сертификата УНЭП

Проверка опирается на сертификат, зарегистрированный проверкой А.3.1, и проводит его по предусмотренным статусной моделью переходам: прекращение действия сертификата (событие «2» с указанием причины) и возобновление действия сертификата (событие «3»). Статусная модель, состав событий и коды ошибок — те же, что для сертификатов УКЭП (проверка А.2.4); отличие — используемые методы POST /certificate/unqual/status-update и POST /certificate/goskey/status-update.

№

Шаг

Ожидаемый результат

1

Действие: Выполнить запрос «Изменить статус сертификата в приватном канале» (POST /certificate/unqual/status-update) с event = 2 (прекращение действия), указав причину и updatedAt

HTTP 200; возвращены сведения о новом событии истории (номер версии увеличен на 1).

2

Действие: Выполнить запрос «Изменить статус сертификата в приватном канале» с event = 3 (возобновление действия) и новым updatedAt

HTTP 200; статус сертификата изменён; в истории зафиксировано событие «3».

3

(альтернативный к шагам 1–2) Действие: Выполнить запрос «Изменить статус сертификата в приватном канале» без поля updatedAt

Запрос отклонён; возвращён код ошибки ERR-0801.

4

(альтернативный к шагам 1–2) Действие: Повторно выполнить запрос шага 1 с теми же значениями

Запрос отклонён; возвращён код ошибки ERR-0805 (невозможный переход по статусной модели).

А.3.5 Проверка логической отмены сертификата УНЭП

Проверка опирается на сертификат, зарегистрированный проверкой А.3.1. Подтверждается функция логической отмены: отмена устанавливает флаг logicalCancelFlag = True; отменённый сертификат переносится в публичный канал с флагом True (проверка А.3.9). Альтернативный шаг подтверждает повторную отмену: запрос отклоняется с кодом ERR-0730.

№

Шаг

Ожидаемый результат

1

Действие: Выполнить запрос «Логическая отмена» (POST /certificate/unqual/certificate-cancel), передав идентификатор сертификата, зарегистрированного проверкой А.3.1

HTTP 200; в ответе logicalCancelFlag = True.

2

(альтернативный к шагу 1) Действие: Повторно выполнить запрос шага 1

Запрос отклонён; возвращён код ошибки ERR-0730.

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

Проверка опирается на записи о сертификатах, накопленные проверками А.3.1–А.3.3, и подтверждает метод получения данных по заданному фильтру в приватном канале неквалифицированных сертификатов: по значению параметра фильтрации возвращается перечень идентификаторов сертификатов, удовлетворяющих фильтру, а по идентификатору сертификата — модель сведений о сертификате, объединённая с моделью истории.

№

Шаг

Ожидаемый результат

1

Действие: Выполнить запрос GET /certificate/unqual/search?param=<OGRN владельца тестового сертификата>

HTTP 200; возвращён перечень идентификаторов сертификатов, в записях которых поле OGRN владельца совпадает со значением поиска; тестовый сертификат присутствует в перечне.

2

Действие: Выполнить запрос GET /certificate/unqual/{YYYY-MM-DDTHH:MM:SSZ;hashTBS}/info?logicalCancelFlag=False для тестового сертификата

HTTP 200; возвращена модель сведений о сертификате (Описание решения, п. 4.1.1), объединённая с моделью истории (п. 3.1.2).

А.3.7 Проверка ведения записи «Сертификат» УНЭП в базе глобального состояния

Способ проверки: наблюдение базы глобального состояния (Описание решения, п. 4.1.1).

Предварительные условия: выполнены проверки А.3.1–А.3.3 (в приватном канале созданы записи о сертификатах, включая записи с предупреждениями); доступ к базе глобального состояния предоставлен.

Проверка подтверждает, что сведения о сертификатах УНЭП, принятые через REST API, доведены до распределённого реестра. Наблюдением записи о сертификате подтверждается её структура: идентификатор записи, хэш TBS, uuid сертификата издателя, сведения из сертификата, исходный сертификат, флаги форматной проверки и логической отмены, перечень предупреждений и служебное поле времени создания. Записи с предупреждениями (результат проверки А.3.2) подтверждают доведение результатов форматно-логического контроля до реестра.

№

Шаг

Ожидаемый результат

1

Действие: Подключиться к базе глобального состояния стенда (DBeaver)

Подключение установлено; база глобального состояния доступна.

2

Действие: Выполнить выборку записи о тестовом сертификате и проверить её структуру (Описание решения, п. 4.1.1)

Запись содержит: _id; hashTBS; issuerUUID; сведения из сертификата (version, serialNumber, subjectPublicKeyInfo, validityNotBefore, validityNotAfter, issuer, subject, extensions, algorithmSignature, signatureValue); certificate; isChecked; logicalCancelFlag; createdAtCC; warnings (для сертификатов с нарушениями формата — предупреждения UNQCERT_*).

3

Действие: Проверить сведения о типе сертификата в записи, созданной проверкой А.3.2

Тип сертификата, определённый при проверках (ROOT_CA / SUB_CA / END_ENTITY), зафиксирован в записи о сертификате.

А.3.8 Проверка ведения истории изменения статуса сертификата УНЭП

Способ проверки: наблюдение базы глобального состояния (Описание решения, п. 3.1.2).

Предварительные условия: выполнены проверки А.3.1, А.3.4; доступ к базе глобального состояния предоставлен.

Проверка опирается на события, сформированные запросами сценария (проверки А.3.1, А.3.4), и подтверждает накопление событий в истории с возрастающими номерами версий. Идентификатор записи истории формируется как комбинация uuid сертификата и суффикса HIST. Сформированная история является основой для получения статуса сертификата на заданную дату (проверка А.3.11) и периодов действия (проверка А.3.12).

№

Шаг

Ожидаемый результат

1

Действие: Выполнить выборку записи истории изменения статуса тестового сертификата

Запись содержит: _id (uuid сертификата с суффиксом HIST); массив history; значения versionStatus возрастают от события к событию.

2

Действие: Проверить состав событий в массиве history

События содержат: versionStatus, updatedAt (время в формате UTC), event (1 — начало действия, 2 — прекращение действия, 3 — возобновление действия), reason (для события прекращения), isCanceled, createdAtCC.

А.3.9 Проверка переноса сведений о сертификате УНЭП в публичный канал

Способ проверки: наблюдение базы глобального состояния публичного канала (Описание решения, п. 4.2).

Предварительные условия: выполнены проверки А.3.1, А.3.4, А.3.5; доступ к базе глобального состояния предоставлен.

Проверка подтверждает автоматический перенос сведений из приватного канала в публичный канал сервисом-ретранслятором ЕСИА: в публичном канале создаётся запись о сертификате с усечённым составом полей — без персональных данных владельца и без самого сертификата, а события изменения статуса и логическая отмена переносятся в запись истории публичного канала. Отличие от проверки А.2.9: для сертификатов УНЭП, издатель которых не имеет ОГРН, поле issuerOGRN в записи публичного канала пустое.

№

Шаг

Ожидаемый результат

1

Действие: Выполнить выборку записи о тестовом сертификате в публичном канале

Запись содержит: _id; hashTBS; issuerUUID; serialNumber; issuerOGRN; subjectPublicKey; validityNotBefore; validityNotAfter; privateKeyUsagePeriod; isChecked; logicalCancelFlag; createdAtCC.

2

Действие: Проверить отсутствие в записи персональных данных и самого сертификата

В записи публичного канала отсутствуют поля issuer/subject (персональные данные), certificate, warnings.

3

Действие: Выполнить выборку записи истории изменения статуса тестового сертификата в публичном канале

Запись истории содержит события, перенесённые из приватного канала, включая событие «1» (начало действия); для логически отменённого сертификата в записи о сертификате logicalCancelFlag = True.

А.3.10 Проверка получения истории статуса сертификата УНЭП

Проверка опирается на запись сертификата в публичном канале (проверка А.3.9) и подтверждает метод получения истории статуса: возвращаются все события изменения статуса сертификата, накопленные в публичном канале. Альтернативный шаг подтверждает обработку запроса по сертификату, отсутствующему в реестре: запрос отклоняется с кодом ошибки ERR-0729.

№

Шаг

Ожидаемый результат

1

Действие: Выполнить запрос GET certificate-validity/unqual/all?cert=<идентификатор тестового сертификата>

HTTP 200; возвращена история изменения статуса сертификата: все события (versionStatus, updatedAt, event, reason, createdAtCC).

2

(альтернативный к шагу 1) Действие: Выполнить запрос GET certificate-validity/unqual/all?cert=<идентификатор сертификата, отсутствующего в реестре>

Запрос отклонён; возвращён код ошибки ERR-0729.

А.3.11 Проверка получения статуса сертификата УНЭП на заданный момент времени

Предварительные условия: выполнены проверки А.3.1–А.3.5, А.3.9 (сформированы история изменения статуса тестового сертификата и запись в публичном канале).

Проверка подтверждает представление статуса сертификата УНЭП на заданный момент времени: статус определяется по истории событий (для даты проверки выбирается запись с максимальным updatedAt, не превышающим дату проверки). Отличие от проверки А.2.11 — обращение к реестру аккредитации не выполняется и поле accreditationStatus не определяется: итоговый статус учитывает только статусы сертификатов цепочки доверия. Возвращаются сведения по проверяемому сертификату, промежуточному и корневому сертификатам цепочки, статус секретного ключа и итоговый статус.

№

Шаг

Ожидаемый результат

1

Действие: Выполнить запрос GET certificate-validity/unqual/by-date?cert=<идентификатор>&time='<дата в пределах периода действия сертификата>'

HTTP 200; для даты проверки возвращены: target_cert (certId, localStatus.status = True, details = issued, date), sub_ca, root_cert, privateKeyStatus, resultStatus = True; поле accreditationStatus в ответе отсутствует.

2

Действие: Выполнить запрос с датой проверки, на которую сертификат был прекращён (после события «2»)

HTTP 200; localStatus.status = False, details = revoked, date = дата события прекращения, reason = код причины; resultStatus = False.

3

Действие: Выполнить запрос с датой проверки, предшествующей дате начала действия сертификата

HTTP 200; localStatus.status = False, details = notYetValid, date = validityNotBefore.

4

(альтернативный к шагу 1) Действие: Выполнить запрос по сертификату, отсутствующему в реестре

Запрос отклонён; возвращён код ошибки ERR-0729.

А.3.12 Проверка получения периодов действия сертификата УНЭП

Предварительные условия: сформирована история изменения статуса тестового сертификата (проверки А.3.1, А.3.4).

Проверка завершает сценарий и подтверждает представление периодов действия сертификата: периоды вычисляются по истории изменения статуса и пересечению периодов действия сертификатов цепочки доверия. Отличие от проверки А.2.12 — проверка статуса аккредитации издателя не выполняется, и для сертификатов УНЭП период действия не зависит от аккредитации. Результат подтверждает, что сведения, последовательно внесённые в реестр запросами сценария, доступны потребителям в сводном виде.

№

Шаг

Ожидаемый результат

1

Действие: Выполнить запрос GET certificate-validity/unqual/periods?cert=<идентификатор тестового сертификата>

HTTP 200; возвращён перечень периодов (from/to), вычисленный по истории изменения статуса с учётом пересечения периодов цепочки доверия; первый период начинается с даты начала действия сертификата.