Подписанты 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