CMS SubjectKeyIdentifier 签名者
HotPDF 可以改用 X.509 subjectKeyIdentifier 扩展来标识 CMS 主签名者,而不依赖签发者名称加证书序列号
标识符的选择
HPDFCMSDefaultOptions 把 THPDFCMSSignOptions.SignerIdentifier 设为 cmsidIssuerAndSerialNumber,保证既有调用方拿到的 CMS 字节形状保持不变
在调用 HPDFCMSBuildSignedDataEx、基于 provider 的 CMS 构建器、占位符估算,或任何接受 THPDFCMSSignOptions 的高级签名重载之前,把该字段设为 cmsidSubjectKeyIdentifier
Options := HPDFCMSDefaultOptions(palBaseline_B_B);
Options.SignerIdentifier := cmsidSubjectKeyIdentifier;
CMS := HPDFCMSBuildSignedDataEx(KeyMaterial, DocumentDigest, Options);
证书要求
签名者证书必须恰好包含一个非空的 OID 为 2.5.29.14 的 X.509 扩展,且扩展值是一个完整的 DER OCTET STRING
该扩展缺失、重复、为空、被截断或格式错误时,HotPDF 会在签名前直接失败;它不会从公钥合成一个密钥标识符
即使 SignerInfo 的 SID 使用密钥标识符,SigningCertificateV2 仍然通过其签发者和序列号字段绑定同一张证书
线上格式与验证
密钥标识符编码为 primitive IMPLICIT [0],SignerInfo.version 为 3,生成的单签名者 SignedData.version 按RFC 5652 要求同样为 3
验证要求 SID 字节与内嵌证书扩展一致,并拒绝以下情况:SID 值不匹配、签名者版本非 1 的 issuer-and-serial 记录、签名者版本非 3 的 SKI 记录,以及外层版本低于 3 的 SKI 容器
这种紧凑标识对面向密钥的证书存储和不保留签发者名称编码的工作流很有用,但消费方软件必须支持 RFC 5652 的 SKI 选项
HPDFCMSBuildCounterSignerInfo 继续使用 issuer-and-serial 身份;主签名者通过 THPDFCMSSignOptions 配置