В спецификации CAdES (CMS Advanced Electronic Signatures) одним из ключевых элементов расширенной валидации подписи является ссылка на полные данные о сертификатах, участвующих в цепочке доверия. Для этого используется структура CompleteCertificateRefs, которая формирует список идентификаторов сертификатов, включённых в подпись или связанных с ней через цепочку сертификации.
В библиотеке Jsrsasign данный ASN.1-компонент представлен классом
KJUR.asn1.cades.CompleteCertificateRefs, предназначенным
для генерации и представления структуры в формате ASN.1 DER,
соответствующей требованиям стандарта ETSI.
С точки зрения ASN.1 описание структуры выглядит как последовательность:
CompleteCertificateRefs ::= SEQUENCE OF
OtherCertIDКаждый элемент списка представляет собой идентификатор сертификата, обычно включающий:
Таким образом, класс в Jsrsasign инкапсулирует массив ссылок на сертификаты, обеспечивая их корректную сериализацию.
Структура CompleteCertificateRefs используется в расширенных форматах подписи CAdES-X Long Type и CAdES-A. Основная задача — предоставить независимую возможность верификации цепочки сертификатов без необходимости повторного получения их из внешних источников.
Это особенно важно в следующих сценариях:
Использование CompleteCertificateRefs позволяет
фиксировать состояние цепочки сертификатов на момент подписания.
Класс находится в пространстве:
KJUR.asn1.cades.CompleteCertificateRefs
и относится к модулю CAdES ASN.1-структур библиотеки Jsrsasign. Он взаимодействует с другими компонентами:
KJUR.asn1.cades.OtherCertIDKJUR.asn1.cms.SignedDataKJUR.asn1.ASN1ObjectТипичная инициализация объекта выполняется через передачу массива идентификаторов сертификатов.
Основная сигнатура:
new KJUR.asn1.cades.CompleteCertificateRefs(params)
где params содержит:
otherCertIDs — массив объектов
OtherCertIDКаждый элемент массива описывает отдельный сертификат в цепочке.
Формирование объекта начинается с создания идентификаторов сертификатов:
var certId1 = new KJUR.asn1.cades.OtherCertID({
digestAlgorithm: "sha256",
certHash: "a1b2c3d4e5f6..."
});
var certId2 = new KJUR.asn1.cades.OtherCertID({
digestAlgorithm: "sha256",
certHash: "112233445566..."
});
Далее создаётся структура CompleteCertificateRefs:
var completeCertRefs = new KJUR.asn1.cades.CompleteCertificateRefs({
otherCertIDs: [certId1, certId2]
});
Для получения бинарного представления используется метод:
completeCertRefs.getEncodedHex();
Результатом является DER-кодированная строка в шестнадцатеричном формате, которая может быть встроена в CMS SignedData или использована в атрибуте подписи CAdES.
При сериализации класс выполняет следующие шаги:
OtherCertID как отдельный элемент
последовательностиОсобенность реализации заключается в строгом соответствии ASN.1 DER, что критично для совместимости с криптографическими валидаторами.
Класс CompleteCertificateRefs не содержит
криптографической логики сам по себе. Его корректность полностью зависит
от объектов типа OtherCertID.
Типичная структура OtherCertID включает:
Таким образом, CompleteCertificateRefs выступает контейнером для набора таких идентификаторов.
В расширении CAdES-X Long структура CompleteCertificateRefs применяется совместно с:
Эти элементы формируют полный архив проверочных данных, необходимых для долгосрочной проверки подписи.
Реализация класса ориентирована на следующие принципы:
Это делает класс низкоуровневым строительным блоком для формирования CAdES-структур.
На практике при работе с CompleteCertificateRefs
встречаются следующие ошибки:
otherCertIDsОсобенно критично корректное формирование certHash, так
как именно он используется для сопоставления сертификатов при проверке
подписи.
В составе CMS структура включается как атрибут подписанта:
CompleteCertificateRefs становится частью набора доказательственных данных, прикреплённых к подписи.
При проверке подписи валидатор:
Таким образом, структура выполняет функцию криптографического «слепка» цепочки сертификатов.