Подписанты CMS SubjectKeyIdentifier

HotPDF может идентифицировать основного подписанта CMS по расширению X.509 subjectKeyIdentifier вместо имени издателя и серийного номера сертификата

Выбор идентификатора

HPDFCMSDefaultOptions выставляет THPDFCMSSignOptions.SignerIdentifier в cmsidIssuerAndSerialNumber, чтобы существующие вызывающие сохранили свой детерминированный байтовый облик CMS

Выставьте поле в cmsidSubjectKeyIdentifier перед вызовом HPDFCMSBuildSignedDataEx, CMS-сборщика на провайдере, оценки placeholder или высокоуровневой перегрузки подписи, принимающей THPDFCMSSignOptions

Options := HPDFCMSDefaultOptions(palBaseline_B_B);
Options.SignerIdentifier := cmsidSubjectKeyIdentifier;
CMS := HPDFCMSBuildSignedDataEx(KeyMaterial, DocumentDigest, Options);

Требование к сертификату

Сертификат подписанта должен содержать ровно одно непустое расширение X.509 с OID 2.5.29.14, чьё значение содержит полный DER OCTET STRING

HotPDF отказывает до подписывания, если расширение отсутствует, дублируется, пусто, усечено или битое; синтезировать идентификатор ключа из публичного ключа он не станет

SigningCertificateV2 по-прежнему привязывает тот же сертификат своими полями издателя и серийного номера, даже когда SID в SignerInfo использует идентификатор ключа

Wire format и верификация

Идентификатор ключа кодируется как primitive IMPLICIT [0], SignerInfo.version равен 3, а генерируемый одноподписантный SignedData.version равен 3, как требует RFC 5652

Верификация требует побайтового совпадения SID с расширением встроенного сертификата и отвергает несовпадающие значения SID, записи issuer-and-serial с версией подписанта не 1, записи SKI с версией подписанта не 3 и SKI-контейнеры с внешней версией ниже 3

Компактная идентичность полезна для key-oriented хранилищ сертификатов и сценариев, не хранящих кодировки имён издателей, но потребляющее ПО обязано поддерживать SKI-вариант RFC 5652

HPDFCMSBuildCounterSignerInfo по-прежнему использует идентичности issuer-and-serial; основного подписанта настраивайте через THPDFCMSSignOptions

См. современные signature provider и согласованность digest-алгоритмов CMS